summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDenis Declara <declara91@gmail.com>2012-03-21 18:16:04 +0000
committerDenis Declara <declara91@gmail.com>2012-03-21 18:16:04 +0000
commitfbf20a8af5f761390e447ac50c52135020dabf32 (patch)
tree895a98b0ef06eb68ace64bd1fcfb7ee5b0af48a8 /src
parentMerged with trunk (diff)
parentPreferences. New desktop integration preference for Windows users (native/gtk... (diff)
downloadinkscape-fbf20a8af5f761390e447ac50c52135020dabf32.tar.gz
inkscape-fbf20a8af5f761390e447ac50c52135020dabf32.zip
trunk merge
(bzr r11073.1.2)
Diffstat (limited to 'src')
-rw-r--r--src/desktop.cpp2
-rw-r--r--src/preferences-skeleton.h3
-rw-r--r--src/ui/context-menu.cpp32
-rw-r--r--src/ui/dialog/filedialog.cpp17
-rw-r--r--src/ui/dialog/inkscape-preferences.cpp30
-rw-r--r--src/ui/dialog/inkscape-preferences.h2
-rw-r--r--src/ui/dialog/xml-tree.cpp128
-rw-r--r--src/ui/dialog/xml-tree.h7
-rw-r--r--src/ui/widget/filter-effect-chooser.cpp9
-rw-r--r--src/ui/widget/filter-effect-chooser.h3
-rw-r--r--src/ui/widget/object-composite-settings.cpp8
-rw-r--r--src/verbs.cpp2
-rw-r--r--src/widgets/sp-xmlview-attr-list.cpp110
-rw-r--r--src/widgets/sp-xmlview-attr-list.h14
-rw-r--r--src/widgets/stroke-style.cpp4
15 files changed, 171 insertions, 200 deletions
diff --git a/src/desktop.cpp b/src/desktop.cpp
index ecc480f86..cf71c8f9e 100644
--- a/src/desktop.cpp
+++ b/src/desktop.cpp
@@ -1822,7 +1822,7 @@ SPDesktop::show_dialogs()
mapVerbPreference.insert(std::make_pair ((int)SP_VERB_VIEW_ICON_PREVIEW, "/dialogs/iconpreview") );
mapVerbPreference.insert(std::make_pair ((int)SP_VERB_DIALOG_SVG_FONTS, "/dialogs/svgfonts") );
mapVerbPreference.insert(std::make_pair ((int)SP_VERB_DIALOG_INPUT, "/dialogs/inputdevices") );
- mapVerbPreference.insert(std::make_pair ((int)SP_VERB_CONTEXT_SELECT_PREFS, "/dialogs/preferences") );
+ mapVerbPreference.insert(std::make_pair ((int)SP_VERB_DIALOG_DISPLAY, "/dialogs/preferences") );
mapVerbPreference.insert(std::make_pair ((int)SP_VERB_SELECTION_GRIDTILE, "/dialogs/gridtiler") );
mapVerbPreference.insert(std::make_pair ((int)SP_VERB_SELECTION_TRACE, "/dialogs/trace") );
mapVerbPreference.insert(std::make_pair ((int)SP_VERB_DIALOG_TEXT, "/dialogs/textandfont") );
diff --git a/src/preferences-skeleton.h b/src/preferences-skeleton.h
index 18b7150f5..2b674d015 100644
--- a/src/preferences-skeleton.h
+++ b/src/preferences-skeleton.h
@@ -281,6 +281,9 @@ static char const preferences_skeleton[] =
" <group id=\"bitmapeditor\" value=\"gimp\"/>\n"
" <group id=\"bitmapautoreload\" value=\"1\"/>\n"
" <group id=\"dialogtype\" value=\"1\"/>\n"
+#ifdef WIN32
+" <group id=\"desktopintegration\" value=\"1\"/>\n"
+#endif
" <group id=\"dock\" "
" cancenterdock=\"1\""
" dockbarstyle=\"2\"" // GDL_DOCK_BAR_BOTH
diff --git a/src/ui/context-menu.cpp b/src/ui/context-menu.cpp
index 4bb8b4803..bf116f5fb 100644
--- a/src/ui/context-menu.cpp
+++ b/src/ui/context-menu.cpp
@@ -414,23 +414,27 @@ static void sp_image_menu(SPObject *object, SPDesktop *desktop, GtkMenu *m)
}
/* Embed image */
- w = gtk_menu_item_new_with_mnemonic(C_("Context menu", "Embed Image"));
- g_object_set_data(G_OBJECT(w), "desktop", desktop);
- g_signal_connect(G_OBJECT(w), "activate", G_CALLBACK(sp_image_image_embed), item);
- gtk_widget_show(w);
- gtk_menu_shell_append(GTK_MENU_SHELL(m), w);
- if ( (!href) || ((strncmp(href, "data:", 5) == 0)) ) {
- gtk_widget_set_sensitive( w, FALSE );
+ if (Inkscape::Verb::getbyid( "org.ekips.filter.embedselectedimages" )) {
+ w = gtk_menu_item_new_with_mnemonic(C_("Context menu", "Embed Image"));
+ g_object_set_data(G_OBJECT(w), "desktop", desktop);
+ g_signal_connect(G_OBJECT(w), "activate", G_CALLBACK(sp_image_image_embed), item);
+ gtk_widget_show(w);
+ gtk_menu_shell_append(GTK_MENU_SHELL(m), w);
+ if ( (!href) || ((strncmp(href, "data:", 5) == 0)) ) {
+ gtk_widget_set_sensitive( w, FALSE );
+ }
}
/* Extract image */
- w = gtk_menu_item_new_with_mnemonic(C_("Context menu", "Extract Image"));
- g_object_set_data(G_OBJECT(w), "desktop", desktop);
- g_signal_connect(G_OBJECT(w), "activate", G_CALLBACK(sp_image_image_extract), item);
- gtk_widget_show(w);
- gtk_menu_shell_append(GTK_MENU_SHELL(m), w);
- if ( (!href) || ((strncmp(href, "data:", 5) != 0)) ) {
- gtk_widget_set_sensitive( w, FALSE );
+ if (Inkscape::Verb::getbyid( "org.ekips.filter.extractimage" )) {
+ w = gtk_menu_item_new_with_mnemonic(C_("Context menu", "Extract Image"));
+ g_object_set_data(G_OBJECT(w), "desktop", desktop);
+ g_signal_connect(G_OBJECT(w), "activate", G_CALLBACK(sp_image_image_extract), item);
+ gtk_widget_show(w);
+ gtk_menu_shell_append(GTK_MENU_SHELL(m), w);
+ if ( (!href) || ((strncmp(href, "data:", 5) != 0)) ) {
+ gtk_widget_set_sensitive( w, FALSE );
+ }
}
}
diff --git a/src/ui/dialog/filedialog.cpp b/src/ui/dialog/filedialog.cpp
index cff2f2488..47ba6c748 100644
--- a/src/ui/dialog/filedialog.cpp
+++ b/src/ui/dialog/filedialog.cpp
@@ -22,6 +22,7 @@
#include "gc-core.h"
#include <dialogs/dialog-events.h>
#include "extension/output.h"
+#include "preferences.h"
namespace Inkscape
{
@@ -86,7 +87,13 @@ FileOpenDialog *FileOpenDialog::create(Gtk::Window &parentWindow,
const char *title)
{
#ifdef WIN32
- FileOpenDialog *dialog = new FileOpenDialogImplWin32(parentWindow, path, fileTypes, title);
+ FileOpenDialog *dialog = NULL;
+ Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+ if (prefs->getBool( "/options/desktopintegration/value")) {
+ dialog = new FileOpenDialogImplWin32(parentWindow, path, fileTypes, title);
+ } else {
+ dialog = new FileOpenDialogImplGtk(parentWindow, path, fileTypes, title);
+ }
#else
FileOpenDialog *dialog = new FileOpenDialogImplGtk(parentWindow, path, fileTypes, title);
#endif
@@ -115,7 +122,13 @@ FileSaveDialog *FileSaveDialog::create(Gtk::Window& parentWindow,
const Inkscape::Extension::FileSaveMethod save_method)
{
#ifdef WIN32
- FileSaveDialog *dialog = new FileSaveDialogImplWin32(parentWindow, path, fileTypes, title, default_key, docTitle, save_method);
+ FileSaveDialog *dialog = NULL;
+ Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+ if (prefs->getBool( "/options/desktopintegration/value")) {
+ dialog = new FileSaveDialogImplWin32(parentWindow, path, fileTypes, title, default_key, docTitle, save_method);
+ } else {
+ dialog = new FileSaveDialogImplGtk(parentWindow, path, fileTypes, title, default_key, docTitle, save_method);
+ }
#else
FileSaveDialog *dialog = new FileSaveDialogImplGtk(parentWindow, path, fileTypes, title, default_key, docTitle, save_method);
#endif
diff --git a/src/ui/dialog/inkscape-preferences.cpp b/src/ui/dialog/inkscape-preferences.cpp
index 5030f17be..269266083 100644
--- a/src/ui/dialog/inkscape-preferences.cpp
+++ b/src/ui/dialog/inkscape-preferences.cpp
@@ -578,6 +578,9 @@ void InkscapePreferences::initPageUI()
_win_dockable.init ( _("Dockable"), "/options/dialogtype/value", 1, true, 0);
_win_floating.init ( _("Floating"), "/options/dialogtype/value", 0, false, &_win_dockable);
+ _win_native.init ( _("Native open/save dialogs"), "/options/desktopintegration/value", 1, true, 0);
+ _win_gtk.init ( _("GTK open/save dialogs"), "/options/desktopintegration/value", 0, false, &_win_native);
+
_win_hide_task.init ( _("Dialogs are hidden in taskbar"), "/options/dialogsskiptaskbar/value", true);
_win_zoom_resize.init ( _("Zoom when window is resized"), "/options/stickyzoom/value", false);
_win_show_close.init ( _("Show close button on dialogs"), "/dialogs/showclose", false);
@@ -604,6 +607,13 @@ void InkscapePreferences::initPageUI()
_("Dockable"));
_page_windows.add_line( true, "", _win_floating, "",
_("Floating"));
+#ifdef WIN32
+ _page_windows.add_group_header( _("Desktop integration"));
+ _page_windows.add_line( true, "", _win_native, "",
+ _("Use Windows like open and save dialogs"));
+ _page_windows.add_line( true, "", _win_gtk, "",
+ _("Use GTK open and save dialogs "));
+#endif
#ifndef WIN32 // non-Win32 special code to enable transient dialogs
_page_windows.add_group_header( _("Dialogs on top:"));
@@ -1422,19 +1432,19 @@ void InkscapePreferences::initPageSystem()
_sys_user_config.set_text((char const *)profile_path(""));
_sys_user_config.set_editable(false);
- _page_system.add_line( false, _("User config: "), _sys_user_config, "", _("Location of users configuration"), true);
+ _page_system.add_line(true, _("User config: "), _sys_user_config, "", _("Location of users configuration"), true);
_sys_user_prefs.set_text(prefs->getPrefsFilename());
_sys_user_prefs.set_editable(false);
- _page_system.add_line( false, _("User preferences: "), _sys_user_prefs, "", _("Location of the users preferences file"), true);
+ _page_system.add_line(true, _("User preferences: "), _sys_user_prefs, "", _("Location of the users preferences file"), true);
_sys_user_extension_dir.set_text((char const *)get_path(IO::Resource::USER, IO::Resource::EXTENSIONS, ""));
_sys_user_extension_dir.set_editable(false);
- _page_system.add_line( false, _("User extensions: "), _sys_user_extension_dir, "", _("Location of the users extensions"), true);
+ _page_system.add_line(true, _("User extensions: "), _sys_user_extension_dir, "", _("Location of the users extensions"), true);
_sys_user_cache.set_text(g_get_user_cache_dir());
_sys_user_cache.set_editable(false);
- _page_system.add_line( false, _("User cache: "), _sys_user_cache, "", _("Location of users cache"), true);
+ _page_system.add_line(true, _("User cache: "), _sys_user_cache, "", _("Location of users cache"), true);
Glib::ustring tmp_dir = prefs->getString("/options/autosave/path");
if (tmp_dir.empty()) {
@@ -1442,15 +1452,15 @@ void InkscapePreferences::initPageSystem()
}
_sys_tmp_files.set_text(tmp_dir);
_sys_tmp_files.set_editable(false);
- _page_system.add_line( false, _("Temporary files: "), _sys_tmp_files, "", _("Location of the temporary files used for autosave"), true);
+ _page_system.add_line(true, _("Temporary files: "), _sys_tmp_files, "", _("Location of the temporary files used for autosave"), true);
_sys_data.set_text( INKSCAPE_DATADIR );
_sys_data.set_editable(false);
- _page_system.add_line( false, _("Inkscape data: "), _sys_data, "", _("Location of Inkscape data"), true);
+ _page_system.add_line(true, _("Inkscape data: "), _sys_data, "", _("Location of Inkscape data"), true);
_sys_extension_dir.set_text(INKSCAPE_EXTENSIONDIR);
_sys_extension_dir.set_editable(false);
- _page_system.add_line( false, _("Inkscape extensions: "), _sys_extension_dir, "", _("Location of the Inkscape extensions"), true);
+ _page_system.add_line(true, _("Inkscape extensions: "), _sys_extension_dir, "", _("Location of the Inkscape extensions"), true);
Glib::ustring tmp;
appendList( tmp, g_get_system_data_dirs() );
@@ -1459,7 +1469,7 @@ void InkscapePreferences::initPageSystem()
_sys_systemdata_scroll.add(_sys_systemdata);
_sys_systemdata_scroll.set_size_request(0, 80);
_sys_systemdata_scroll.set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
- _page_system.add_line( false, _("System data: "), _sys_systemdata_scroll, "", _("Locations of system data"), true);
+ _page_system.add_line(true, _("System data: "), _sys_systemdata_scroll, "", _("Locations of system data"), true);
{
tmp = "";
@@ -1483,7 +1493,7 @@ void InkscapePreferences::initPageSystem()
_sys_icon_scroll.add(_sys_icon);
_sys_icon_scroll.set_size_request(0, 80);
_sys_icon_scroll.set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
- _page_system.add_line( false, _("Icon theme: "), _sys_icon_scroll, "", _("Location of icon themes"), true);
+ _page_system.add_line(true, _("Icon theme: "), _sys_icon_scroll, "", _("Location of icon themes"), true);
this->AddPage(_page_system, _("System"), PREFS_PAGE_SYSTEM);
}
@@ -1508,7 +1518,7 @@ bool InkscapePreferences::PresentPage(const Gtk::TreeModel::iterator& iter)
int desired_page = prefs->getInt("/dialogs/preferences/page", 0);
if (desired_page == row[_page_list_columns._col_id])
{
- if (desired_page >= PREFS_PAGE_TOOLS && desired_page <= PREFS_PAGE_TOOLS_LPETOOL)
+ if (desired_page >= PREFS_PAGE_TOOLS && desired_page <= PREFS_PAGE_TOOLS_CONNECTOR)
_page_list.expand_row(_path_tools, false);
if (desired_page >= PREFS_PAGE_TOOLS_SHAPES && desired_page <= PREFS_PAGE_TOOLS_SHAPES_SPIRAL)
_page_list.expand_row(_path_shapes, false);
diff --git a/src/ui/dialog/inkscape-preferences.h b/src/ui/dialog/inkscape-preferences.h
index f9944f8c0..1d03ab706 100644
--- a/src/ui/dialog/inkscape-preferences.h
+++ b/src/ui/dialog/inkscape-preferences.h
@@ -213,6 +213,8 @@ protected:
UI::Widget::PrefRadioButton _win_dockable;
UI::Widget::PrefRadioButton _win_floating;
+ UI::Widget::PrefRadioButton _win_native;
+ UI::Widget::PrefRadioButton _win_gtk;
UI::Widget::PrefRadioButton _win_save_dialog_pos_on;
UI::Widget::PrefRadioButton _win_save_dialog_pos_off;
UI::Widget::PrefRadioButton _win_ontop_none;
diff --git a/src/ui/dialog/xml-tree.cpp b/src/ui/dialog/xml-tree.cpp
index 810f2a5c6..cdbb2257c 100644
--- a/src/ui/dialog/xml-tree.cpp
+++ b/src/ui/dialog/xml-tree.cpp
@@ -190,6 +190,7 @@ XmlTree::XmlTree (void) :
Gtk::ScrolledWindow *attr_scroller = new Gtk::ScrolledWindow();
attr_scroller->set_policy( Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC );
+ attr_scroller->set_shadow_type(Gtk::SHADOW_IN);
attr_scroller->set_size_request(0, 60);
attr_subpaned_container.pack1( *attr_scroller );
@@ -230,9 +231,9 @@ XmlTree::XmlTree (void) :
g_signal_connect( G_OBJECT(tree), "tree_unselect_row", G_CALLBACK(on_tree_unselect_row), this);
g_signal_connect_after( G_OBJECT(tree), "tree_move", G_CALLBACK(after_tree_move), this);
- g_signal_connect( G_OBJECT(attributes), "select_row", G_CALLBACK(on_attr_select_row), this);
- g_signal_connect( G_OBJECT(attributes), "unselect_row", G_CALLBACK(on_attr_unselect_row), this);
- g_signal_connect( G_OBJECT(attributes), "row-value-changed", G_CALLBACK(on_attr_row_changed), this);
+ GtkTreeSelection *selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(attributes));
+ g_signal_connect (G_OBJECT(selection), "changed", G_CALLBACK (on_attr_select_row), this);
+
xml_element_new_button.signal_clicked().connect(sigc::mem_fun(*this, &XmlTree::cmd_new_element_node));
xml_text_new_button.signal_clicked().connect(sigc::mem_fun(*this, &XmlTree::cmd_new_text_node));
@@ -729,104 +730,39 @@ void XmlTree::on_tree_unselect_row_hide()
text_container.hide();
}
-void XmlTree::on_attr_select_row(GtkCList *list, gint row, gint column,
- GdkEventButton *event, gpointer data)
+void XmlTree::on_attr_select_row(GtkTreeSelection *selection, gpointer data)
{
XmlTree *self = (XmlTree *)data;
- self->selected_attr = sp_xmlview_attr_list_get_row_key(list, row);
- self->attr_value.grab_focus ();
-
- self->attr_reset_context(self->selected_attr);
-
- self->on_attr_select_row_enable();
- self->on_attr_select_row_set_name_content(row);
- self->on_attr_select_row_set_value_content(row);
-}
+ GtkTreeIter iter;
+ GtkTreeModel *model;
+ if (!gtk_tree_selection_get_selected (selection, &model, &iter)) {
+/* self->selected_attr = 0;
+ self->attr_reset_context(self->selected_attr);
-void XmlTree::on_attr_unselect_row(GtkCList */*list*/, gint /*row*/, gint /*column*/,
- GdkEventButton */*event*/, gpointer data)
-{
- XmlTree *self = (XmlTree *)data;
-
- self->selected_attr = 0;
- self->attr_reset_context(self->selected_attr);
-
- self->on_attr_unselect_row_disable();
- self->on_attr_unselect_row_clear_text();
-}
-
-
-void XmlTree::on_attr_row_changed(GtkCList *list, gint row, gpointer data)
-{
- gint attr = sp_xmlview_attr_list_get_row_key(list, row);
-
- XmlTree *self = (XmlTree *)data;
- if (attr == self->selected_attr) {
- /* if the attr changed, reselect the row in the list to sync
- the edit box */
-
- /*
- // get current attr values
- const gchar * name = g_quark_to_string (sp_xmlview_attr_list_get_row_key (list, row));
- const gchar * value = self->selected_repr->attribute(name);
-
- g_warning("value: '%s'",value);
-
- // get the edit box value
- GtkTextIter start, end;
- gtk_text_buffer_get_bounds ( gtk_text_view_get_buffer (self->attr_value),
- &start, &end );
- gchar * text = gtk_text_buffer_get_text ( gtk_text_view_get_buffer (self->attr_value),
- &start, &end, TRUE );
- g_warning("text: '%s'",text);
-
- // compare to edit box
- if (strcmp(text,value)) {
- // issue warning if they're different
- _message_stack->flash(Inkscape::WARNING_MESSAGE,
- _("Attribute changed in GUI while editing values!"));
- }
- g_free (text);
-
- */
- gtk_clist_unselect_row( GTK_CLIST(list), row, 0 );
- gtk_clist_select_row( GTK_CLIST(list), row, 0 );
+ self->xml_attribute_delete_button.set_sensitive(false);
+ self->on_attr_unselect_row_clear_text();*/
+ return;
}
-}
-
-
-void XmlTree::on_attr_select_row_set_name_content(gint row)
-{
- const gchar *name = g_quark_to_string(sp_xmlview_attr_list_get_row_key(GTK_CLIST(attributes), row));
- attr_name.set_text(name);
-}
+ self->attr_value.grab_focus ();
-void XmlTree::on_attr_select_row_set_value_content(gint row)
-{
- const gchar *name = g_quark_to_string(sp_xmlview_attr_list_get_row_key(GTK_CLIST(attributes), row));
- const gchar *value = selected_repr->attribute(name);
- if (!value) {
- value = "";
- }
- attr_value.get_buffer()->set_text(value);
-}
+ self->xml_attribute_delete_button.set_sensitive(true);
-void XmlTree::on_attr_select_row_enable()
-{
- xml_attribute_delete_button.set_sensitive(true);
-}
+ const gchar *name;
+ const gchar *value;
+ gint attr;
+ gtk_tree_model_get (model, &iter, 0, &name, 1, &value, 2, &attr, -1);
+ self->attr_name.set_text(name);
+ self->attr_value.get_buffer()->set_text(value);
+ self->selected_attr = attr;
+ self->attr_reset_context(self->selected_attr);
-void XmlTree::on_attr_unselect_row_disable()
-{
- xml_attribute_delete_button.set_sensitive(false);
}
-
void XmlTree::on_attr_unselect_row_clear_text()
{
attr_name.set_text("");
@@ -837,22 +773,14 @@ void XmlTree::onNameChanged()
{
Glib::ustring text = attr_name.get_text();
/* TODO: need to do checking a little more rigorous than this */
- if (!text.empty()) {
- set_attr.set_sensitive(true);
- } else {
- set_attr.set_sensitive(false);
- }
+ set_attr.set_sensitive(!text.empty());
}
void XmlTree::onCreateNameChanged()
{
Glib::ustring text = name_entry->get_text();
/* TODO: need to do checking a little more rigorous than this */
- if (!text.empty()) {
- create_button->set_sensitive(true);
- } else {
- create_button->set_sensitive(false);
- }
+ create_button->set_sensitive(!text.empty());
}
void XmlTree::on_desktop_selection_changed()
@@ -1060,11 +988,7 @@ void XmlTree::cmd_set_attr()
_("Change attribute"));
/* TODO: actually, the row won't have been created yet. why? */
- gint row = sp_xmlview_attr_list_find_row_from_key(GTK_CLIST(attributes),
- g_quark_from_string(name));
- if (row != -1) {
- gtk_clist_select_row(GTK_CLIST(attributes), row, 0);
- }
+ sp_xmlview_attr_list_select_row_by_key(attributes, name);
}
diff --git a/src/ui/dialog/xml-tree.h b/src/ui/dialog/xml-tree.h
index 82594d17e..eeb828771 100644
--- a/src/ui/dialog/xml-tree.h
+++ b/src/ui/dialog/xml-tree.h
@@ -128,9 +128,7 @@ private:
/**
* Callback functions for when attribute selection changes
*/
- static void on_attr_select_row(GtkCList *list, gint row, gint column, GdkEventButton *event, gpointer data);
- static void on_attr_unselect_row(GtkCList *list, gint row, gint column, GdkEventButton *event, gpointer data);
- static void on_attr_row_changed( GtkCList *list, gint row, gpointer data );
+ static void on_attr_select_row(GtkTreeSelection *selection, gpointer data);
/**
* Enable widgets based on current selections
@@ -138,11 +136,8 @@ private:
void on_tree_select_row_enable(GtkCTreeNode *node);
void on_tree_unselect_row_disable();
void on_tree_unselect_row_hide();
- void on_attr_select_row_enable();
void on_attr_unselect_row_disable();
void on_attr_unselect_row_clear_text();
- void on_attr_select_row_set_value_content(gint row);
- void on_attr_select_row_set_name_content(gint row);
void onNameChanged();
void onCreateNameChanged();
diff --git a/src/ui/widget/filter-effect-chooser.cpp b/src/ui/widget/filter-effect-chooser.cpp
index a2519d4bb..cb9d3e7e0 100644
--- a/src/ui/widget/filter-effect-chooser.cpp
+++ b/src/ui/widget/filter-effect-chooser.cpp
@@ -32,18 +32,11 @@ SimpleFilterModifier::SimpleFilterModifier(int flags)
if (flags & BLEND) {
add(_hb_blend);
- _hb_blend.pack_start(_lb_blend);
+ _hb_blend.pack_start(_lb_blend, false, false, 0);
_hb_blend.pack_start(_blend);
}
if (flags & BLUR) {
add(_hb_blur);
- /*
- * Hack to get a min size of label, but still be able to expand if needed
- * Should match ObjectCompositeSettings::_opacity_label
- */
- if (_lb_blur.get_text().length() < 7) {
- _lb_blur.set_width_chars(7);
- }
#if WITH_GTKMM_2_22
_lb_blur.set_alignment(Gtk::ALIGN_END, Gtk::ALIGN_CENTER);
#else
diff --git a/src/ui/widget/filter-effect-chooser.h b/src/ui/widget/filter-effect-chooser.h
index 2d41eb3bf..2d5f04007 100644
--- a/src/ui/widget/filter-effect-chooser.h
+++ b/src/ui/widget/filter-effect-chooser.h
@@ -45,12 +45,15 @@ public:
double get_blur_value() const;
void set_blur_value(const double);
void set_blur_sensitive(const bool);
+ Gtk::Label *get_blur_label() { return &_lb_blur; };
+
private:
int _flags;
Gtk::HBox _hb_blend;
Gtk::HBox _hb_blur;
Gtk::Label _lb_blend, _lb_blur;
+
ComboBoxEnum<Inkscape::Filters::FilterBlendMode> _blend;
SpinSlider _blur;
diff --git a/src/ui/widget/object-composite-settings.cpp b/src/ui/widget/object-composite-settings.cpp
index 9613f2d4f..fd9d71d6a 100644
--- a/src/ui/widget/object-composite-settings.cpp
+++ b/src/ui/widget/object-composite-settings.cpp
@@ -81,9 +81,6 @@ ObjectCompositeSettings::ObjectCompositeSettings(unsigned int verb_code, char co
// Opacity
pack_start(_opacity_vbox, false, false, 2);
- if (_opacity_label.get_text().length() < 7) {
- _opacity_label.set_width_chars(7);
- }
#if WITH_GTKMM_2_22
_opacity_label.set_alignment(Gtk::ALIGN_END, Gtk::ALIGN_CENTER);
#else
@@ -99,6 +96,11 @@ ObjectCompositeSettings::ObjectCompositeSettings(unsigned int verb_code, char co
_opacity_adjustment.signal_value_changed().connect(sigc::mem_fun(*this, &ObjectCompositeSettings::_opacityValueChanged));
_opacity_label.set_mnemonic_widget(_opacity_hscale);
+ /* SizeGroup keeps the blur and opacity labels aligned in Fill & Stroke dlg */
+ GtkSizeGroup *labels = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
+ gtk_size_group_add_widget(labels, (GtkWidget *) _opacity_label.gobj());
+ gtk_size_group_add_widget(labels, (GtkWidget *) _fe_cb.get_blur_label()->gobj());
+
show_all_children();
_desktop_activated = g_signal_connect ( G_OBJECT (INKSCAPE), "activate_desktop", G_CALLBACK (&ObjectCompositeSettings::_on_desktop_activate), this );
diff --git a/src/verbs.cpp b/src/verbs.cpp
index 6abd119c5..b00315248 100644
--- a/src/verbs.cpp
+++ b/src/verbs.cpp
@@ -2399,7 +2399,7 @@ Verb *Verb::_base_verbs[] = {
new LayerVerb(SP_VERB_LAYER_LOWER, "LayerLower", N_("_Lower Layer"),
N_("Lower the current layer"), INKSCAPE_ICON("layer-lower")),
new LayerVerb(SP_VERB_LAYER_DUPLICATE, "LayerDuplicate", N_("D_uplicate Current Layer"),
- N_("Duplicate an existing layer"), NULL),
+ N_("Duplicate an existing layer"), INKSCAPE_ICON("layer-duplicate")),
new LayerVerb(SP_VERB_LAYER_DELETE, "LayerDelete", N_("_Delete Current Layer"),
N_("Delete the current layer"), INKSCAPE_ICON("layer-delete")),
new LayerVerb(SP_VERB_LAYER_SOLO, "LayerSolo", N_("_Show/hide other layers"),
diff --git a/src/widgets/sp-xmlview-attr-list.cpp b/src/widgets/sp-xmlview-attr-list.cpp
index 9aa46a399..1dd1f79bc 100644
--- a/src/widgets/sp-xmlview-attr-list.cpp
+++ b/src/widgets/sp-xmlview-attr-list.cpp
@@ -1,5 +1,5 @@
/*
- * Specialization of GtkCList for the XML tree view
+ * Specialization of GtkTreeView for the XML tree view
*
* Authors:
* MenTaLguY <mental@rydia.net>
@@ -26,7 +26,7 @@ static void sp_xmlview_attr_list_destroy (GtkObject * object);
static void event_attr_changed (Inkscape::XML::Node * repr, const gchar * name, const gchar * old_value, const gchar * new_value, bool is_interactive, gpointer data);
-static GtkCListClass * parent_class = NULL;
+static GtkTreeViewClass * parent_class = NULL;
static Inkscape::XML::NodeEventVector repr_events = {
NULL, /* child_added */
@@ -36,35 +36,41 @@ static Inkscape::XML::NodeEventVector repr_events = {
NULL /* order_changed */
};
+enum {COL_NAME=0, COL_VALUE, COL_ATTR};
+
GtkWidget *
sp_xmlview_attr_list_new (Inkscape::XML::Node * repr)
{
- SPXMLViewAttrList * list;
+ SPXMLViewAttrList * attr_list;
- list = (SPXMLViewAttrList*)g_object_new (SP_TYPE_XMLVIEW_ATTR_LIST, "n_columns", 2, NULL);
+ attr_list = (SPXMLViewAttrList*)g_object_new (SP_TYPE_XMLVIEW_ATTR_LIST, NULL);
- gtk_clist_set_column_title (GTK_CLIST (list), 0, _("Attribute"));
- gtk_clist_set_column_title (GTK_CLIST (list), 1, _("Value"));
- gtk_clist_column_titles_show (GTK_CLIST (list));
+ attr_list->store = gtk_list_store_new (3, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_POINTER);
+ gtk_tree_view_set_model (GTK_TREE_VIEW(attr_list), GTK_TREE_MODEL(attr_list->store));
- gtk_clist_column_titles_passive (GTK_CLIST (list));
- gtk_clist_set_column_auto_resize (GTK_CLIST (list), 0, TRUE);
- gtk_clist_set_column_auto_resize (GTK_CLIST (list), 1, TRUE);
- gtk_clist_set_sort_column (GTK_CLIST (list), 0);
- gtk_clist_set_auto_sort (GTK_CLIST (list), TRUE);
+ GtkCellRenderer *cell = gtk_cell_renderer_text_new ();
+ gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(attr_list), COL_NAME, _("Attribute"), cell, "text", 0, NULL);
+ GtkTreeViewColumn *column = gtk_tree_view_get_column (GTK_TREE_VIEW(attr_list), COL_NAME);
+ gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
+ gtk_tree_view_column_set_sort_column_id (column, COL_NAME);
+ gtk_tree_sortable_set_sort_column_id ( GTK_TREE_SORTABLE(attr_list->store), COL_NAME, GTK_SORT_ASCENDING);
- sp_xmlview_attr_list_set_repr (list, repr);
+ cell = gtk_cell_renderer_text_new ();
+ gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(attr_list), COL_VALUE, _("Value"), cell, "text", COL_VALUE, NULL);
+ column = gtk_tree_view_get_column (GTK_TREE_VIEW(attr_list), COL_VALUE);
+ gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
- return (GtkWidget *) list;
+ sp_xmlview_attr_list_set_repr (attr_list, repr);
+
+ return (GtkWidget *) attr_list;
}
void
sp_xmlview_attr_list_set_repr (SPXMLViewAttrList * list, Inkscape::XML::Node * repr)
{
if ( repr == list->repr ) return;
- gtk_clist_freeze (GTK_CLIST (list));
if (list->repr) {
- gtk_clist_clear (GTK_CLIST (list));
+ gtk_list_store_clear(list->store);
sp_repr_remove_listener_by_data (list->repr, list);
Inkscape::GC::release(list->repr);
}
@@ -74,7 +80,6 @@ sp_xmlview_attr_list_set_repr (SPXMLViewAttrList * list, Inkscape::XML::Node * r
sp_repr_add_listener (repr, &repr_events, list);
sp_repr_synthesize_events (repr, &repr_events, list);
}
- gtk_clist_thaw (GTK_CLIST (list));
}
GType sp_xmlview_attr_list_get_type(void)
@@ -94,7 +99,7 @@ GType sp_xmlview_attr_list_get_type(void)
(GInstanceInitFunc)sp_xmlview_attr_list_init,
0 // value_table
};
- type = g_type_register_static(GTK_TYPE_CLIST, "SPXMLViewAttrList", &info, static_cast<GTypeFlags>(0));
+ type = g_type_register_static(GTK_TYPE_TREE_VIEW, "SPXMLViewAttrList", &info, static_cast<GTypeFlags>(0));
}
return type;
@@ -108,7 +113,7 @@ sp_xmlview_attr_list_class_init (SPXMLViewAttrListClass * klass)
object_class = (GtkObjectClass *) klass;
object_class->destroy = sp_xmlview_attr_list_destroy;
- parent_class = (GtkCListClass*)g_type_class_peek_parent (klass);
+ parent_class = (GtkTreeViewClass*)g_type_class_peek_parent (klass);
g_signal_new ( "row-value-changed",
G_TYPE_FROM_CLASS(klass),
@@ -123,6 +128,7 @@ sp_xmlview_attr_list_class_init (SPXMLViewAttrListClass * klass)
void
sp_xmlview_attr_list_init (SPXMLViewAttrList * list)
{
+ list->store = NULL;
list->repr = NULL;
}
@@ -138,6 +144,27 @@ sp_xmlview_attr_list_destroy (GtkObject * object)
GTK_OBJECT_CLASS (parent_class)->destroy (object);
}
+void sp_xmlview_attr_list_select_row_by_key(SPXMLViewAttrList * list, gchar *name)
+{
+ GtkTreeIter iter;
+ const gchar *n;
+ gboolean match = false;
+ gboolean valid = gtk_tree_model_get_iter_first( GTK_TREE_MODEL(list->store), &iter );
+ while ( valid ) {
+ gtk_tree_model_get (GTK_TREE_MODEL(list->store), &iter, COL_NAME, &n, -1);
+ if (!strcmp(n, name)) {
+ match = true;
+ break;
+ }
+ valid = gtk_tree_model_iter_next (GTK_TREE_MODEL(list->store), &iter);
+ }
+
+ if (match) {
+ GtkTreeSelection *selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(list));
+ gtk_tree_selection_select_iter(selection, &iter);
+ }
+}
+
void
event_attr_changed (Inkscape::XML::Node * /*repr*/,
const gchar * name,
@@ -146,44 +173,37 @@ event_attr_changed (Inkscape::XML::Node * /*repr*/,
bool /*is_interactive*/,
gpointer data)
{
- gint row;
+ gint row = -1;
SPXMLViewAttrList * list;
- gchar new_text[128 + 4];
- gchar *gtktext;
list = SP_XMLVIEW_ATTR_LIST (data);
- gtk_clist_freeze (GTK_CLIST (list));
-
- if (new_value) {
- strncpy (new_text, new_value, 128);
- if (strlen (new_value) >= 128) {
- strcpy (new_text + 128, "...");
- }
- gtktext = new_text;
- } else {
- gtktext = NULL;
- }
+ GtkTreeIter iter;
+ const gchar *n;
+ gboolean valid = gtk_tree_model_get_iter_first( GTK_TREE_MODEL(list->store), &iter );
+ gboolean match = false;
+ while ( valid ) {
+ gtk_tree_model_get (GTK_TREE_MODEL(list->store), &iter, COL_NAME, &n, -1);
+ if (!strcmp(n, name)) {
+ match = true;
+ break;
+ }
+ row++;
+ valid = gtk_tree_model_iter_next (GTK_TREE_MODEL(list->store), &iter);
+ }
- row = gtk_clist_find_row_from_data (GTK_CLIST (list), GINT_TO_POINTER (g_quark_from_string (name)));
- if (row != -1) {
+ if (match) {
if (new_value) {
- gtk_clist_set_text (GTK_CLIST (list), row, 1, gtktext);
+ gtk_list_store_set (list->store, &iter, COL_NAME, name, COL_VALUE, new_value, COL_ATTR, GINT_TO_POINTER (g_quark_from_string (name)), -1);
} else {
- gtk_clist_remove (GTK_CLIST (list), row);
+ gtk_list_store_remove (list->store, &iter);
}
} else if (new_value != NULL) {
- const gchar * text[2];
-
- text[0] = name;
- text[1] = gtktext;
+ gtk_list_store_append (list->store, &iter);
+ gtk_list_store_set (list->store, &iter, COL_NAME, name, COL_VALUE, new_value, COL_ATTR, GINT_TO_POINTER (g_quark_from_string (name)), -1);
- row = gtk_clist_append (GTK_CLIST (list), (gchar **)text);
- gtk_clist_set_row_data (GTK_CLIST (list), row, GINT_TO_POINTER (g_quark_from_string (name)));
}
- gtk_clist_thaw (GTK_CLIST (list));
-
// send a "changed" signal so widget owners will know I've updated
g_signal_emit_by_name(G_OBJECT (list), "row-value-changed", row );
}
diff --git a/src/widgets/sp-xmlview-attr-list.h b/src/widgets/sp-xmlview-attr-list.h
index 9479dd77a..485ea0114 100644
--- a/src/widgets/sp-xmlview-attr-list.h
+++ b/src/widgets/sp-xmlview-attr-list.h
@@ -2,7 +2,7 @@
#define __SP_XMLVIEW_ATTR_LIST_H__
/*
- * Specialization of GtkCList for editing XML node attributes
+ * Specialization of GtkTreeView for editing XML node attributes
*
* Authors:
* MenTaLguY <mental@rydia.net>
@@ -18,7 +18,6 @@
-
#define SP_TYPE_XMLVIEW_ATTR_LIST (sp_xmlview_attr_list_get_type ())
#define SP_XMLVIEW_ATTR_LIST(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), SP_TYPE_XMLVIEW_ATTR_LIST, SPXMLViewAttrList))
#define SP_IS_XMLVIEW_ATTR_LIST(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), SP_TYPE_XMLVIEW_ATTR_LIST))
@@ -26,14 +25,16 @@
struct SPXMLViewAttrList
{
- GtkCList list;
+
+ GtkTreeView list;
+ GtkListStore *store;
Inkscape::XML::Node * repr;
};
struct SPXMLViewAttrListClass
{
- GtkCListClass parent_class;
+ GtkTreeViewClass parent_class;
void (* row_changed) (SPXMLViewAttrList *list, gint row);
};
@@ -43,11 +44,8 @@ GtkWidget * sp_xmlview_attr_list_new (Inkscape::XML::Node * repr);
#define SP_XMLVIEW_ATTR_LIST_GET_REPR(list) (SP_XMLVIEW_ATTR_LIST (list)->repr)
-#define sp_xmlview_attr_list_get_row_key(list, row) (GPOINTER_TO_INT (gtk_clist_get_row_data ((list), (row))))
-#define sp_xmlview_attr_list_find_row_from_key(list, key) (gtk_clist_find_row_from_data ((list), GINT_TO_POINTER ((key))))
-
void sp_xmlview_attr_list_set_repr (SPXMLViewAttrList * list, Inkscape::XML::Node * repr);
-
+void sp_xmlview_attr_list_select_row_by_key(SPXMLViewAttrList * list, gchar *name);
#endif
diff --git a/src/widgets/stroke-style.cpp b/src/widgets/stroke-style.cpp
index f6afec18e..2e56dd696 100644
--- a/src/widgets/stroke-style.cpp
+++ b/src/widgets/stroke-style.cpp
@@ -229,6 +229,10 @@ static gboolean stroke_width_set_unit(SPUnitSelector *,
SPUnit const *new_units,
Gtk::Container *spw)
{
+ if (spw->get_data("update")) {
+ return FALSE;
+ }
+
SPDesktop *desktop = SP_ACTIVE_DESKTOP;
if (!desktop) {