diff options
| author | Denis Declara <declara91@gmail.com> | 2012-03-21 18:16:04 +0000 |
|---|---|---|
| committer | Denis Declara <declara91@gmail.com> | 2012-03-21 18:16:04 +0000 |
| commit | fbf20a8af5f761390e447ac50c52135020dabf32 (patch) | |
| tree | 895a98b0ef06eb68ace64bd1fcfb7ee5b0af48a8 /src | |
| parent | Merged with trunk (diff) | |
| parent | Preferences. New desktop integration preference for Windows users (native/gtk... (diff) | |
| download | inkscape-fbf20a8af5f761390e447ac50c52135020dabf32.tar.gz inkscape-fbf20a8af5f761390e447ac50c52135020dabf32.zip | |
trunk merge
(bzr r11073.1.2)
Diffstat (limited to 'src')
| -rw-r--r-- | src/desktop.cpp | 2 | ||||
| -rw-r--r-- | src/preferences-skeleton.h | 3 | ||||
| -rw-r--r-- | src/ui/context-menu.cpp | 32 | ||||
| -rw-r--r-- | src/ui/dialog/filedialog.cpp | 17 | ||||
| -rw-r--r-- | src/ui/dialog/inkscape-preferences.cpp | 30 | ||||
| -rw-r--r-- | src/ui/dialog/inkscape-preferences.h | 2 | ||||
| -rw-r--r-- | src/ui/dialog/xml-tree.cpp | 128 | ||||
| -rw-r--r-- | src/ui/dialog/xml-tree.h | 7 | ||||
| -rw-r--r-- | src/ui/widget/filter-effect-chooser.cpp | 9 | ||||
| -rw-r--r-- | src/ui/widget/filter-effect-chooser.h | 3 | ||||
| -rw-r--r-- | src/ui/widget/object-composite-settings.cpp | 8 | ||||
| -rw-r--r-- | src/verbs.cpp | 2 | ||||
| -rw-r--r-- | src/widgets/sp-xmlview-attr-list.cpp | 110 | ||||
| -rw-r--r-- | src/widgets/sp-xmlview-attr-list.h | 14 | ||||
| -rw-r--r-- | src/widgets/stroke-style.cpp | 4 |
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) { |
