diff options
| author | Denis Declara <declara91@gmail.com> | 2012-04-15 12:29:45 +0000 |
|---|---|---|
| committer | Denis Declara <declara91@gmail.com> | 2012-04-15 12:29:45 +0000 |
| commit | 6b5ff661a46ea1779c86f6947006c5ed32926117 (patch) | |
| tree | a5b170f0830854e99ad065055ee2a3996933e614 /src/ui | |
| parent | Improved User interface. (diff) | |
| parent | i18n. Fix for Bug #980518 (Please use c-format). (diff) | |
| download | inkscape-6b5ff661a46ea1779c86f6947006c5ed32926117.tar.gz inkscape-6b5ff661a46ea1779c86f6947006c5ed32926117.zip | |
Trunk merge
(bzr r11073.1.15)
Diffstat (limited to 'src/ui')
53 files changed, 1100 insertions, 1368 deletions
diff --git a/src/ui/CMakeLists.txt b/src/ui/CMakeLists.txt index bfd8cca95..c00590ae1 100644 --- a/src/ui/CMakeLists.txt +++ b/src/ui/CMakeLists.txt @@ -1,7 +1,6 @@ set(ui_SRC clipboard.cpp - context-menu.cpp previewholder.cpp uxmanager.cpp @@ -122,7 +121,6 @@ set(ui_SRC # ------- # Headers clipboard.h - context-menu.h icon-names.h previewable.h previewfillable.h diff --git a/src/ui/Makefile_insert b/src/ui/Makefile_insert index eb8966d11..19ecef0fc 100644 --- a/src/ui/Makefile_insert +++ b/src/ui/Makefile_insert @@ -1,8 +1,6 @@ ## Makefile.am fragment sourced by src/Makefile.am. ink_common_sources += \ - ui/context-menu.cpp \ - ui/context-menu.h \ ui/clipboard.cpp \ ui/clipboard.h \ ui/icon-names.h \ diff --git a/src/ui/clipboard.cpp b/src/ui/clipboard.cpp index b9d6e0c6b..b972997e2 100644 --- a/src/ui/clipboard.cpp +++ b/src/ui/clipboard.cpp @@ -70,12 +70,11 @@ #include "live_effects/lpeobject-reference.h" #include "live_effects/parameter/path.h" #include "svg/svg.h" // for sp_svg_transform_write, used in _copySelection -#include "svg/css-ostringstream.h" // used in _parseColor +#include "svg/css-ostringstream.h" // used in copy #include "text-context.h" #include "text-editing.h" #include "tools-switch.h" #include "path-chemistry.h" -#include "id-clash.h" #include "unit-constants.h" #include "helper/png-write.h" #include "svg/svg-color.h" @@ -129,11 +128,8 @@ private: void _copyTextPath(SPTextPath *); Inkscape::XML::Node *_copyNode(Inkscape::XML::Node *, Inkscape::XML::Document *, Inkscape::XML::Node *); - void _pasteDocument(SPDesktop *desktop, SPDocument *clipdoc, bool in_place); - void _pasteDefs(SPDesktop *desktop, SPDocument *clipdoc); bool _pasteImage(SPDocument *doc); bool _pasteText(SPDesktop *desktop); - SPCSSAttr *_parseColor(const Glib::ustring &); void _applyPathEffect(SPItem *, gchar const *); SPDocument *_retrieveClipboard(Glib::ustring = ""); @@ -334,7 +330,7 @@ bool ClipboardManagerImpl::paste(SPDesktop *desktop, bool in_place) return false; } - _pasteDocument(desktop, tempdoc, in_place); + sp_import_document(desktop, tempdoc, in_place); tempdoc->doUnref(); return true; @@ -410,7 +406,7 @@ bool ClipboardManagerImpl::pasteStyle(SPDesktop *desktop) bool pasted = false; if (clipnode) { - _pasteDefs(desktop, tempdoc); + desktop->doc()->importDefs(tempdoc); SPCSSAttr *style = sp_repr_css_attr(clipnode, "style"); sp_desktop_set_style(desktop, style); pasted = true; @@ -512,7 +508,7 @@ bool ClipboardManagerImpl::pastePathEffect(SPDesktop *desktop) if ( clipnode ) { gchar const *effectstack = clipnode->attribute("inkscape:path-effect"); if ( effectstack ) { - _pasteDefs(desktop, tempdoc); + desktop->doc()->importDefs(tempdoc); // make sure all selected items are converted to paths first (i.e. rectangles) sp_selected_to_lpeitems(desktop); for (GSList *itemptr = const_cast<GSList *>(selection->itemList()) ; itemptr ; itemptr = itemptr->next) { @@ -803,107 +799,6 @@ Inkscape::XML::Node *ClipboardManagerImpl::_copyNode(Inkscape::XML::Node *node, /** - * Paste the contents of a document into the active desktop. - * @param clipdoc The document to paste - * @param in_place Whether to paste the selection where it was when copied - * @pre @c clipdoc is not empty and items can be added to the current layer - */ -void ClipboardManagerImpl::_pasteDocument(SPDesktop *desktop, SPDocument *clipdoc, bool in_place) -{ - SPDocument *target_document = sp_desktop_document(desktop); - Inkscape::XML::Node *root = clipdoc->getReprRoot(); - Inkscape::XML::Node *target_parent = desktop->currentLayer()->getRepr(); - Inkscape::XML::Document *target_xmldoc = target_document->getReprDoc(); - - // copy definitions - _pasteDefs(desktop, clipdoc); - - // copy objects - GSList *pasted_objects = NULL; - for (Inkscape::XML::Node *obj = root->firstChild() ; obj ; obj = obj->next()) { - // Don't copy metadata, defs, named views and internal clipboard contents to the document - if (!strcmp(obj->name(), "svg:defs")) { - continue; - } - if (!strcmp(obj->name(), "svg:metadata")) { - continue; - } - if (!strcmp(obj->name(), "sodipodi:namedview")) { - continue; - } - if (!strcmp(obj->name(), "inkscape:clipboard")) { - continue; - } - Inkscape::XML::Node *obj_copy = _copyNode(obj, target_xmldoc, target_parent); - pasted_objects = g_slist_prepend(pasted_objects, (gpointer) obj_copy); - } - - // Change the selection to the freshly pasted objects - Inkscape::Selection *selection = sp_desktop_selection(desktop); - selection->setReprList(pasted_objects); - - // invers apply parent transform - Geom::Affine doc2parent = SP_ITEM(desktop->currentLayer())->i2doc_affine().inverse(); - sp_selection_apply_affine(selection, desktop->dt2doc() * doc2parent * desktop->doc2dt(), true, false); - - // Update (among other things) all curves in paths, for bounds() to work - target_document->ensureUpToDate(); - - // move selection either to original position (in_place) or to mouse pointer - Geom::OptRect sel_bbox = selection->visualBounds(); - if (sel_bbox) { - // get offset of selection to original position of copied elements - Geom::Point pos_original; - Inkscape::XML::Node *clipnode = sp_repr_lookup_name(root, "inkscape:clipboard", 1); - if (clipnode) { - Geom::Point min, max; - sp_repr_get_point(clipnode, "min", &min); - sp_repr_get_point(clipnode, "max", &max); - pos_original = Geom::Point(min[Geom::X], max[Geom::Y]); - } - Geom::Point offset = pos_original - sel_bbox->corner(3); - - if (!in_place) { - SnapManager &m = desktop->namedview->snap_manager; - m.setup(desktop); - sp_event_context_discard_delayed_snap_event(desktop->event_context); - - // get offset from mouse pointer to bbox center, snap to grid if enabled - Geom::Point mouse_offset = desktop->point() - sel_bbox->midpoint(); - offset = m.multipleOfGridPitch(mouse_offset - offset, sel_bbox->midpoint() + offset) + offset; - m.unSetup(); - } - - sp_selection_move_relative(selection, offset); - } - - g_slist_free(pasted_objects); -} - - -/** - * Paste SVG defs from the document retrieved from the clipboard into the active document. - * @param clipdoc The document to paste. - * @pre @c clipdoc != NULL and pasting into the active document is possible. - */ -void ClipboardManagerImpl::_pasteDefs(SPDesktop *desktop, SPDocument *clipdoc) -{ - // boilerplate vars copied from _pasteDocument - SPDocument *target_document = sp_desktop_document(desktop); - Inkscape::XML::Node *root = clipdoc->getReprRoot(); - Inkscape::XML::Node *defs = sp_repr_lookup_name(root, "svg:defs", 1); - Inkscape::XML::Node *target_defs = target_document->getDefs()->getRepr(); - Inkscape::XML::Document *target_xmldoc = target_document->getReprDoc(); - - prevent_id_clashes(clipdoc, target_document); - - for (Inkscape::XML::Node *def = defs->firstChild() ; def ; def = def->next()) { - _copyNode(def, target_xmldoc, target_defs); - } -} - - -/** * Retrieve a bitmap image from the clipboard and paste it into the active document. */ bool ClipboardManagerImpl::_pasteImage(SPDocument *doc) @@ -957,7 +852,7 @@ bool ClipboardManagerImpl::_pasteText(SPDesktop *desktop) } // try to parse the text as a color and, if successful, apply it as the current style - SPCSSAttr *css = _parseColor(_clipboard->wait_for_text()); + SPCSSAttr *css = sp_repr_css_attr_parse_color_to_fill(_clipboard->wait_for_text()); if (css) { sp_desktop_set_style(desktop, css); return true; @@ -968,76 +863,6 @@ bool ClipboardManagerImpl::_pasteText(SPDesktop *desktop) /** - * Attempt to parse the passed string as a hexadecimal RGB or RGBA color. - * @param text The Glib::ustring to parse - * @return New CSS style representation if the parsing was successful, NULL otherwise - */ -SPCSSAttr *ClipboardManagerImpl::_parseColor(const Glib::ustring &text) -{ -// TODO reuse existing code instead of replicating here. - Glib::ustring::size_type len = text.bytes(); - char *str = const_cast<char *>(text.data()); - bool attempt_alpha = false; - if ( !str || ( *str == '\0' ) ) { - return NULL; // this is OK due to boolean short-circuit - } - - // those conditionals guard against parsing e.g. the string "fab" as "fab000" - // (incomplete color) and "45fab71" as "45fab710" (incomplete alpha) - if ( *str == '#' ) { - if ( len < 7 ) { - return NULL; - } - if ( len >= 9 ) { - attempt_alpha = true; - } - } else { - if ( len < 6 ) { - return NULL; - } - if ( len >= 8 ) { - attempt_alpha = true; - } - } - - unsigned int color = 0, alpha = 0xff; - - // skip a leading #, if present - if ( *str == '#' ) { - ++str; - } - - // try to parse first 6 digits - int res = sscanf(str, "%6x", &color); - if ( res && ( res != EOF ) ) { - if (attempt_alpha) {// try to parse alpha if there's enough characters - sscanf(str + 6, "%2x", &alpha); - if ( !res || res == EOF ) { - alpha = 0xff; - } - } - - SPCSSAttr *color_css = sp_repr_css_attr_new(); - - // print and set properties - gchar color_str[16]; - g_snprintf(color_str, 16, "#%06x", color); - sp_repr_css_set_property(color_css, "fill", color_str); - - float opacity = static_cast<float>(alpha)/static_cast<float>(0xff); - if (opacity > 1.0) { - opacity = 1.0; // safeguard - } - Inkscape::CSSOStringStream opcss; - opcss << opacity; - sp_repr_css_set_property(color_css, "fill-opacity", opcss.str().data()); - return color_css; - } - return NULL; -} - - -/** * Applies a pasted path effect to a given item. */ void ClipboardManagerImpl::_applyPathEffect(SPItem *item, gchar const *effectstack) diff --git a/src/ui/context-menu.cpp b/src/ui/context-menu.cpp deleted file mode 100644 index 9e5c65af9..000000000 --- a/src/ui/context-menu.cpp +++ /dev/null @@ -1,693 +0,0 @@ -/* - * Unser-interface related object extension - * - * Authors: - * Lauris Kaplinski <lauris@kaplinski.com> - * Jon A. Cruz <jon@joncruz.org> - * Abhishek Sharma - * - * This code is in public domain - */ - -#ifdef HAVE_CONFIG_H -# include "config.h" -#endif - -#include "ui/dialog/dialog-manager.h" -#include "context-menu.h" -#include "../xml/repr.h" -#include "desktop.h" -#include "document.h" -#include "document-undo.h" -#include "helper/action.h" //sp_action_perform -#include "inkscape.h" -#include "message-stack.h" -#include "preferences.h" -#include "verbs.h" - -using Inkscape::DocumentUndo; - -static void sp_object_type_menu(GType type, SPObject *object, SPDesktop *desktop, GtkMenu *menu); - -/* Append object-specific part to context menu */ - -void sp_object_menu(SPObject *object, SPDesktop *desktop, GtkMenu *menu) -{ - GObjectClass *klass; - klass = G_OBJECT_GET_CLASS(object); - while (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_OBJECT)) { - GType type; - type = G_TYPE_FROM_CLASS(klass); - sp_object_type_menu(type, object, desktop, menu); - klass = (GObjectClass*)g_type_class_peek_parent(klass); - } -} - -/* Implementation */ - -#include <gtk/gtk.h> -#include <glibmm/i18n.h> - -#include "selection.h" -#include "selection-chemistry.h" -#include "sp-anchor.h" -#include "sp-clippath.h" -#include "sp-image.h" -#include "sp-mask.h" -#include "sp-path.h" -#include "sp-text.h" -#include "desktop-handles.h" -#include "ui/dialog/object-attributes.h" -#include "ui/dialog/object-properties.h" -#include "ui/dialog/spellcheck.h" - - -static void sp_item_menu(SPObject *object, SPDesktop *desktop, GtkMenu *menu); -static void sp_group_menu(SPObject *object, SPDesktop *desktop, GtkMenu *menu); -static void sp_anchor_menu(SPObject *object, SPDesktop *desktop, GtkMenu *menu); -static void sp_image_menu(SPObject *object, SPDesktop *desktop, GtkMenu *menu); -static void sp_shape_menu(SPObject *object, SPDesktop *desktop, GtkMenu *menu); -static void sp_text_menu(SPObject *object, SPDesktop *desktop, GtkMenu *menu); - -static void sp_object_type_menu(GType type, SPObject *object, SPDesktop *desktop, GtkMenu *menu) -{ - static GHashTable *t2m = NULL; - void (* handler)(SPObject *object, SPDesktop *desktop, GtkMenu *menu); - if (!t2m) { - t2m = g_hash_table_new(NULL, NULL); - g_hash_table_insert(t2m, GUINT_TO_POINTER(SP_TYPE_ITEM), (void*)sp_item_menu); - g_hash_table_insert(t2m, GUINT_TO_POINTER(SP_TYPE_GROUP), (void*)sp_group_menu); - g_hash_table_insert(t2m, GUINT_TO_POINTER(SP_TYPE_ANCHOR), (void*)sp_anchor_menu); - g_hash_table_insert(t2m, GUINT_TO_POINTER(SP_TYPE_IMAGE), (void*)sp_image_menu); - g_hash_table_insert(t2m, GUINT_TO_POINTER(SP_TYPE_SHAPE), (void*)sp_shape_menu); - g_hash_table_insert(t2m, GUINT_TO_POINTER(SP_TYPE_TEXT), (void*)sp_text_menu); - } - handler = (void (*)(SPObject*, SPDesktop*, GtkMenu*))g_hash_table_lookup(t2m, GUINT_TO_POINTER(type)); - if (handler) handler(object, desktop, menu); -} - -/* SPItem */ - -static void sp_item_properties(GtkMenuItem *menuitem, SPItem *item); -static void sp_item_select_this(GtkMenuItem *menuitem, SPItem *item); -static void sp_item_create_link(GtkMenuItem *menuitem, SPItem *item); -static void sp_set_mask(GtkMenuItem *menuitem, SPItem *item); -static void sp_release_mask(GtkMenuItem *menuitem, SPItem *item); -static void sp_set_clip(GtkMenuItem *menuitem, SPItem *item); -static void sp_release_clip(GtkMenuItem *menuitem, SPItem *item); - -/* Generate context menu item section */ -static void sp_item_menu(SPObject *object, SPDesktop *desktop, GtkMenu *m) -{ - SPItem *item; - GtkWidget *w; - - item = (SPItem *) object; - - /* Item dialog */ - w = gtk_menu_item_new_with_mnemonic(_("_Object Properties...")); - g_object_set_data(G_OBJECT(w), "desktop", desktop); - g_signal_connect(G_OBJECT(w), "activate", G_CALLBACK(sp_item_properties), item); - gtk_widget_show(w); - gtk_menu_shell_append(GTK_MENU_SHELL(m), w); - /* Separator */ - w = gtk_menu_item_new(); - gtk_widget_show(w); - gtk_menu_shell_append(GTK_MENU_SHELL(m), w); - /* Select item */ - w = gtk_menu_item_new_with_mnemonic(_("_Select This")); - if (sp_desktop_selection(desktop)->includes(item)) { - gtk_widget_set_sensitive(w, FALSE); - } else { - g_object_set_data(G_OBJECT(w), "desktop", desktop); - g_signal_connect(G_OBJECT(w), "activate", G_CALLBACK(sp_item_select_this), item); - } - gtk_widget_show(w); - gtk_menu_shell_append(GTK_MENU_SHELL(m), w); - /* Create link */ - w = gtk_menu_item_new_with_mnemonic(_("_Create Link")); - g_object_set_data(G_OBJECT(w), "desktop", desktop); - g_signal_connect(G_OBJECT(w), "activate", G_CALLBACK(sp_item_create_link), item); - gtk_widget_set_sensitive(w, !SP_IS_ANCHOR(item)); - gtk_widget_show(w); - gtk_menu_shell_append(GTK_MENU_SHELL(m), w); - /* Set mask */ - w = gtk_menu_item_new_with_mnemonic(_("Set Mask")); - g_object_set_data(G_OBJECT(w), "desktop", desktop); - g_signal_connect(G_OBJECT(w), "activate", G_CALLBACK(sp_set_mask), item); - if ((item && item->mask_ref && item->mask_ref->getObject()) || (item->clip_ref && item->clip_ref->getObject())) { - gtk_widget_set_sensitive(w, FALSE); - } else { - gtk_widget_set_sensitive(w, TRUE); - } - gtk_widget_show(w); - gtk_menu_shell_append(GTK_MENU_SHELL(m), w); - /* Release mask */ - w = gtk_menu_item_new_with_mnemonic(_("Release Mask")); - g_object_set_data(G_OBJECT(w), "desktop", desktop); - g_signal_connect(G_OBJECT(w), "activate", G_CALLBACK(sp_release_mask), item); - if (item && item->mask_ref && item->mask_ref->getObject()) { - gtk_widget_set_sensitive(w, TRUE); - } else { - gtk_widget_set_sensitive(w, FALSE); - } - gtk_widget_show(w); - gtk_menu_shell_append(GTK_MENU_SHELL(m), w); - /* Set Clip */ - w = gtk_menu_item_new_with_mnemonic(_("Set _Clip")); - g_object_set_data(G_OBJECT(w), "desktop", desktop); - g_signal_connect(G_OBJECT(w), "activate", G_CALLBACK(sp_set_clip), item); - if ((item && item->mask_ref && item->mask_ref->getObject()) || (item->clip_ref && item->clip_ref->getObject())) { - gtk_widget_set_sensitive(w, FALSE); - } else { - gtk_widget_set_sensitive(w, TRUE); - } - gtk_widget_show(w); - gtk_menu_shell_append(GTK_MENU_SHELL(m), w); - /* Release Clip */ - w = gtk_menu_item_new_with_mnemonic(_("Release C_lip")); - g_object_set_data(G_OBJECT(w), "desktop", desktop); - g_signal_connect(G_OBJECT(w), "activate", G_CALLBACK(sp_release_clip), item); - if (item && item->clip_ref && item->clip_ref->getObject()) { - gtk_widget_set_sensitive(w, TRUE); - } else { - gtk_widget_set_sensitive(w, FALSE); - } - gtk_widget_show(w); - gtk_menu_shell_append(GTK_MENU_SHELL(m), w); - -} - -static void sp_item_properties(GtkMenuItem *menuitem, SPItem *item) -{ - SPDesktop *desktop; - - g_assert(SP_IS_ITEM(item)); - - desktop = (SPDesktop*)g_object_get_data(G_OBJECT(menuitem), "desktop"); - g_return_if_fail(desktop != NULL); - - sp_desktop_selection(desktop)->set(item); - - // sp_item_dialog(); - desktop->_dlg_mgr->showDialog("ObjectProperties"); -} - - -static void sp_set_mask(GtkMenuItem *menuitem, SPItem *item) -{ - SPDesktop *desktop; - - g_assert(SP_IS_ITEM(item)); - - desktop = (SPDesktop*)g_object_get_data(G_OBJECT(menuitem), "desktop"); - g_return_if_fail(desktop != NULL); - - sp_selection_set_mask(desktop, false, false); -} - - -static void sp_release_mask(GtkMenuItem *menuitem, SPItem *item) -{ - SPDesktop *desktop; - - g_assert(SP_IS_ITEM(item)); - - desktop = (SPDesktop*)g_object_get_data(G_OBJECT(menuitem), "desktop"); - g_return_if_fail(desktop != NULL); - - sp_selection_unset_mask(desktop, false); -} - - -static void sp_set_clip(GtkMenuItem *menuitem, SPItem *item) -{ - SPDesktop *desktop; - - g_assert(SP_IS_ITEM(item)); - - desktop = (SPDesktop*)g_object_get_data(G_OBJECT(menuitem), "desktop"); - g_return_if_fail(desktop != NULL); - - sp_selection_set_mask(desktop, true, false); -} - - -static void sp_release_clip(GtkMenuItem *menuitem, SPItem *item) -{ - SPDesktop *desktop; - - g_assert(SP_IS_ITEM(item)); - - desktop = (SPDesktop*)g_object_get_data(G_OBJECT(menuitem), "desktop"); - g_return_if_fail(desktop != NULL); - - sp_selection_unset_mask(desktop, true); -} - - -static void sp_item_select_this(GtkMenuItem *menuitem, SPItem *item) -{ - SPDesktop *desktop; - - g_assert(SP_IS_ITEM(item)); - - desktop = (SPDesktop*)g_object_get_data(G_OBJECT(menuitem), "desktop"); - g_return_if_fail(desktop != NULL); - - sp_desktop_selection(desktop)->set(item); -} - -static void sp_item_create_link(GtkMenuItem *menuitem, SPItem *item) -{ - g_assert(SP_IS_ITEM(item)); - g_assert(!SP_IS_ANCHOR(item)); - - SPDesktop *desktop = (SPDesktop*)g_object_get_data(G_OBJECT(menuitem), "desktop"); - g_return_if_fail(desktop != NULL); - - Inkscape::XML::Document *xml_doc = desktop->doc()->getReprDoc(); - Inkscape::XML::Node *repr = xml_doc->createElement("svg:a"); - item->parent->getRepr()->addChild(repr, item->getRepr()); - SPObject *object = item->document->getObjectByRepr(repr); - g_return_if_fail(SP_IS_ANCHOR(object)); - - const char *id = item->getRepr()->attribute("id"); - Inkscape::XML::Node *child = item->getRepr()->duplicate(xml_doc); - item->deleteObject(false); - repr->addChild(child, NULL); - child->setAttribute("id", id); - - Inkscape::GC::release(repr); - Inkscape::GC::release(child); - - DocumentUndo::done(object->document, SP_VERB_NONE, - _("Create link")); - - sp_desktop_selection(desktop)->set(SP_ITEM(object)); - desktop->_dlg_mgr->showDialog("ObjectAttributes"); -} - -/* SPGroup */ - -static void sp_item_group_ungroup_activate(GtkMenuItem *menuitem, SPGroup *group); - -static void sp_group_menu(SPObject *object, SPDesktop *desktop, GtkMenu *menu) -{ - SPItem *item=SP_ITEM(object); - GtkWidget *w; - - /* "Ungroup" */ - w = gtk_menu_item_new_with_mnemonic(_("_Ungroup")); - g_object_set_data(G_OBJECT(w), "desktop", desktop); - g_signal_connect(G_OBJECT(w), "activate", G_CALLBACK(sp_item_group_ungroup_activate), item); - gtk_widget_show(w); - gtk_menu_shell_append(GTK_MENU_SHELL(menu), w); -} - -static void sp_item_group_ungroup_activate(GtkMenuItem *menuitem, SPGroup *group) -{ - SPDesktop *desktop; - GSList *children; - - g_assert(SP_IS_GROUP(group)); - - desktop = (SPDesktop*)g_object_get_data(G_OBJECT(menuitem), "desktop"); - g_return_if_fail(desktop != NULL); - - children = NULL; - sp_item_group_ungroup(group, &children); - - sp_desktop_selection(desktop)->setList(children); - g_slist_free(children); -} - -/* SPAnchor */ - -static void sp_anchor_link_properties(GtkMenuItem *menuitem, SPAnchor *anchor); -static void sp_anchor_link_follow(GtkMenuItem *menuitem, SPAnchor *anchor); -static void sp_anchor_link_remove(GtkMenuItem *menuitem, SPAnchor *anchor); - -static void sp_anchor_menu(SPObject *object, SPDesktop *desktop, GtkMenu *m) -{ - SPItem *item; - GtkWidget *w; - - item = (SPItem *) object; - - /* Link dialog */ - w = gtk_menu_item_new_with_mnemonic(_("Link _Properties...")); - g_object_set_data(G_OBJECT(w), "desktop", desktop); - g_signal_connect(G_OBJECT(w), "activate", G_CALLBACK(sp_anchor_link_properties), item); - gtk_widget_show(w); - gtk_menu_shell_append(GTK_MENU_SHELL(m), w); - /* Select item */ - w = gtk_menu_item_new_with_mnemonic(_("_Follow Link")); - g_signal_connect(G_OBJECT(w), "activate", G_CALLBACK(sp_anchor_link_follow), item); - gtk_widget_show(w); - gtk_menu_shell_append(GTK_MENU_SHELL(m), w); - /* Reset transformations */ - w = gtk_menu_item_new_with_mnemonic(_("_Remove Link")); - g_object_set_data(G_OBJECT(w), "desktop", desktop); - g_signal_connect(G_OBJECT(w), "activate", G_CALLBACK(sp_anchor_link_remove), item); - gtk_widget_show(w); - gtk_menu_shell_append(GTK_MENU_SHELL(m), w); -} - -static void sp_anchor_link_properties(GtkMenuItem *menuitem, SPAnchor */*anchor*/) -{ - SPDesktop *desktop = (SPDesktop*)g_object_get_data(G_OBJECT(menuitem), "desktop"); - g_return_if_fail(desktop != NULL); - desktop->_dlg_mgr->showDialog("ObjectAttributes"); -} - -static void sp_anchor_link_follow(GtkMenuItem */*menuitem*/, SPAnchor *anchor) -{ - g_return_if_fail(anchor != NULL); - g_return_if_fail(SP_IS_ANCHOR(anchor)); - - /* shell out to an external browser here */ -} - -static void sp_anchor_link_remove(GtkMenuItem */*menuitem*/, SPAnchor *anchor) -{ - GSList *children; - - g_return_if_fail(anchor != NULL); - g_return_if_fail(SP_IS_ANCHOR(anchor)); - - children = NULL; - sp_item_group_ungroup(SP_GROUP(anchor), &children); - - g_slist_free(children); -} - -/* Image */ - -static void sp_image_image_properties(GtkMenuItem *menuitem, SPAnchor *anchor); -static void sp_image_image_edit(GtkMenuItem *menuitem, SPItem *item); -static void sp_image_image_embed(GtkMenuItem *menuitem, SPItem *item); -static void sp_image_image_extract(GtkMenuItem *menuitem, SPItem *item); - -static void sp_image_menu(SPObject *object, SPDesktop *desktop, GtkMenu *m) -{ - SPItem *item = SP_ITEM(object); - GtkWidget *w; - Inkscape::XML::Node *ir = object->getRepr(); - const gchar *href = ir->attribute("xlink:href"); - - /* Image properties */ - w = gtk_menu_item_new_with_mnemonic(_("Image _Properties...")); - g_object_set_data(G_OBJECT(w), "desktop", desktop); - g_signal_connect(G_OBJECT(w), "activate", G_CALLBACK(sp_image_image_properties), item); - gtk_widget_show(w); - gtk_menu_shell_append(GTK_MENU_SHELL(m), w); - - /* Edit externally */ - w = gtk_menu_item_new_with_mnemonic(_("Edit Externally...")); - g_object_set_data(G_OBJECT(w), "desktop", desktop); - g_signal_connect(G_OBJECT(w), "activate", G_CALLBACK(sp_image_image_edit), 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 ); - } - - /* Embed image */ - 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 */ - 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 ); - } - } -} - -/* Image Properties entry */ -static void sp_image_image_properties(GtkMenuItem *menuitem, SPAnchor */*anchor*/) -{ - SPDesktop *desktop = (SPDesktop*)g_object_get_data(G_OBJECT(menuitem), "desktop"); - g_return_if_fail(desktop != NULL); - desktop->_dlg_mgr->showDialog("ObjectAttributes"); -} - -static gchar* getImageEditorName() { - Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - gchar* value = 0; - Glib::ustring choices = prefs->getString("/options/bitmapeditor/value"); - if (!choices.empty()) { - value = g_strdup(choices.c_str()); - } - if (!value) { - value = g_strdup("gimp"); - } - return value; -} - -/* Edit Externally entry */ -static void sp_image_image_edit(GtkMenuItem *menuitem, SPItem *item) -{ - SPDesktop *desktop = NULL; - - g_assert(SP_IS_ITEM(item)); - - desktop = (SPDesktop*)g_object_get_data(G_OBJECT(menuitem), "desktop"); - g_return_if_fail(desktop != NULL); - - if (sp_desktop_selection(desktop)->isEmpty()) { - sp_desktop_selection(desktop)->set(item); - } - - GSList const *selected = sp_desktop_selection(desktop)->itemList(); - - GError* errThing = 0; - Glib::ustring cmdline = getImageEditorName(); - Glib::ustring name; - Glib::ustring fullname; - -#ifdef WIN32 - // g_spawn_command_line_sync parsing is done according to Unix shell rules, - // not Windows command interpreter rules. Thus we need to enclose the - // executable path with sigle quotes. - int index = cmdline.find(".exe"); - if ( index < 0 ) index = cmdline.find(".bat"); - if ( index < 0 ) index = cmdline.find(".com"); - if ( index >= 0 ) { - Glib::ustring editorBin = cmdline.substr(0, index + 4).c_str(); - Glib::ustring args = cmdline.substr(index + 4, cmdline.length()).c_str(); - editorBin.insert(0, "'"); - editorBin.append("'"); - cmdline = editorBin; - cmdline.append(args); - } else { - // Enclose the whole command line if no executable path can be extracted. - cmdline.insert(0, "'"); - cmdline.append("'"); - } -#endif - - for (GSList const *iter = selected; iter != NULL; iter = iter->next) { - Inkscape::XML::Node *ir = SP_ITEM(iter->data)->getRepr(); - const gchar *href = ir->attribute("xlink:href"); - - if (strncmp (href,"file:",5) == 0) { - // URI to filename conversion - name = g_filename_from_uri(href, NULL, NULL); - } else { - name.append(href); - } - - if (Glib::path_is_absolute(name)) { - fullname = name; - } else if (SP_ACTIVE_DOCUMENT->getBase()) { - fullname = Glib::build_filename(SP_ACTIVE_DOCUMENT->getBase(), name); - } else { - fullname = Glib::build_filename(Glib::get_current_dir(), name); - } - - cmdline.append(" '"); - cmdline.append(fullname.c_str()); - cmdline.append("'"); - } - - //g_warning("##Command line: %s\n", cmdline.c_str()); - - g_spawn_command_line_async(cmdline.c_str(), - &errThing); - - if ( errThing ) { - g_warning("Problem launching editor (%d). %s", errThing->code, errThing->message); - SPDesktop *desktop = (SPDesktop*)g_object_get_data(G_OBJECT(menuitem), "desktop"); - desktop->messageStack()->flash(Inkscape::ERROR_MESSAGE, errThing->message); - g_error_free(errThing); - errThing = 0; - } -} - -/* Embed Image entry */ -static void sp_image_image_embed(GtkMenuItem *menuitem, SPItem *item) -{ - SPDesktop *desktop; - - g_assert(SP_IS_ITEM(item)); - - desktop = (SPDesktop*)g_object_get_data(G_OBJECT(menuitem), "desktop"); - g_return_if_fail(desktop != NULL); - - if (sp_desktop_selection(desktop)->isEmpty()) { - sp_desktop_selection(desktop)->set(item); - } - - Inkscape::Verb *verb = Inkscape::Verb::getbyid( "org.ekips.filter.embedselectedimages" ); - if (verb) { - SPAction *action = verb->get_action(desktop); - if (action) { - sp_action_perform(action, NULL); - } - } -} - -/* Extract Image entry */ -static void sp_image_image_extract(GtkMenuItem *menuitem, SPItem *item) -{ - SPDesktop *desktop; - - g_assert(SP_IS_ITEM(item)); - - desktop = (SPDesktop*)g_object_get_data(G_OBJECT(menuitem), "desktop"); - g_return_if_fail(desktop != NULL); - - if (sp_desktop_selection(desktop)->isEmpty()) { - sp_desktop_selection(desktop)->set(item); - } - - Inkscape::Verb *verb = Inkscape::Verb::getbyid( "org.ekips.filter.extractimage" ); - if (verb) { - SPAction *action = verb->get_action(desktop); - if (action) { - sp_action_perform(action, NULL); - } - } -} - -/* Fill and Stroke entry */ -static void sp_fill_settings(GtkMenuItem *menuitem, SPItem *item) -{ - SPDesktop *desktop; - - g_assert(SP_IS_ITEM(item)); - - desktop = (SPDesktop*)g_object_get_data(G_OBJECT(menuitem), "desktop"); - g_return_if_fail(desktop != NULL); - - if (sp_desktop_selection(desktop)->isEmpty()) { - sp_desktop_selection(desktop)->set(item); - } - - desktop->_dlg_mgr->showDialog("FillAndStroke"); -} - -/* SPShape */ -static void sp_shape_menu(SPObject *object, SPDesktop *desktop, GtkMenu *m) -{ - SPItem *item; - GtkWidget *w; - - item = (SPItem *) object; - - /* Item dialog */ - w = gtk_menu_item_new_with_mnemonic(_("_Fill and Stroke...")); - g_object_set_data(G_OBJECT(w), "desktop", desktop); - g_signal_connect(G_OBJECT(w), "activate", G_CALLBACK(sp_fill_settings), item); - gtk_widget_show(w); - gtk_menu_shell_append(GTK_MENU_SHELL(m), w); -} - -/* Edit Text entry */ -static void sp_text_settings(GtkMenuItem *menuitem, SPItem *item) -{ - SPDesktop *desktop; - - g_assert(SP_IS_ITEM(item)); - - desktop = (SPDesktop*)g_object_get_data(G_OBJECT(menuitem), "desktop"); - g_return_if_fail(desktop != NULL); - - if (sp_desktop_selection(desktop)->isEmpty()) { - sp_desktop_selection(desktop)->set(item); - } - - desktop->_dlg_mgr->showDialog("TextFont"); -} - -/* Spellcheck entry */ -static void sp_spellcheck_settings(GtkMenuItem *menuitem, SPItem *item) -{ - SPDesktop *desktop; - - g_assert(SP_IS_ITEM(item)); - - desktop = (SPDesktop*)g_object_get_data(G_OBJECT(menuitem), "desktop"); - g_return_if_fail(desktop != NULL); - - if (sp_desktop_selection(desktop)->isEmpty()) { - sp_desktop_selection(desktop)->set(item); - } - - desktop->_dlg_mgr->showDialog("SpellCheck"); -} - -/* SPText */ -static void sp_text_menu(SPObject *object, SPDesktop *desktop, GtkMenu *m) -{ - SPItem *item; - GtkWidget *w; - - item = (SPItem *) object; - - /* Fill and Stroke dialog */ - w = gtk_menu_item_new_with_mnemonic(_("_Fill and Stroke...")); - g_object_set_data(G_OBJECT(w), "desktop", desktop); - g_signal_connect(G_OBJECT(w), "activate", G_CALLBACK(sp_fill_settings), item); - gtk_widget_show(w); - gtk_menu_shell_append(GTK_MENU_SHELL(m), w); - - /* Edit Text dialog */ - w = gtk_menu_item_new_with_mnemonic(_("_Text and Font...")); - g_object_set_data(G_OBJECT(w), "desktop", desktop); - g_signal_connect(G_OBJECT(w), "activate", G_CALLBACK(sp_text_settings), item); - gtk_widget_show(w); - gtk_menu_shell_append(GTK_MENU_SHELL(m), w); - - /* Spellcheck dialog */ - w = gtk_menu_item_new_with_mnemonic(_("Check Spellin_g...")); - g_object_set_data(G_OBJECT(w), "desktop", desktop); - g_signal_connect(G_OBJECT(w), "activate", G_CALLBACK(sp_spellcheck_settings), item); - gtk_widget_show(w); - gtk_menu_shell_append(GTK_MENU_SHELL(m), w); -} -/* - Local Variables: - mode:c++ - c-file-style:"stroustrup" - c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +)) - indent-tabs-mode:nil - fill-column:99 - End: -*/ -// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 : diff --git a/src/ui/context-menu.h b/src/ui/context-menu.h deleted file mode 100644 index 39753f93f..000000000 --- a/src/ui/context-menu.h +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef SEEN_CONTEXT_MENU_H -#define SEEN_CONTEXT_MENU_H - -/* - * Unser-interface related object extension - * - * Authors: - * Lauris Kaplinski <lauris@kaplinski.com> - * Abhishek Sharma - * - * This code is in public domain - */ - -#include <gtk/gtk.h> - -#include "sp-object.h" - -class SPDesktop; - -/** - * Append object-specific part to context menu. - */ -void sp_object_menu (SPObject *object, SPDesktop *desktop, GtkMenu *menu); - -#endif - -/* - Local Variables: - mode:c++ - c-file-style:"stroustrup" - c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +)) - indent-tabs-mode:nil - fill-column:99 - End: -*/ -// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 : diff --git a/src/ui/dialog/aboutbox.cpp b/src/ui/dialog/aboutbox.cpp index f6adc71c0..885846685 100644 --- a/src/ui/dialog/aboutbox.cpp +++ b/src/ui/dialog/aboutbox.cpp @@ -121,7 +121,11 @@ AboutBox::AboutBox() : Gtk::Dialog(_("About Inkscape")) { get_vbox()->pack_start(*manage(label), false, false); Gtk::Requisition requisition; +#if GTK_CHECK_VERSION(3,0,0) + gtk_widget_get_preferred_size(reinterpret_cast<GtkWidget*>(gobj()), &requisition, NULL); +#else gtk_widget_size_request (reinterpret_cast<GtkWidget*>(gobj()), &requisition); +#endif // allow window to shrink set_size_request(0, 0); set_default_size(requisition.width, requisition.height); diff --git a/src/ui/dialog/align-and-distribute.cpp b/src/ui/dialog/align-and-distribute.cpp index 062384b52..f8d63aade 100644 --- a/src/ui/dialog/align-and-distribute.cpp +++ b/src/ui/dialog/align-and-distribute.cpp @@ -50,6 +50,7 @@ #include <glibmm/i18n.h> + namespace Inkscape { namespace UI { namespace Dialog { @@ -61,7 +62,11 @@ public : Action(const Glib::ustring &id, const Glib::ustring &tiptext, guint row, guint column, - Gtk::Table &parent, +#if WITH_GTKMM_3_0 + Gtk::Grid &parent, +#else + Gtk::Table &parent, +#endif AlignAndDistribute &dialog): _dialog(dialog), _id(id), @@ -77,7 +82,11 @@ public : pButton->signal_clicked() .connect(sigc::mem_fun(*this, &Action::on_button_click)); pButton->set_tooltip_text(tiptext); +#if WITH_GTKMM_3_0 + parent.attach(*pButton, column, row, 1, 1); +#else parent.attach(*pButton, column, column+1, row, row+1, Gtk::FILL, Gtk::FILL); +#endif } virtual ~Action(){} @@ -87,7 +96,12 @@ private : virtual void on_button_click(){} Glib::ustring _id; + +#if WITH_GTKMM_3_0 + Gtk::Grid &_parent; +#else Gtk::Table &_parent; +#endif }; @@ -462,7 +476,11 @@ public: Action(id, tiptext, row, column + 4, dialog.removeOverlap_table(), dialog) { +#if WITH_GTKMM_3_0 + dialog.removeOverlap_table().set_column_spacing(3); +#else dialog.removeOverlap_table().set_col_spacings(3); +#endif removeOverlapXGap.set_digits(1); removeOverlapXGap.set_size_request(60, -1); @@ -484,11 +502,17 @@ public: removeOverlapYGapLabel.set_text_with_mnemonic(C_("Gap", "_V:")); removeOverlapYGapLabel.set_mnemonic_widget(removeOverlapYGap); +#if WITH_GTKMM_3_0 + dialog.removeOverlap_table().attach(removeOverlapXGapLabel, column, row, 1, 1); + dialog.removeOverlap_table().attach(removeOverlapXGap, column+1, row, 1, 1); + dialog.removeOverlap_table().attach(removeOverlapYGapLabel, column+2, row, 1, 1); + dialog.removeOverlap_table().attach(removeOverlapYGap, column+3, row, 1, 1); +#else dialog.removeOverlap_table().attach(removeOverlapXGapLabel, column, column+1, row, row+1, Gtk::FILL, Gtk::FILL); dialog.removeOverlap_table().attach(removeOverlapXGap, column+1, column+2, row, row+1, Gtk::FILL, Gtk::FILL); dialog.removeOverlap_table().attach(removeOverlapYGapLabel, column+2, column+3, row, row+1, Gtk::FILL, Gtk::FILL); dialog.removeOverlap_table().attach(removeOverlapYGap, column+3, column+4, row, row+1, Gtk::FILL, Gtk::FILL); - +#endif } private : @@ -769,7 +793,11 @@ public : guint row, guint column, AlignAndDistribute &dialog, +#if WITH_GTKMM_3_0 + Gtk::Grid &table, +#else Gtk::Table &table, +#endif Geom::Dim2 orientation, bool distribute): Action(id, tiptext, row, column, table, dialog), @@ -896,11 +924,19 @@ AlignAndDistribute::AlignAndDistribute() _rearrangeFrame(_("Rearrange")), _removeOverlapFrame(_("Remove overlaps")), _nodesFrame(_("Nodes")), +#if WITH_GTKMM_3_0 + _alignTable(), + _distributeTable(), + _rearrangeTable(), + _removeOverlapTable(), + _nodesTable(), +#else _alignTable(2, 6, true), _distributeTable(2, 6, true), _rearrangeTable(1, 5, false), _removeOverlapTable(1, 5, false), _nodesTable(1, 4, true), +#endif _anchorLabel(_("Relative to: ")), _selgrpLabel(_("_Treat selection as group: "), 1) { @@ -1238,8 +1274,13 @@ void AlignAndDistribute::addRandomizeButton(const Glib::ustring &id, const Glib: ); } +#if WITH_GTKMM_3_0 +void AlignAndDistribute::addBaselineButton(const Glib::ustring &id, const Glib::ustring tiptext, + guint row, guint col, Gtk::Grid &table, Geom::Dim2 orientation, bool distribute) +#else void AlignAndDistribute::addBaselineButton(const Glib::ustring &id, const Glib::ustring tiptext, guint row, guint col, Gtk::Table &table, Geom::Dim2 orientation, bool distribute) +#endif { _actionList.push_back( new ActionBaseline( diff --git a/src/ui/dialog/align-and-distribute.h b/src/ui/dialog/align-and-distribute.h index 8cbd48f28..7edf9c30c 100644 --- a/src/ui/dialog/align-and-distribute.h +++ b/src/ui/dialog/align-and-distribute.h @@ -19,11 +19,15 @@ #include "ui/widget/panel.h" #include <gtkmm/frame.h> #include <gtkmm/comboboxtext.h> -#include <gtkmm/table.h> #include <gtkmm/label.h> - #include "2geom/rect.h" +#if WITH_GTKMM_3_0 +#include <gtkmm/checkbutton.h> +#include <gtkmm/grid.h> +#else +#include <gtkmm/table.h> +#endif class SPItem; @@ -45,11 +49,19 @@ public: AlignTarget getAlignTarget() const; +#if WITH_GTKMM_3_0 + Gtk::Grid &align_table(){return _alignTable;} + Gtk::Grid &distribute_table(){return _distributeTable;} + Gtk::Grid &rearrange_table(){return _rearrangeTable;} + Gtk::Grid &removeOverlap_table(){return _removeOverlapTable;} + Gtk::Grid &nodes_table(){return _nodesTable;} +#else Gtk::Table &align_table(){return _alignTable;} Gtk::Table &distribute_table(){return _distributeTable;} Gtk::Table &rearrange_table(){return _rearrangeTable;} Gtk::Table &removeOverlap_table(){return _removeOverlapTable;} Gtk::Table &nodes_table(){return _nodesTable;} +#endif std::list<SPItem *>::iterator find_master(std::list <SPItem *> &list, bool horizontal); void setMode(bool nodeEdit); @@ -86,12 +98,21 @@ protected: guint row, guint col); void addRandomizeButton(const Glib::ustring &id, const Glib::ustring tiptext, guint row, guint col); +#if WITH_GTKMM_3_0 + void addBaselineButton(const Glib::ustring &id, const Glib::ustring tiptext, + guint row, guint col, Gtk::Grid &table, Geom::Dim2 orientation, bool distribute); +#else void addBaselineButton(const Glib::ustring &id, const Glib::ustring tiptext, guint row, guint col, Gtk::Table &table, Geom::Dim2 orientation, bool distribute); +#endif std::list<Action *> _actionList; Gtk::Frame _alignFrame, _distributeFrame, _rearrangeFrame, _removeOverlapFrame, _nodesFrame; +#if WITH_GTKMM_3_0 + Gtk::Grid _alignTable, _distributeTable, _rearrangeTable, _removeOverlapTable, _nodesTable; +#else Gtk::Table _alignTable, _distributeTable, _rearrangeTable, _removeOverlapTable, _nodesTable; +#endif Gtk::HBox _anchorBox; Gtk::HBox _selgrpBox; Gtk::VBox _alignBox; diff --git a/src/ui/dialog/clonetiler.cpp b/src/ui/dialog/clonetiler.cpp index 36e79a682..7b7c66553 100644 --- a/src/ui/dialog/clonetiler.cpp +++ b/src/ui/dialog/clonetiler.cpp @@ -93,7 +93,12 @@ CloneTiler::CloneTiler (void) : dlg = GTK_WIDGET(gobj()); +#if GTK_CHECK_VERSION(3,0,0) + GtkWidget *mainbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 4); + gtk_box_new(GTK_BOX(mainbox), FALSE); +#else GtkWidget *mainbox = gtk_vbox_new(FALSE, 4); +#endif gtk_container_set_border_width (GTK_CONTAINER (mainbox), 6); contents->pack_start (*Gtk::manage(Glib::wrap(mainbox)), true, true, 0); @@ -648,7 +653,12 @@ CloneTiler::CloneTiler (void) : GtkWidget *vb = clonetiler_new_tab (nb, _("Co_lor")); { +#if GTK_CHECK_VERSION(3,0,0) + GtkWidget *hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); + gtk_box_set_homogeneous(GTK_BOX(hb), FALSE); +#else GtkWidget *hb = gtk_hbox_new (FALSE, 0); +#endif GtkWidget *l = gtk_label_new (_("Initial color: ")); gtk_box_pack_start (GTK_BOX (hb), l, FALSE, FALSE, 0); @@ -771,7 +781,12 @@ CloneTiler::CloneTiler (void) : { +#if GTK_CHECK_VERSION(3,0,0) + GtkWidget *hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, VB_MARGIN); + gtk_box_set_homogeneous(GTK_BOX(hb), FALSE); +#else GtkWidget *hb = gtk_hbox_new(FALSE, VB_MARGIN); +#endif gtk_box_pack_start (GTK_BOX (vb), hb, FALSE, FALSE, 0); GtkWidget *b = gtk_check_button_new_with_label (_("Trace the drawing under the tiles")); @@ -786,7 +801,12 @@ CloneTiler::CloneTiler (void) : } { +#if GTK_CHECK_VERSION(3,0,0) + GtkWidget *vvb = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); + gtk_box_new(GTK_BOX(vvb), FALSE); +#else GtkWidget *vvb = gtk_vbox_new (FALSE, 0); +#endif gtk_box_pack_start (GTK_BOX (vb), vvb, FALSE, FALSE, 0); g_object_set_data (G_OBJECT(dlg), "dotrace", (gpointer) vvb); @@ -974,7 +994,12 @@ CloneTiler::CloneTiler (void) : gtk_box_pack_start (GTK_BOX (mainbox), table, FALSE, FALSE, 0); { +#if GTK_CHECK_VERSION(3,0,0) + GtkWidget *hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, VB_MARGIN); + gtk_box_set_homogeneous(GTK_BOX(hb), FALSE); +#else GtkWidget *hb = gtk_hbox_new(FALSE, VB_MARGIN); +#endif g_object_set_data (G_OBJECT(dlg), "rowscols", (gpointer) hb); { @@ -1018,7 +1043,12 @@ CloneTiler::CloneTiler (void) : } { +#if GTK_CHECK_VERSION(3,0,0) + GtkWidget *hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, VB_MARGIN); + gtk_box_set_homogeneous(GTK_BOX(hb), FALSE); +#else GtkWidget *hb = gtk_hbox_new(FALSE, VB_MARGIN); +#endif g_object_set_data (G_OBJECT(dlg), "widthheight", (gpointer) hb); // unitmenu @@ -1103,7 +1133,12 @@ CloneTiler::CloneTiler (void) : // Use saved pos { +#if GTK_CHECK_VERSION(3,0,0) + GtkWidget *hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, VB_MARGIN); + gtk_box_set_homogeneous(GTK_BOX(hb), FALSE); +#else GtkWidget *hb = gtk_hbox_new(FALSE, VB_MARGIN); +#endif gtk_box_pack_start (GTK_BOX (mainbox), hb, FALSE, FALSE, 0); GtkWidget *b = gtk_check_button_new_with_label (_("Use saved size and position of the tile")); @@ -1118,7 +1153,12 @@ CloneTiler::CloneTiler (void) : // Statusbar { +#if GTK_CHECK_VERSION(3,0,0) + GtkWidget *hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, VB_MARGIN); + gtk_box_set_homogeneous(GTK_BOX(hb), FALSE); +#else GtkWidget *hb = gtk_hbox_new(FALSE, VB_MARGIN); +#endif gtk_box_pack_end (GTK_BOX (mainbox), hb, FALSE, FALSE, 0); GtkWidget *l = gtk_label_new(""); g_object_set_data (G_OBJECT(dlg), "status", (gpointer) l); @@ -1127,7 +1167,12 @@ CloneTiler::CloneTiler (void) : // Buttons { +#if GTK_CHECK_VERSION(3,0,0) + GtkWidget *hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, VB_MARGIN); + gtk_box_set_homogeneous(GTK_BOX(hb), FALSE); +#else GtkWidget *hb = gtk_hbox_new(FALSE, VB_MARGIN); +#endif gtk_box_pack_start (GTK_BOX (mainbox), hb, FALSE, FALSE, 0); { @@ -1141,7 +1186,12 @@ CloneTiler::CloneTiler (void) : } { // buttons which are enabled only when there are tiled clones +#if GTK_CHECK_VERSION(3,0,0) + GtkWidget *sb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); + gtk_box_set_homogeneous(GTK_BOX(sb), FALSE); +#else GtkWidget *sb = gtk_hbox_new(FALSE, 0); +#endif gtk_box_pack_end (GTK_BOX (hb), sb, FALSE, FALSE, 0); g_object_set_data (G_OBJECT(dlg), "buttons_on_tiles", (gpointer) sb); { @@ -2534,7 +2584,12 @@ void CloneTiler::clonetiler_apply(GtkWidget */*widget*/, GtkWidget *dlg) GtkWidget * CloneTiler::clonetiler_new_tab(GtkWidget *nb, const gchar *label) { GtkWidget *l = gtk_label_new_with_mnemonic (label); +#if GTK_CHECK_VERSION(3,0,0) + GtkWidget *vb = gtk_box_new(GTK_ORIENTATION_VERTICAL, VB_MARGIN); + gtk_box_new(GTK_BOX(vb), FALSE); +#else GtkWidget *vb = gtk_vbox_new (FALSE, VB_MARGIN); +#endif gtk_container_set_border_width (GTK_CONTAINER (vb), VB_MARGIN); gtk_notebook_append_page (GTK_NOTEBOOK (nb), vb, l); return vb; @@ -2549,7 +2604,12 @@ void CloneTiler::clonetiler_checkbox_toggled(GtkToggleButton *tb, gpointer *data GtkWidget * CloneTiler::clonetiler_checkbox(const char *tip, const char *attr) { +#if GTK_CHECK_VERSION(3,0,0) + GtkWidget *hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, VB_MARGIN); + gtk_box_set_homogeneous(GTK_BOX(hb), FALSE); +#else GtkWidget *hb = gtk_hbox_new(FALSE, VB_MARGIN); +#endif GtkWidget *b = gtk_check_button_new (); gtk_widget_set_tooltip_text (b, tip); @@ -2576,7 +2636,12 @@ void CloneTiler::clonetiler_value_changed(GtkAdjustment *adj, gpointer data) GtkWidget * CloneTiler::clonetiler_spinbox(const char *tip, const char *attr, double lower, double upper, const gchar *suffix, bool exponent/* = false*/) { +#if GTK_CHECK_VERSION(3,0,0) + GtkWidget *hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); + gtk_box_set_homogeneous(GTK_BOX(hb), FALSE); +#else GtkWidget *hb = gtk_hbox_new(FALSE, 0); +#endif { Gtk::Adjustment *a; @@ -2704,7 +2769,12 @@ GtkWidget * CloneTiler::clonetiler_table_x_y_rand(int values) gtk_table_set_col_spacings (GTK_TABLE (table), 8); { +#if GTK_CHECK_VERSION(3,0,0) + GtkWidget *hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); + gtk_box_set_homogeneous(GTK_BOX(hb), FALSE); +#else GtkWidget *hb = gtk_hbox_new (FALSE, 0); +#endif GtkWidget *i = sp_icon_new (Inkscape::ICON_SIZE_DECORATION, INKSCAPE_ICON("object-rows")); gtk_box_pack_start (GTK_BOX (hb), i, FALSE, FALSE, 2); @@ -2717,7 +2787,12 @@ GtkWidget * CloneTiler::clonetiler_table_x_y_rand(int values) } { +#if GTK_CHECK_VERSION(3,0,0) + GtkWidget *hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); + gtk_box_set_homogeneous(GTK_BOX(hb), FALSE); +#else GtkWidget *hb = gtk_hbox_new (FALSE, 0); +#endif GtkWidget *i = sp_icon_new (Inkscape::ICON_SIZE_DECORATION, INKSCAPE_ICON("object-columns")); gtk_box_pack_start (GTK_BOX (hb), i, FALSE, FALSE, 2); diff --git a/src/ui/dialog/export.cpp b/src/ui/dialog/export.cpp index 150abd66b..060a10f63 100644 --- a/src/ui/dialog/export.cpp +++ b/src/ui/dialog/export.cpp @@ -8,8 +8,9 @@ * Johan Engelen <j.b.c.engelen@ewi.utwente.nl> * Jon A. Cruz <jon@joncruz.org> * Abhishek Sharma + * Kris De Gussem <Kris.DeGussem@gmail.com> * - * Copyright (C) 1999-2007 Authors + * Copyright (C) 1999-2007, 2012 Authors * Copyright (C) 2001-2002 Ximian, Inc. * * Released under GNU GPL, read the file 'COPYING' for more information @@ -350,7 +351,7 @@ void Export::setTargetDesktop(SPDesktop *desktop) subselChangedConn = desktop->connectToolSubselectionChanged(sigc::hide(sigc::mem_fun(*this, &Export::onSelectionChanged))); //// Must check flags, so can't call widget_setup() directly. - selectModifiedConn = desktop->selection->connectModified(sigc::hide<0>(sigc::mem_fun(*this, &Export::onSelectioModified))); + selectModifiedConn = desktop->selection->connectModified(sigc::hide<0>(sigc::mem_fun(*this, &Export::onSelectionModified))); } //widget_setup(); } @@ -428,7 +429,7 @@ void Export::set_default_filename () { * @param sensitive Whether the spin button is sensitive or not * @param cb Callback for when this spin button is changed (optional) */ -Gtk::Adjustment * Export::createSpinbutton( gchar const *key, float val, float min, float max, +Gtk::Adjustment * Export::createSpinbutton( gchar const * /*key*/, float val, float min, float max, float step, float page, GtkWidget *us, GtkWidget *t, int x, int y, const gchar *ll, const gchar *lr, @@ -606,7 +607,7 @@ void Export::onSelectionChanged() updateCheckbuttons (); } -void Export::onSelectioModified ( guint flags ) +void Export::onSelectionModified ( guint /*flags*/ ) { switch (current_key) { case SELECTION_DRAWING: @@ -784,7 +785,7 @@ void Export::onAreaToggled () /// Called when dialog is deleted -gint Export::onProgressDelete ( GtkWidget *widget, GdkEvent *event, GObject *base ) +gint Export::onProgressDelete ( GtkWidget * /*widget*/, GdkEvent * /*event*/, GObject *base ) { g_object_set_data (base, "cancel", (gpointer) 1); return TRUE; @@ -792,7 +793,7 @@ gint Export::onProgressDelete ( GtkWidget *widget, GdkEvent *event, GObject *bas /// Called when progress is cancelled -void Export::onProgressCancel ( GtkWidget *widget, GObject *base ) +void Export::onProgressCancel ( GtkWidget * /*widget*/, GObject *base ) { g_object_set_data (base, "cancel", (gpointer) 1); } // end of sp_export_progress_cancel() @@ -822,8 +823,7 @@ unsigned int Export::onProgressCallback (float value, void *data) } // end of sp_export_progress_callback() -GtkWidget * Export::create_progress_dialog (gchar *progress_text) { - +GtkWidget * Export::create_progress_dialog (Glib::ustring progress_text) { GtkWidget *dlg, *prg, *btn; /* progressbar dlg widgets */ dlg = gtk_dialog_new (); @@ -836,7 +836,7 @@ GtkWidget * Export::create_progress_dialog (gchar *progress_text) { gtk_window_set_resizable (GTK_WINDOW (dlg), FALSE); g_object_set_data ((GObject *) base, "progress", prg); - gtk_progress_bar_set_text ((GtkProgressBar *) prg, progress_text); + gtk_progress_bar_set_text ((GtkProgressBar *) prg, progress_text.c_str()); gtk_progress_bar_set_orientation ( (GtkProgressBar *) prg, GTK_PROGRESS_LEFT_TO_RIGHT); @@ -857,26 +857,26 @@ GtkWidget * Export::create_progress_dialog (gchar *progress_text) { } // FIXME: Some lib function should be available to do this ... -gchar * Export::filename_add_extension (const gchar *filename, const gchar *extension) +Glib::ustring Export::filename_add_extension (Glib::ustring filename, Glib::ustring extension) { - const gchar *dot; - - dot = strrchr (filename, '.'); - if ( !dot ) - return g_strconcat (filename, ".", extension, NULL); - { - if (dot[1] == '\0') - return g_strconcat (filename, extension, NULL); + Glib::ustring::size_type dot; + + dot = filename.find_last_of("."); + if ( !dot ) + { + return filename = filename + "." + extension; + } else { - if (g_ascii_strcasecmp (dot + 1, extension) == 0) - return g_strdup (filename); - else - { - return g_strconcat (filename, ".", extension, NULL); - } - } - } + if (dot==filename.find_last_of(Glib::ustring::compose(".", extension))) + { + return filename; + } + else + { + return filename = filename + "." + extension; + } + } } gchar *Export::absolutize_path_from_document_location (SPDocument *doc, const gchar *filename) @@ -908,24 +908,22 @@ void Export::onExport () if (batch_export.get_active ()) { // Batch export of selected objects - gint num = g_slist_length((GSList *) sp_desktop_selection(SP_ACTIVE_DESKTOP)->itemList()); + gint num = g_slist_length(const_cast<GSList *>(sp_desktop_selection(SP_ACTIVE_DESKTOP)->itemList())); gint n = 0; if (num < 1) return; - gchar *progress_text = g_strdup_printf (_("Exporting %d files"), num); - GtkWidget *prog_dlg = create_progress_dialog (progress_text); - g_free (progress_text); + GtkWidget *prog_dlg = create_progress_dialog (Glib::ustring::compose(_("Exporting %1 files"),num)); - for (GSList *i = (GSList *) sp_desktop_selection(SP_ACTIVE_DESKTOP)->itemList(); + for (GSList *i = const_cast<GSList *>(sp_desktop_selection(SP_ACTIVE_DESKTOP)->itemList()); i != NULL; i = i->next) { SPItem *item = reinterpret_cast<SPItem *>(i->data); // retrieve export filename hint const gchar *filename = item->getRepr()->attribute("inkscape:export-filename"); - gchar *path = 0; + gchar *path = NULL; if (!filename) { path = create_filepath_from_id(item->getId(), NULL); } else { @@ -953,7 +951,7 @@ void Export::onExport () *area, width, height, dpi, dpi, nv->pagecolor, NULL, NULL, TRUE, // overwrite without asking - hide ? (GSList *) sp_desktop_selection(SP_ACTIVE_DESKTOP)->itemList() : NULL + hide ? const_cast<GSList *>(sp_desktop_selection(SP_ACTIVE_DESKTOP)->itemList()) : NULL )) { gchar * error; gchar * safeFile = Inkscape::IO::sanitizeString(path); @@ -974,8 +972,13 @@ void Export::onExport () } else { - gchar const *filename = g_strdup(filename_entry.get_text().c_str()); + Glib::ustring filename = filename_entry.get_text(); + if (filename.empty()){ + sp_ui_error_dialog(_("You have to enter a filename")); + return; + } + float const x0 = getValuePx(x0_adj); float const y0 = getValuePx(y0_adj); float const x1 = getValuePx(x1_adj); @@ -985,22 +988,15 @@ void Export::onExport () unsigned long int const width = int(getValue(bmwidth_adj) + 0.5); unsigned long int const height = int(getValue(bmheight_adj) + 0.5); - if (filename == NULL || *filename == '\0') { - sp_ui_error_dialog(_("You have to enter a filename")); - return; - } - if (!((x1 > x0) && (y1 > y0) && (width > 0) && (height > 0))) { sp_ui_error_dialog (_("The chosen area to be exported is invalid")); return; } // make sure that .png is the extension of the file: - gchar * filename_ext = filename_add_extension(filename, "png"); - //gtk_entry_set_text(GTK_ENTRY(filename_entry), filename_ext); + Glib::ustring const filename_ext = filename_add_extension(filename, "png"); filename_entry.set_text(filename_ext); - - gchar *path = absolutize_path_from_document_location(doc, filename_ext); + gchar *path = absolutize_path_from_document_location(doc, filename_ext.c_str()); gchar *dirname = g_path_get_dirname(path); if ( dirname == NULL @@ -1019,18 +1015,16 @@ void Export::onExport () g_free(dirname); gchar *fn = g_path_get_basename (path); - gchar *progress_text = g_strdup_printf (_("Exporting %s (%lu x %lu)"), fn, width, height); + GtkWidget *prog_dlg = create_progress_dialog (Glib::ustring::compose(_("Exporting %1 (%2 x %3)"), fn, width, height)); g_free (fn); - GtkWidget *prog_dlg = create_progress_dialog (progress_text); - g_free (progress_text); /* Do export */ if (!sp_export_png_file (sp_desktop_document (SP_ACTIVE_DESKTOP), path, Geom::Rect(Geom::Point(x0, y0), Geom::Point(x1, y1)), width, height, xdpi, ydpi, nv->pagecolor, onProgressCallback, prog_dlg, FALSE, - hide ? (GSList *) sp_desktop_selection(SP_ACTIVE_DESKTOP)->itemList() : NULL + hide ? const_cast<GSList *>(sp_desktop_selection(SP_ACTIVE_DESKTOP)->itemList()) : NULL )) { gchar * error; gchar * safeFile = Inkscape::IO::sanitizeString(path); @@ -1043,12 +1037,13 @@ void Export::onExport () /* Reset the filename so that it can be changed again by changing selections and all that */ g_free(original_name); - original_name = g_strdup(filename_ext); + original_name = const_cast<gchar*>(filename_ext.c_str()); filename_modified = false; gtk_widget_destroy (prog_dlg); //g_object_set_data (G_OBJECT (base), "cancel", (gpointer) 0); + /* Setup the values in the document */ switch (current_key) { case SELECTION_PAGE: @@ -1061,8 +1056,8 @@ void Export::onExport () DocumentUndo::setUndoSensitive(doc, false); gchar const *temp_string = repr->attribute("inkscape:export-filename"); - if (temp_string == NULL || strcmp(temp_string, filename_ext)) { - repr->setAttribute("inkscape:export-filename", filename_ext); + if (temp_string == NULL || (filename_ext != temp_string)) { + repr->setAttribute("inkscape:export-filename", filename_ext.c_str()); modified = true; } temp_string = repr->attribute("inkscape:export-xdpi"); @@ -1071,7 +1066,7 @@ void Export::onExport () modified = true; } temp_string = repr->attribute("inkscape:export-ydpi"); - if (temp_string == NULL || xdpi != atof(temp_string)) { + if (temp_string == NULL || ydpi != atof(temp_string)) { sp_repr_set_svg_double(repr, "inkscape:export-ydpi", ydpi); modified = true; } @@ -1092,18 +1087,22 @@ void Export::onExport () reprlst = sp_desktop_selection(SP_ACTIVE_DESKTOP)->reprList(); for(; reprlst != NULL; reprlst = reprlst->next) { - Inkscape::XML::Node * repr = (Inkscape::XML::Node *)reprlst->data; + Inkscape::XML::Node * repr = static_cast<Inkscape::XML::Node *>(reprlst->data); const gchar * temp_string; - gchar *dir = g_path_get_dirname(filename); - gchar *docdir = g_path_get_dirname(SP_ACTIVE_DOCUMENT->getURI()); - + Glib::ustring dir = Glib::path_get_dirname(filename.c_str()); + const gchar* docURI=SP_ACTIVE_DOCUMENT->getURI(); + Glib::ustring docdir; + if (docURI) + { + docdir = Glib::path_get_dirname(docURI); + } if (repr->attribute("id") == NULL || - !(g_strrstr(filename_ext, repr->attribute("id")) != NULL && - ( !SP_ACTIVE_DOCUMENT->getURI() || - strcmp(dir, docdir) == 0))) { + !(filename_ext.find_last_of(repr->attribute("id")) && + ( !docURI || + (dir == docdir)))) { temp_string = repr->attribute("inkscape:export-filename"); - if (temp_string == NULL || strcmp(temp_string, filename_ext)) { - repr->setAttribute("inkscape:export-filename", filename_ext); + if (temp_string == NULL || (filename_ext != temp_string)) { + repr->setAttribute("inkscape:export-filename", filename_ext.c_str()); modified = true; } } @@ -1113,12 +1112,10 @@ void Export::onExport () modified = true; } temp_string = repr->attribute("inkscape:export-ydpi"); - if (temp_string == NULL || xdpi != atof(temp_string)) { + if (temp_string == NULL || ydpi != atof(temp_string)) { sp_repr_set_svg_double(repr, "inkscape:export-ydpi", ydpi); modified = true; } - g_free(dir); - g_free(docdir); } DocumentUndo::setUndoSensitive(doc, saved); @@ -1130,10 +1127,7 @@ void Export::onExport () default: break; } - - g_free (filename_ext); g_free (path); - } } // end of sp_export_export_clicked() @@ -1800,10 +1794,8 @@ void Export::onFilenameModified() { if (strcmp(original_name, filename_entry.get_text().c_str())==0) { filename_modified = false; -// g_message("Modified: FALSE\n"); } else { filename_modified = true; -// g_message("Modified: TRUE\n"); } return; diff --git a/src/ui/dialog/export.h b/src/ui/dialog/export.h index 1277f06f5..51b969b5e 100644 --- a/src/ui/dialog/export.h +++ b/src/ui/dialog/export.h @@ -170,7 +170,7 @@ private: * Inkscape selection change callback */ void onSelectionChanged (); - void onSelectioModified (guint flags); + void onSelectionModified (guint flags); /** * Filename modified callback @@ -190,7 +190,7 @@ private: /** * Progress dialog callbacks */ - GtkWidget * create_progress_dialog (gchar *progress_text); + GtkWidget * create_progress_dialog (Glib::ustring progress_text); static unsigned int onProgressCallback (float value, void *data); static void onProgressCancel ( GtkWidget *widget, GObject *base ); static gint onProgressDelete ( GtkWidget *widget, GdkEvent *event, GObject *base ); @@ -200,7 +200,7 @@ private: */ void set_default_filename (); gchar* create_filepath_from_id (const gchar *id, const gchar *file_entry_text); - gchar *filename_add_extension (const gchar *filename, const gchar *extension); + Glib::ustring filename_add_extension (Glib::ustring filename, Glib::ustring extension); gchar *absolutize_path_from_document_location (SPDocument *doc, const gchar *filename); /* diff --git a/src/ui/dialog/filedialogimpl-gtkmm.cpp b/src/ui/dialog/filedialogimpl-gtkmm.cpp index ab936c941..6cdd202bb 100644 --- a/src/ui/dialog/filedialogimpl-gtkmm.cpp +++ b/src/ui/dialog/filedialogimpl-gtkmm.cpp @@ -1457,7 +1457,7 @@ FileExportDialogImpl::FileExportDialogImpl( Gtk::Window& parentWindow, selectionButton.set_group(scopeGroup); scopeBox.pack_start(selectionButton); - customButton.set_label(_("Custom")); + customButton.set_label(C_("Export dialog", "Custom")); customButton.set_group(scopeGroup); scopeBox.pack_start(customButton); diff --git a/src/ui/dialog/filedialogimpl-win32.cpp b/src/ui/dialog/filedialogimpl-win32.cpp index 7dd619fa6..089ec1737 100644 --- a/src/ui/dialog/filedialogimpl-win32.cpp +++ b/src/ui/dialog/filedialogimpl-win32.cpp @@ -948,7 +948,7 @@ void FileOpenDialogImplWin32::free_preview() DestroyIcon(_preview_file_icon); _preview_file_icon = NULL; - _preview_bitmap_image.clear(); + _preview_bitmap_image.reset(); _preview_emf_image = false; _mutex->unlock(); } @@ -1714,7 +1714,7 @@ void FileSaveDialogImplWin32::GetSaveFileName_thread() ofn.nMaxFileTitle = 0; ofn.lpstrInitialDir = current_directory_string; ofn.lpstrTitle = _title; - ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_EXPLORER | OFN_ENABLEHOOK; + ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_EXPLORER | OFN_ENABLEHOOK | OFN_ENABLESIZING; ofn.lpstrFilter = _filter; ofn.nFilterIndex = _filter_index; ofn.lpfnHook = GetSaveFileName_hookproc; diff --git a/src/ui/dialog/filter-effects-dialog.cpp b/src/ui/dialog/filter-effects-dialog.cpp index da99594bb..dd3e90b2c 100644 --- a/src/ui/dialog/filter-effects-dialog.cpp +++ b/src/ui/dialog/filter-effects-dialog.cpp @@ -66,6 +66,7 @@ #include <gtkmm/paned.h> #include <gtkmm/scrolledwindow.h> #include <gtkmm/stock.h> +#include <gdkmm/general.h> using namespace Inkscape::Filters; @@ -1606,6 +1607,7 @@ bool FilterEffectsDialog::PrimitiveList::on_expose_signal(GdkEventExpose* e) Gdk::Rectangle clip(e->area.x, e->area.y, e->area.width, e->area.height); Glib::RefPtr<Gdk::Window> win = get_bin_window(); Glib::RefPtr<Gdk::GC> darkgc = get_style()->get_dark_gc(Gtk::STATE_NORMAL); + Cairo::RefPtr<Cairo::Context> cr = get_bin_window()->create_cairo_context(); SPFilterPrimitive* prim = get_selected(); int row_count = get_model()->children().size(); @@ -1617,14 +1619,25 @@ bool FilterEffectsDialog::PrimitiveList::on_expose_signal(GdkEventExpose* e) if(row) { get_cell_area(get_model()->get_path(row), *get_column(1), rct); get_visible_rect(vis); - text_start_x = rct.get_x() + rct.get_width() - get_input_type_width() * FPInputConverter._length + 1; - for(unsigned int i = 0; i < FPInputConverter._length; ++i) { + + for(unsigned int i = 0; i < FPInputConverter._length; ++i) { _vertical_layout->set_text(_(FPInputConverter.get_label((FilterPrimitiveInput)i).c_str())); const int x = text_start_x + get_input_type_width() * i; - get_bin_window()->draw_rectangle(get_style()->get_bg_gc(Gtk::STATE_NORMAL), true, x, 0, get_input_type_width(), vis.get_height()); - get_bin_window()->draw_layout(get_style()->get_text_gc(Gtk::STATE_NORMAL), x + 1, 0, _vertical_layout); - get_bin_window()->draw_line(darkgc, x, 0, x, vis.get_height()); + cr->save(); + cr->rectangle(x, 0, get_input_type_width(), vis.get_height()); + Gdk::Cairo::set_source_color(cr, get_style()->get_bg(Gtk::STATE_NORMAL)); + cr->fill_preserve(); + Gdk::Cairo::set_source_color(cr, get_style()->get_text(Gtk::STATE_NORMAL)); + cr->move_to(x+get_input_type_width(), 0); + cr->rotate_degrees(90); + _vertical_layout->show_in_cairo_context(cr); + Gdk::Cairo::set_source_color(cr, get_style()->get_dark(Gtk::STATE_NORMAL)); + cr->set_line_width(1.0); + cr->move_to(x, 0); + cr->line_to(x, vis.get_height()); + cr->stroke(); + cr->restore(); } } @@ -1640,10 +1653,16 @@ bool FilterEffectsDialog::PrimitiveList::on_expose_signal(GdkEventExpose* e) // Outline the bottom of the connection area const int outline_x = x + fheight * (row_count - row_index); - get_bin_window()->draw_line(darkgc, x, y + h, outline_x, y + h); - + cr->save(); + Gdk::Cairo::set_source_color(cr, get_style()->get_dark(Gtk::STATE_NORMAL)); + cr->set_line_width(1.0); + cr->move_to(x, y + h); + cr->line_to(outline_x, y + h); // Side outline - get_bin_window()->draw_line(darkgc, outline_x, y - 1, outline_x, y + h); + cr->line_to(outline_x, y - 1); + + cr->stroke(); + cr->restore(); std::vector<Gdk::Point> con_poly; int con_drag_y = 0; @@ -1693,10 +1712,15 @@ bool FilterEffectsDialog::PrimitiveList::on_expose_signal(GdkEventExpose* e) // Draw drag connection if(row_prim == prim && _in_drag) { - get_bin_window()->draw_line(get_style()->get_black_gc(), outline_x, con_drag_y, - mx, con_drag_y); - get_bin_window()->draw_line(get_style()->get_black_gc(), mx, con_drag_y, mx, my); - } + cr->save(); + Gdk::Cairo::set_source_color(cr, get_style()->get_black()); + cr->set_line_width(1.0); + cr->move_to(outline_x, con_drag_y); + cr->line_to(mx, con_drag_y); + cr->line_to(mx, my); + cr->stroke(); + cr->restore(); + } } return true; @@ -1708,32 +1732,37 @@ void FilterEffectsDialog::PrimitiveList::draw_connection(const Gtk::TreeIter& in { int src_id = 0; Gtk::TreeIter res = find_result(input, attr, src_id); - Glib::RefPtr<Gdk::GC> darkgc = get_style()->get_black_gc(); - Glib::RefPtr<Gdk::GC> lightgc = get_style()->get_dark_gc(Gtk::STATE_NORMAL); - Glib::RefPtr<Gdk::GC> gc; + Cairo::RefPtr<Cairo::Context> cr = get_bin_window()->create_cairo_context(); const bool is_first = input == get_model()->children().begin(); const bool is_merge = SP_IS_FEMERGE((SPFilterPrimitive*)(*input)[_columns.primitive]); const bool use_default = !res && !is_merge; + cr->set_line_width(1); if(res == input || (use_default && is_first)) { // Draw straight connection to a standard input // Draw a lighter line for an implicit connection to a standard input const int tw = get_input_type_width(); gint end_x = text_start_x + tw * src_id + (int)(tw * 0.5f) + 1; - gc = (use_default && is_first) ? lightgc : darkgc; - get_bin_window()->draw_rectangle(gc, true, end_x-2, y1-2, 5, 5); - get_bin_window()->draw_line(gc, x1, y1, end_x, y1); + + if(use_default && is_first) + Gdk::Cairo::set_source_color(cr, get_style()->get_dark(Gtk::STATE_NORMAL)); + else + Gdk::Cairo::set_source_color(cr, get_style()->get_black()); + + cr->rectangle(end_x-2, y1-2, 5, 5); + cr->fill_preserve(); + cr->move_to(x1, y1); + cr->line_to(end_x, y1); + cr->stroke(); } else { // Draw an 'L'-shaped connection to another filter primitive // If no connection is specified, draw a light connection to the previous primitive - gc = use_default ? lightgc : darkgc; - - if(use_default) { - res = input; - --res; - } + if(use_default) { + res = input; + --res; + } if(res) { Gdk::Rectangle rct; @@ -1747,9 +1776,12 @@ void FilterEffectsDialog::PrimitiveList::draw_connection(const Gtk::TreeIter& in const int y2 = rct.get_y() + rct.get_height(); // Draw a bevelled 'L'-shaped connection - get_bin_window()->draw_line(get_style()->get_black_gc(), x1, y1, x2-fheight/4, y1); - get_bin_window()->draw_line(get_style()->get_black_gc(), x2-fheight/4, y1, x2, y1-fheight/4); - get_bin_window()->draw_line(get_style()->get_black_gc(), x2, y1-fheight/4, x2, y2); + Gdk::Cairo::set_source_color(cr, get_style()->get_black()); + cr->move_to(x1, y1); + cr->line_to(x2-fheight/4, y1); + cr->line_to(x2, y1-fheight/4); + cr->line_to(x2, y2); + cr->stroke(); } } } diff --git a/src/ui/dialog/find.cpp b/src/ui/dialog/find.cpp index f5745e02b..5fd6e18d8 100644 --- a/src/ui/dialog/find.cpp +++ b/src/ui/dialog/find.cpp @@ -436,7 +436,7 @@ Find::item_style_match (SPItem *item, const gchar *text, bool exact, bool casema return found; } -bool Find::item_attr_match(SPItem *item, const gchar *text, bool exact, bool casematch, bool replace/*=false*/) +bool Find::item_attr_match(SPItem *item, const gchar *text, bool exact, bool /*casematch*/, bool replace/*=false*/) { bool found = false; @@ -492,7 +492,7 @@ bool Find::item_attrvalue_match(SPItem *item, const gchar *text, bool exact, boo } -bool Find::item_font_match(SPItem *item, const gchar *text, bool exact, bool casematch, bool replace/*=false*/) +bool Find::item_font_match(SPItem *item, const gchar *text, bool exact, bool casematch, bool /*replace*/ /*=false*/) { bool ret = false; diff --git a/src/ui/dialog/inkscape-preferences.cpp b/src/ui/dialog/inkscape-preferences.cpp index 269266083..b038ae60d 100644 --- a/src/ui/dialog/inkscape-preferences.cpp +++ b/src/ui/dialog/inkscape-preferences.cpp @@ -129,7 +129,6 @@ InkscapePreferences::InkscapePreferences() initPageRendering(); initPageSpellcheck(); - signalPresent().connect(sigc::mem_fun(*this, &InkscapePreferences::_presentPages)); //calculate the size request for this dialog @@ -364,7 +363,7 @@ void InkscapePreferences::initPageTools() AddGradientCheckbox(_page_zoom, "/tools/zoom", false); //Measure - this->AddPage(_page_measure, _("Measure"), iter_tools, PREFS_PAGE_TOOLS_MEASURE); + this->AddPage(_page_measure, C_("Measurement tool", "Measure"), iter_tools, PREFS_PAGE_TOOLS_MEASURE); PrefCheckButton* cb = Gtk::manage( new PrefCheckButton); cb->init ( _("Ignore first and last points"), "/tools/measure/ignore_1st_and_last", true); _page_measure.add_line( false, "", *cb, "", _("The start and end of the measurement tool's control line will not be considered for calculating lengths. Only lengths between actual curve intersections will be displayed.")); @@ -1344,38 +1343,41 @@ void InkscapePreferences::initPageSpellcheck() GetModuleFileName(NULL, exeName, MAX_PATH); char *slashPos = strrchr(exeName, '\\'); if (slashPos) + { *slashPos = '\0'; - g_print ("%s\n", exeName); + } + // g_print ("%s\n", exeName); aspell_config_replace(config, "prefix", exeName); #endif - /* the returned pointer should _not_ need to be deleted */ - AspellDictInfoList *dlist = get_aspell_dict_info_list(config); - - /* config is no longer needed */ - delete_aspell_config(config); - - AspellDictInfoEnumeration *dels = aspell_dict_info_list_elements(dlist); - - languages.push_back(Glib::ustring(_("None"))); - langValues.push_back(Glib::ustring("")); - - const AspellDictInfo *entry; - int en_index = 0; - int i = 0; - while ( (entry = aspell_dict_info_enumeration_next(dels)) != 0) - { - languages.push_back(Glib::ustring(entry->name)); - langValues.push_back(Glib::ustring(entry->name)); - if (!strcmp (entry->name, "en")) - en_index = i; - i ++; - } - - delete_aspell_dict_info_enumeration(dels); + /* the returned pointer should _not_ need to be deleted */ + AspellDictInfoList *dlist = get_aspell_dict_info_list(config); + + /* config is no longer needed */ + delete_aspell_config(config); + + AspellDictInfoEnumeration *dels = aspell_dict_info_list_elements(dlist); + + languages.push_back(Glib::ustring(_("None"))); + langValues.push_back(Glib::ustring("")); + + const AspellDictInfo *entry; + int en_index = 0; + int i = 0; + while ( (entry = aspell_dict_info_enumeration_next(dels)) != 0) + { + languages.push_back(Glib::ustring(entry->name)); + langValues.push_back(Glib::ustring(entry->name)); + if (!strcmp (entry->name, "en")) + { + en_index = i; + } + i++; + } + delete_aspell_dict_info_enumeration(dels); - _spell_language.init( "/dialogs/spellcheck/lang", &languages[0], &langValues[0], languages.size(), languages[en_index]); + _spell_language.init( "/dialogs/spellcheck/lang", &languages[0], &langValues[0], languages.size(), languages[en_index]); _page_spellcheck.add_line( false, _("Language:"), _spell_language, "", _("Set the main spell check language"), false); diff --git a/src/ui/dialog/layers.h b/src/ui/dialog/layers.h index 0a6f683dd..7959d0e6e 100644 --- a/src/ui/dialog/layers.h +++ b/src/ui/dialog/layers.h @@ -109,7 +109,11 @@ private: std::vector<Gtk::Widget*> _watchingNonBottom; Gtk::TreeView _tree; +#if WITH_GTKMM_3_0 + Gtk::ButtonBox _buttonsRow; +#else Gtk::HButtonBox _buttonsRow; +#endif Gtk::ScrolledWindow _scroller; Gtk::Menu _popupMenu; Inkscape::UI::Widget::SpinButton _spinBtn; diff --git a/src/ui/dialog/livepatheffect-editor.cpp b/src/ui/dialog/livepatheffect-editor.cpp index 161d92b09..1f252c089 100644 --- a/src/ui/dialog/livepatheffect-editor.cpp +++ b/src/ui/dialog/livepatheffect-editor.cpp @@ -32,11 +32,14 @@ #include "live_effects/lpeobject.h" #include "live_effects/lpeobject-reference.h" #include "path-chemistry.h" +#include "selection-chemistry.h" #include "selection.h" #include "sp-item-group.h" #include "sp-lpe-item.h" #include "sp-path.h" #include "sp-rect.h" +#include "sp-use.h" +#include "sp-text.h" #include "sp-shape.h" #include "ui/icon-names.h" #include "ui/widget/imagetoggler.h" @@ -284,6 +287,22 @@ LivePathEffectEditor::onSelectionChanged(Inkscape::Selection *sel) button_up.set_sensitive(false); button_down.set_sensitive(false); } + } else if ( SP_IS_USE(item) ) { + // test whether linked object is supported by the CLONE_ORIGINAL LPE + SPItem *orig = sp_use_get_original( SP_USE(item) ); + if ( SP_IS_SHAPE(orig) || + SP_IS_TEXT(orig) ) + { + // Note that an SP_USE cannot have an LPE applied, so we only need to worry about the "add effect" case. + set_sensitize_all(true); + showText(_("Click add button to convert clone")); + button_remove.set_sensitive(false); + button_up.set_sensitive(false); + button_down.set_sensitive(false); + } else { + showText(_("Select a path or shape")); + set_sensitize_all(false); + } } else { showText(_("Select a path or shape")); set_sensitize_all(false); @@ -369,37 +388,75 @@ LivePathEffectEditor::setDesktop(SPDesktop *desktop) void LivePathEffectEditor::onAdd() { - using Inkscape::UI::Dialog::LivePathEffectAdd; - LivePathEffectAdd::show(current_desktop); - - if ( !LivePathEffectAdd::isApplied()) { - return; - } - - const Util::EnumData<LivePathEffect::EffectType>* data = LivePathEffectAdd::getActiveData(); - if (!data) { - return; - } - Inkscape::Selection *sel = _getSelection(); if ( sel && !sel->isEmpty() ) { SPItem *item = sel->singleItem(); - if ( item && SP_IS_LPE_ITEM(item) ) { - SPDocument *doc = current_desktop->doc(); + if (item) { + if ( SP_IS_LPE_ITEM(item) ) { + // show effectlist dialog + using Inkscape::UI::Dialog::LivePathEffectAdd; + LivePathEffectAdd::show(current_desktop); + if ( !LivePathEffectAdd::isApplied()) { + return; + } - // If item is a SPRect, convert it to path first: - if ( SP_IS_RECT(item) ) { - sp_selected_path_to_curves(current_desktop, false); - item = sel->singleItem(); // get new item - } + SPDocument *doc = current_desktop->doc(); - LivePathEffect::Effect::createAndApply(data->key.c_str(), doc, item); + const Util::EnumData<LivePathEffect::EffectType>* data = LivePathEffectAdd::getActiveData(); + if (!data) { + return; + } - DocumentUndo::done(doc, SP_VERB_DIALOG_LIVE_PATH_EFFECT, - _("Create and apply path effect")); + // If item is a SPRect, convert it to path first: + if ( SP_IS_RECT(item) ) { + sp_selected_path_to_curves(current_desktop, false); + item = sel->singleItem(); // get new item + } - lpe_list_locked = false; - onSelectionChanged(sel); + LivePathEffect::Effect::createAndApply(data->key.c_str(), doc, item); + + DocumentUndo::done(doc, SP_VERB_DIALOG_LIVE_PATH_EFFECT, + _("Create and apply path effect")); + + lpe_list_locked = false; + onSelectionChanged(sel); + } + else if ( SP_IS_USE(item) ) { + // item is a clone. do not show effectlist dialog. + // convert to path, apply CLONE_ORIGINAL LPE, link it to the cloned path + + // test whether linked object is supported by the CLONE_ORIGINAL LPE + SPItem *orig = sp_use_get_original( SP_USE(item) ); + if ( SP_IS_SHAPE(orig) || + SP_IS_TEXT(orig) ) + { + // select original + sel->set(orig); + + // delete clone but remember its id and transform + gchar *id = g_strdup(item->getRepr()->attribute("id")); + gchar *transform = g_strdup(item->getRepr()->attribute("transform")); + item->deleteObject(false); + item = NULL; + + // run sp_selection_clone_original_path_lpe + sp_selection_clone_original_path_lpe(current_desktop); + item = sel->singleItem(); + item->getRepr()->setAttribute("id", id); + item->getRepr()->setAttribute("transform", transform); + g_free(id); + g_free(transform); + + /// \todo Add the LPE stack of the original path? + + SPDocument *doc = current_desktop->doc(); + DocumentUndo::done(doc, SP_VERB_DIALOG_LIVE_PATH_EFFECT, + _("Create and apply Clone original path effect")); + + lpe_list_locked = false; + onSelectionChanged(sel); + } + } } } } diff --git a/src/ui/dialog/livepatheffect-editor.h b/src/ui/dialog/livepatheffect-editor.h index 11ab8ea89..beebbc698 100644 --- a/src/ui/dialog/livepatheffect-editor.h +++ b/src/ui/dialog/livepatheffect-editor.h @@ -102,7 +102,11 @@ private: void on_visibility_toggled( Glib::ustring const& str ); +#if WITH_GTKMM_3_0 + Gtk::ButtonBox toolbar_hbox; +#else Gtk::HButtonBox toolbar_hbox; +#endif Gtk::Button button_add; Gtk::Button button_remove; Gtk::Button button_up; diff --git a/src/ui/dialog/ocaldialogs.cpp b/src/ui/dialog/ocaldialogs.cpp index c766bae9d..4c9245f5c 100644 --- a/src/ui/dialog/ocaldialogs.cpp +++ b/src/ui/dialog/ocaldialogs.cpp @@ -310,7 +310,7 @@ LoadingBox::LoadingBox() : Gtk::EventBox() signal_expose_event().connect(sigc::mem_fun(*this, &LoadingBox::_on_expose_event), false); } -bool LoadingBox::_on_expose_event(GdkEventExpose* event) +bool LoadingBox::_on_expose_event(GdkEventExpose* /*event*/) { Cairo::RefPtr<Cairo::Context> cr = get_window()->create_cairo_context(); @@ -342,7 +342,7 @@ bool LoadingBox::_on_expose_event(GdkEventExpose* event) void LoadingBox::start() { // Timeout hasn't been stopped, so must be disconnected - if ((draw_spinner != false) & (timeout != NULL)) { + if ((draw_spinner != false) && timeout) { timeout.disconnect(); } @@ -447,7 +447,7 @@ void PreviewWidget::clear() image->hide(); } -bool PreviewWidget::_on_expose_event(GdkEventExpose* event) +bool PreviewWidget::_on_expose_event(GdkEventExpose* /*event*/) { Cairo::RefPtr<Cairo::Context> cr = get_window()->create_cairo_context(); @@ -532,11 +532,11 @@ SearchEntry::SearchEntry() : Gtk::Entry() gtk_entry_set_icon_from_stock(gobj(), GTK_ENTRY_ICON_SECONDARY, NULL); } -void SearchEntry::_on_icon_pressed(Gtk::EntryIconPosition icon_position, const GdkEventButton* event) +void SearchEntry::_on_icon_pressed(Gtk::EntryIconPosition icon_position, const GdkEventButton* /*event*/) { if (icon_position == Gtk::ENTRY_ICON_SECONDARY) { grab_focus(); - set_text(""); + delete_text(0, -1); } else if (icon_position == Gtk::ENTRY_ICON_PRIMARY) { select_region(0, -1); grab_focus(); @@ -558,7 +558,7 @@ BaseBox::BaseBox() : Gtk::EventBox() set_visible_window(false); } -bool BaseBox::_on_expose_event(GdkEventExpose* event) +bool BaseBox::_on_expose_event(GdkEventExpose* /*event*/) { Cairo::RefPtr<Cairo::Context> cr = get_window()->create_cairo_context(); @@ -595,7 +595,7 @@ LogoArea::LogoArea() : Gtk::EventBox() set_visible_window(false); } -bool LogoArea::_on_expose_event(GdkEventExpose* event) +bool LogoArea::_on_expose_event(GdkEventExpose* /*event*/) { if (draw_logo) { int x = get_allocation().get_x(); @@ -863,8 +863,8 @@ void ImportDialog::on_thumbnail_downloaded(Glib::ustring path, bool success) /* * Callback for row activated */ -void ImportDialog::on_list_results_row_activated(const Gtk::TreeModel::Path& path, - Gtk::TreeViewColumn* column) +void ImportDialog::on_list_results_row_activated(const Gtk::TreeModel::Path& /*path*/, + Gtk::TreeViewColumn* /*column*/) { on_list_results_cursor_changed(); button_import->signal_clicked(); @@ -1075,12 +1075,14 @@ void ImportDialog::update_label_no_search_results() { Glib::ustring keywords = Glib::Markup::escape_text(entry_search->get_text()); Gdk::Color grey = entry_search->get_style()->get_text_aa(entry_search->get_state()); - + Glib::ustring msg_one = Glib::ustring::compose( + _("No clipart named <b>%1</b> was found."), + keywords); + Glib::ustring msg_two = _("Please make sure all keywords are spelled correctly," + " or try again with different keywords."); Glib::ustring markup = Glib::ustring::compose( - "<span size=\"large\">%1 <b>%2</b> %3</span>\n<span color=\"%4\">%5</span>", - _("No clipart named"), keywords, _("was found."), grey.to_string(), - _("Please make sure all keywords are spelled correctly, or try again with different keywords.")); - + "<span size=\"large\">%1</span>\n<span color=\"%2\">%3</span>", + msg_one, grey.to_string(), msg_two); label_not_found->set_markup(markup); } diff --git a/src/ui/dialog/ocaldialogs.h b/src/ui/dialog/ocaldialogs.h index 5d4ac43ad..9e471b7b5 100644 --- a/src/ui/dialog/ocaldialogs.h +++ b/src/ui/dialog/ocaldialogs.h @@ -59,7 +59,7 @@ public: /** * Constructor */ - FileDialogBase(const Glib::ustring &title, Gtk::Window& parent) : Gtk::Window(Gtk::WINDOW_TOPLEVEL) + FileDialogBase(const Glib::ustring &title, Gtk::Window& /*parent*/) : Gtk::Window(Gtk::WINDOW_TOPLEVEL) { set_title(title); sp_transientize((GtkWidget*) gobj()); diff --git a/src/ui/dialog/spellcheck.h b/src/ui/dialog/spellcheck.h index 74d5b76e6..8eb240097 100644 --- a/src/ui/dialog/spellcheck.h +++ b/src/ui/dialog/spellcheck.h @@ -221,7 +221,11 @@ private: * Dialogs widgets */ Gtk::Label banner_label; +#if WITH_GTKMM_3_0 + Gtk::ButtonBox banner_hbox; +#else Gtk::HButtonBox banner_hbox; +#endif Gtk::ScrolledWindow scrolled_window; Gtk::TreeView tree_view; Glib::RefPtr<Gtk::ListStore> model; diff --git a/src/ui/dialog/swatches.cpp b/src/ui/dialog/swatches.cpp index 29492db55..092887541 100644 --- a/src/ui/dialog/swatches.cpp +++ b/src/ui/dialog/swatches.cpp @@ -420,11 +420,11 @@ void _loadPaletteFile( gchar const *filename ) inHeader = false; ptr = block; Glib::ustring name(""); - int r = 0; - int g = 0; - int b = 0; skipWhitespace(ptr); if ( *ptr ) { + int r = 0; + int g = 0; + int b = 0; hasErr = parseNum(ptr, r); if ( !hasErr ) { skipWhitespace(ptr); @@ -666,14 +666,14 @@ SwatchesPanel::~SwatchesPanel() } } -void SwatchesPanel::setOrientation( Gtk::AnchorType how ) +void SwatchesPanel::setOrientation(SPAnchorType how) { // Must call the parent class or bad things might happen Inkscape::UI::Widget::Panel::setOrientation( how ); if ( _holder ) { - _holder->setOrientation( Gtk::ANCHOR_SOUTH ); + _holder->setOrientation(SP_ANCHOR_SOUTH); } } diff --git a/src/ui/dialog/swatches.h b/src/ui/dialog/swatches.h index 0ff795ac3..ca4c1687d 100644 --- a/src/ui/dialog/swatches.h +++ b/src/ui/dialog/swatches.h @@ -11,6 +11,7 @@ #define SEEN_DIALOGS_SWATCHES_H #include "ui/widget/panel.h" +#include "enums.h" namespace Inkscape { namespace UI { @@ -34,7 +35,7 @@ public: static SwatchesPanel& getInstance(); - virtual void setOrientation( Gtk::AnchorType how ); + virtual void setOrientation(SPAnchorType how); virtual void setDesktop( SPDesktop* desktop ); virtual SPDesktop* getDesktop() {return _currentDesktop;} diff --git a/src/ui/dialog/text-edit.cpp b/src/ui/dialog/text-edit.cpp index c64bd22c6..b09096e63 100644 --- a/src/ui/dialog/text-edit.cpp +++ b/src/ui/dialog/text-edit.cpp @@ -245,7 +245,7 @@ void TextEdit::onSelectionModified(guint flags ) onReadSelection (style, content); } -void TextEdit::onReadSelection ( gboolean dostyle, gboolean docontent ) +void TextEdit::onReadSelection ( gboolean dostyle, gboolean /*docontent*/ ) { if (blocked) return; @@ -643,7 +643,7 @@ void TextEdit::onToggle() } -void TextEdit::onLineSpacingChange(GtkComboBox* widget, gpointer data) +void TextEdit::onLineSpacingChange(GtkComboBox* /*widget*/, gpointer data) { TextEdit *self = static_cast<TextEdit *>(data); if (!self || self->blocked) diff --git a/src/ui/dialog/xml-tree.cpp b/src/ui/dialog/xml-tree.cpp index ae1ebf5ca..5c39a2b22 100644 --- a/src/ui/dialog/xml-tree.cpp +++ b/src/ui/dialog/xml-tree.cpp @@ -48,6 +48,11 @@ #include "widgets/sp-xmlview-content.h" #include "widgets/sp-xmlview-tree.h" +#if !GTK_CHECK_VERSION(2,22,0) +#define GDK_KEY_Escape 0xff1b +#define GDK_KEY_Return 0xff0d +#endif + namespace Inkscape { namespace UI { namespace Dialog { @@ -65,7 +70,6 @@ XmlTree::XmlTree (void) : attributes (NULL), content (NULL), attr_name (), - attr_value (), status (""), tree_toolbar(), xml_element_new_button ( _("New element node")), @@ -167,6 +171,7 @@ XmlTree::XmlTree (void) : Gtk::ScrolledWindow *tree_scroller = new Gtk::ScrolledWindow(); tree_scroller->set_policy( Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC ); + tree_scroller->set_shadow_type(Gtk::SHADOW_IN); tree_scroller->add(*Gtk::manage(Glib::wrap(GTK_WIDGET(tree)))); left_box.pack_start(*tree_scroller); @@ -227,11 +232,11 @@ XmlTree::XmlTree (void) : text_container.add(*Gtk::manage(Glib::wrap(GTK_WIDGET(content)))); /* Signal handlers */ - g_signal_connect( G_OBJECT(tree), "tree_select_row", G_CALLBACK(on_tree_select_row), this ); - g_signal_connect( G_OBJECT(tree), "tree_unselect_row", G_CALLBACK(on_tree_unselect_row), this); + GtkTreeSelection *selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(tree)); + g_signal_connect (G_OBJECT(selection), "changed", G_CALLBACK (on_tree_select_row), this); g_signal_connect_after( G_OBJECT(tree), "tree_move", G_CALLBACK(after_tree_move), this); - GtkTreeSelection *selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(attributes)); + selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(attributes)); g_signal_connect (G_OBJECT(selection), "changed", G_CALLBACK (on_attr_select_row), this); g_signal_connect( G_OBJECT(attributes), "row-value-changed", G_CALLBACK(on_attr_row_changed), this); @@ -287,8 +292,6 @@ XmlTree::~XmlTree (void) Inkscape::GC::release(_message_stack); _message_stack = NULL; _message_changed_connection.~connection(); - - //status = ""; } void XmlTree::setDesktop(SPDesktop *desktop) @@ -336,7 +339,7 @@ bool XmlTree::sp_xml_tree_key_press(GdkEventKey *event) /* fixme: if you need to add more xml-tree-specific callbacks, you should probably upgrade * the sp_shortcut mechanism to take into account windows. */ - if (shortcut == (SP_SHORTCUT_CONTROL_MASK | GDK_Return)) { + if (shortcut == (SP_SHORTCUT_CONTROL_MASK | GDK_KEY_Return)) { cmd_set_attr(); return true; } @@ -394,8 +397,6 @@ void XmlTree::set_tree_repr(Inkscape::XML::Node *repr) return; } - gtk_clist_freeze(GTK_CLIST(tree)); - sp_xmlview_tree_set_repr(tree, repr); if (repr) { set_tree_select(get_dt_select()); @@ -403,8 +404,6 @@ void XmlTree::set_tree_repr(Inkscape::XML::Node *repr) set_tree_select(NULL); } - gtk_clist_thaw(GTK_CLIST(tree)); - propagate_tree_select(selected_repr); } @@ -419,26 +418,29 @@ void XmlTree::set_tree_select(Inkscape::XML::Node *repr) selected_repr = repr; if (repr) { - GtkCTreeNode *node; + GtkTreeIter node; Inkscape::GC::anchor(selected_repr); - node = sp_xmlview_tree_get_repr_node(SP_XMLVIEW_TREE(tree), repr); - if (node) { - GtkCTreeNode *parent; + if (sp_xmlview_tree_get_repr_node(SP_XMLVIEW_TREE(tree), repr, &node)) { - gtk_ctree_select(GTK_CTREE(tree), node); + GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(tree)); + gtk_tree_selection_unselect_all (selection); - parent = GTK_CTREE_ROW(node)->parent; - while (parent) { - gtk_ctree_expand(GTK_CTREE(tree), parent); - parent = GTK_CTREE_ROW(parent)->parent; - } + GtkTreePath* path = gtk_tree_model_get_path(GTK_TREE_MODEL(tree->store), &node); + gtk_tree_view_expand_to_path (GTK_TREE_VIEW(tree), path); + gtk_tree_view_scroll_to_cell(GTK_TREE_VIEW(tree), path, NULL, TRUE, 0.66, 0.0); + gtk_tree_path_free(path); - gtk_ctree_node_moveto(GTK_CTREE(tree), node, 0, 0.66, 0.0); + gtk_tree_selection_select_iter(selection, &node); + + } else { + g_message("XmlTree::set_tree_select : Couldnt find repr node"); } } else { - gtk_clist_unselect_all(GTK_CLIST(tree)); + GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(tree)); + gtk_tree_selection_unselect_all (selection); + on_tree_unselect_row_disable(); on_tree_unselect_row_hide(); } @@ -508,76 +510,67 @@ void XmlTree::set_dt_select(Inkscape::XML::Node *repr) } // end of set_dt_select() -void XmlTree::on_tree_select_row(GtkCTree *tree, - GtkCTreeNode *node, - gint column, - gpointer data) +/*void XmlTree::on_tree_select_row(GtkCTree *tree, + GtkCTreeNode *node, + gint column, + gpointer data)*/ +void XmlTree::on_tree_select_row(GtkTreeSelection *selection, gpointer data) { - XmlTree *self = (XmlTree *)data; + XmlTree *self = static_cast<XmlTree *>(data); - Inkscape::XML::Node *repr = sp_xmlview_tree_node_get_repr(SP_XMLVIEW_TREE(tree), node); - g_assert(repr != NULL); + GtkTreeIter iter; + GtkTreeModel *model; if (self->selected_repr) { Inkscape::GC::release(self->selected_repr); self->selected_repr = NULL; } - self->selected_repr = repr; - Inkscape::GC::anchor(self->selected_repr); - self->propagate_tree_select(self->selected_repr); - self->set_dt_select(self->selected_repr); - - self->tree_reset_context(); + if (!gtk_tree_selection_get_selected (selection, &model, &iter)) { + // Nothing selected, update widgets + self->propagate_tree_select(NULL); + self->set_dt_select(NULL); + self->on_tree_unselect_row_disable(); + self->on_tree_unselect_row_hide(); + self->on_attr_unselect_row_clear_text(); + return; + } - self->on_tree_select_row_enable(node); -} + Inkscape::XML::Node *repr = sp_xmlview_tree_node_get_repr(GTK_TREE_VIEW(self->tree), &iter); + g_assert(repr != NULL); -void XmlTree::on_tree_unselect_row(GtkCTree *tree, - GtkCTreeNode *node, - gint column, - gpointer data) -{ - XmlTree *self = (XmlTree *)data; - if (self->blocked) { - return; - } + self->selected_repr = repr; + Inkscape::GC::anchor(self->selected_repr); + self->propagate_tree_select(self->selected_repr); - Inkscape::XML::Node *repr = sp_xmlview_tree_node_get_repr(SP_XMLVIEW_TREE(tree), node); - self->propagate_tree_select(NULL); - self->set_dt_select(NULL); + self->set_dt_select(self->selected_repr); - if (self->selected_repr && (self->selected_repr == repr)) { - Inkscape::GC::release(self->selected_repr); - self->selected_repr = NULL; - self->selected_attr = 0; - } + self->tree_reset_context(); - self->on_tree_unselect_row_disable(); - self->on_tree_unselect_row_hide(); - self->on_attr_unselect_row_clear_text(); + self->on_tree_select_row_enable(&iter); } - -void XmlTree::after_tree_move(GtkCTree */*tree*/, - GtkCTreeNode *node, - GtkCTreeNode *new_parent, - GtkCTreeNode *new_sibling, - gpointer data) +void XmlTree::after_tree_move(SPXMLViewTree * /*attributes*/, gpointer value, gpointer data) { - XmlTree *self = (XmlTree *)data; + XmlTree *self = static_cast<XmlTree *>(data); + guint val = GPOINTER_TO_UINT(value); - if (GTK_CTREE_ROW(node)->parent == new_parent && - GTK_CTREE_ROW(node)->sibling == new_sibling) - { + if (val) { DocumentUndo::done(self->current_document, SP_VERB_DIALOG_XML_EDITOR, - _("Drag XML subtree")); + _("Drag XML subtree")); } else { - DocumentUndo::cancel(self->current_document); + //DocumentUndo::cancel(self->current_document); + /* + * There was a problem with drag & drop, + * data is probably not synchronized, so reload the tree + */ + SPDocument *document = self->current_document; + self->set_tree_document(NULL); + self->set_tree_document(document); } } @@ -588,13 +581,13 @@ void XmlTree::_set_status_message(Inkscape::MessageType /*type*/, const gchar *m } } -void XmlTree::on_tree_select_row_enable(GtkCTreeNode *node) +void XmlTree::on_tree_select_row_enable(GtkTreeIter *node) { if (!node) { return; } - Inkscape::XML::Node *repr = sp_xmlview_tree_node_get_repr(SP_XMLVIEW_TREE(tree), node); + Inkscape::XML::Node *repr = sp_xmlview_tree_node_get_repr(GTK_TREE_VIEW(tree), node); Inkscape::XML::Node *parent=repr->parent(); //on_tree_select_row_enable_if_mutable @@ -613,11 +606,10 @@ void XmlTree::on_tree_select_row_enable(GtkCTreeNode *node) //on_tree_select_row_enable_if_has_grandparent { - GtkCTreeNode *parent = GTK_CTREE_ROW(node)->parent; - - if (parent) { - GtkCTreeNode *grandparent = GTK_CTREE_ROW(parent)->parent; - if (grandparent) { + GtkTreeIter parent; + if (gtk_tree_model_iter_parent(GTK_TREE_MODEL(tree->store), &parent, node)) { + GtkTreeIter grandparent; + if (gtk_tree_model_iter_parent(GTK_TREE_MODEL(tree->store), &grandparent, &parent)) { unindent_node_button.set_sensitive(true); } else { unindent_node_button.set_sensitive(false); @@ -683,20 +675,23 @@ void XmlTree::on_tree_select_row_enable(GtkCTreeNode *node) } -gboolean XmlTree::xml_tree_node_mutable(GtkCTreeNode *node) +gboolean XmlTree::xml_tree_node_mutable(GtkTreeIter *node) { // top-level is immutable, obviously - if (!GTK_CTREE_ROW(node)->parent) { + GtkTreeIter parent; + if (!gtk_tree_model_iter_parent(GTK_TREE_MODEL(tree->store), &parent, node)) { return false; } + // if not in base level (where namedview, defs, etc go), we're mutable - if (GTK_CTREE_ROW(GTK_CTREE_ROW(node)->parent)->parent) { + GtkTreeIter child; + if (gtk_tree_model_iter_parent(GTK_TREE_MODEL(tree->store), &child, &parent)) { return true; } Inkscape::XML::Node *repr; - repr = sp_xmlview_tree_node_get_repr(SP_XMLVIEW_TREE(tree), node); + repr = sp_xmlview_tree_node_get_repr(GTK_TREE_VIEW(tree), node); g_assert(repr); // don't let "defs" or "namedview" disappear @@ -732,7 +727,7 @@ void XmlTree::on_tree_unselect_row_hide() void XmlTree::on_attr_select_row(GtkTreeSelection *selection, gpointer data) { - XmlTree *self = (XmlTree *)data; + XmlTree *self = static_cast<XmlTree *>(data); GtkTreeIter iter; GtkTreeModel *model; @@ -747,37 +742,50 @@ void XmlTree::on_attr_select_row(GtkTreeSelection *selection, gpointer data) return; } - self->attr_value.grab_focus (); - - self->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); + gchar *name = 0; + gchar *value = 0; + guint attr = 0; + gtk_tree_model_get (model, &iter, ATTR_COL_NAME, &name, ATTR_COL_VALUE, &value, ATTR_COL_ATTR, &attr, -1); self->attr_name.set_text(name); self->attr_value.get_buffer()->set_text(value); - self->selected_attr = attr; + self->attr_value.grab_focus (); + self->xml_attribute_delete_button.set_sensitive(true); + + self->selected_attr = attr; self->attr_reset_context(self->selected_attr); + if (name) { + g_free(name); + } + + if (value) { + g_free(value); + } } -void XmlTree::on_attr_row_changed(SPXMLViewAttrList *attributes, const gchar * name, gpointer data) +void XmlTree::on_attr_row_changed(SPXMLViewAttrList *attributes, const gchar * name, gpointer /*data*/) { // Reselect the selected row if the data changes to refresh the attribute and value edit boxes. GtkTreeSelection *selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(attributes)); GtkTreeIter iter; GtkTreeModel *model; - const gchar *attr_name; + gchar *attr_name = 0; if (gtk_tree_selection_get_selected (selection, &model, &iter)) { gtk_tree_model_get (model, &iter, 0, &attr_name, -1); - if (!strcmp(name, attr_name)) { - gtk_tree_selection_unselect_all(selection); - gtk_tree_selection_select_iter(selection, &iter); + if (gtk_list_store_iter_is_valid(GTK_LIST_STORE(model), &iter) ) { + if (!strcmp(name, attr_name)) { + gtk_tree_selection_unselect_all(selection); + gtk_tree_selection_select_iter(selection, &iter); + } } } + + if (attr_name) { + g_free(attr_name); + attr_name = 0; + } } void XmlTree::on_attr_unselect_row_clear_text() @@ -821,7 +829,7 @@ void XmlTree::on_document_replaced(SPDesktop *dt, SPDocument *doc) set_tree_document(doc); } -void XmlTree::on_document_uri_set(gchar const */*uri*/, SPDocument *document) +void XmlTree::on_document_uri_set(gchar const * /*uri*/, SPDocument * /*document*/) { /* * Seems to be no way to set the title on a docked dialog @@ -836,7 +844,7 @@ void XmlTree::on_document_uri_set(gchar const */*uri*/, SPDocument *document) gboolean XmlTree::quit_on_esc (GtkWidget *w, GdkEventKey *event, GObject */*tbl*/) { switch (get_group0_keyval (event)) { - case GDK_Escape: // defocus + case GDK_KEY_Escape: // defocus gtk_widget_destroy(w); return TRUE; } @@ -899,7 +907,7 @@ void XmlTree::cmd_new_element_node() gchar *new_name = g_strdup(name_entry->get_text().c_str()); - if (selected_repr != NULL && new_name) { + if (new_name) { Inkscape::XML::Document *xml_doc = current_document->getReprDoc(); Inkscape::XML::Node *new_repr; new_repr = xml_doc->createElement(new_name); @@ -946,10 +954,13 @@ void XmlTree::cmd_duplicate_node() DocumentUndo::done(current_document, SP_VERB_DIALOG_XML_EDITOR, _("Duplicate node")); - GtkCTreeNode *node = sp_xmlview_tree_get_repr_node(SP_XMLVIEW_TREE(tree), dup); + GtkTreeIter node; + + if (sp_xmlview_tree_get_repr_node(SP_XMLVIEW_TREE(tree), dup, &node)) { + GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(tree)); + gtk_tree_selection_select_iter(selection, &node); + } else { - if (node) { - gtk_ctree_select(GTK_CTREE(tree), node); } } diff --git a/src/ui/dialog/xml-tree.h b/src/ui/dialog/xml-tree.h index bf43f5ae8..ee1dadc14 100644 --- a/src/ui/dialog/xml-tree.h +++ b/src/ui/dialog/xml-tree.h @@ -83,7 +83,7 @@ private: /** * Is the selected tree node editable */ - gboolean xml_tree_node_mutable(GtkCTreeNode *node); + gboolean xml_tree_node_mutable(GtkTreeIter *node); /** * Callback to close the add dialog on Escape key @@ -113,17 +113,12 @@ private: /** * Callback for a node in the tree being selected */ - static void on_tree_select_row(GtkCTree *tree, GtkCTreeNode *node, gint column, gpointer data); - - /** - * Callback when no node in the tree is selected - */ - static void on_tree_unselect_row(GtkCTree *tree, GtkCTreeNode *node, gint column, gpointer data); + static void on_tree_select_row(GtkTreeSelection *selection, gpointer data); /** * Callback when a node is moved in the tree */ - static void after_tree_move(GtkCTree *tree, GtkCTreeNode *node, GtkCTreeNode *new_parent, GtkCTreeNode *new_sibling, gpointer data); + static void after_tree_move(SPXMLViewTree *attributes, gpointer value, gpointer data); /** * Callback for when attribute selection changes @@ -138,7 +133,7 @@ private: /** * Enable widgets based on current selections */ - void on_tree_select_row_enable(GtkCTreeNode *node); + void on_tree_select_row_enable(GtkTreeIter *node); void on_tree_unselect_row_disable(); void on_tree_unselect_row_hide(); void on_attr_unselect_row_disable(); diff --git a/src/ui/previewfillable.h b/src/ui/previewfillable.h index 07fbc4fc5..d5f609a0b 100644 --- a/src/ui/previewfillable.h +++ b/src/ui/previewfillable.h @@ -15,6 +15,7 @@ #include "previewable.h" #include "../widgets/eek-preview.h" +#include "enums.h" namespace Inkscape { namespace UI { @@ -28,7 +29,7 @@ public: virtual void freezeUpdates() = 0; virtual void thawUpdates() = 0; virtual void setStyle( ::PreviewSize size, ViewType type, guint ratio) = 0; - virtual void setOrientation( Gtk::AnchorType how ) = 0; + virtual void setOrientation(SPAnchorType how) = 0; virtual ::PreviewSize getPreviewSize() const = 0; virtual ViewType getPreviewType() const = 0; virtual guint getPreviewRatio() const = 0; diff --git a/src/ui/previewholder.cpp b/src/ui/previewholder.cpp index 9e69778b7..d8f1a21a9 100644 --- a/src/ui/previewholder.cpp +++ b/src/ui/previewholder.cpp @@ -34,7 +34,7 @@ PreviewHolder::PreviewHolder() : _insides(0), _prefCols(0), _updatesFrozen(false), - _anchor(Gtk::ANCHOR_CENTER), + _anchor(SP_ANCHOR_CENTER), _baseSize(PREVIEW_SIZE_SMALL), _ratio(100), _view(VIEW_TYPE_LIST), @@ -63,7 +63,7 @@ void PreviewHolder::clear() items.clear(); _prefCols = 0; // Kludge to restore scrollbars - if ( !_wrap && (_view != VIEW_TYPE_LIST) && (_anchor == Gtk::ANCHOR_NORTH || _anchor == Gtk::ANCHOR_SOUTH) ) { + if ( !_wrap && (_view != VIEW_TYPE_LIST) && (_anchor == SP_ANCHOR_NORTH || _anchor == SP_ANCHOR_SOUTH) ) { dynamic_cast<Gtk::ScrolledWindow*>(_scroller)->set_policy( Gtk::POLICY_AUTOMATIC, Gtk::POLICY_NEVER ); } rebuildUI(); @@ -136,29 +136,29 @@ void PreviewHolder::setStyle( ::PreviewSize size, ViewType view, guint ratio ) _view = view; _ratio = ratio; // Kludge to restore scrollbars - if ( !_wrap && (_view != VIEW_TYPE_LIST) && (_anchor == Gtk::ANCHOR_NORTH || _anchor == Gtk::ANCHOR_SOUTH) ) { + if ( !_wrap && (_view != VIEW_TYPE_LIST) && (_anchor == SP_ANCHOR_NORTH || _anchor == SP_ANCHOR_SOUTH) ) { dynamic_cast<Gtk::ScrolledWindow*>(_scroller)->set_policy( Gtk::POLICY_AUTOMATIC, Gtk::POLICY_NEVER ); } rebuildUI(); } } -void PreviewHolder::setOrientation( Gtk::AnchorType how ) +void PreviewHolder::setOrientation(SPAnchorType how) { if ( _anchor != how ) { _anchor = how; switch ( _anchor ) { - case Gtk::ANCHOR_NORTH: - case Gtk::ANCHOR_SOUTH: + case SP_ANCHOR_NORTH: + case SP_ANCHOR_SOUTH: { dynamic_cast<Gtk::ScrolledWindow*>(_scroller)->set_policy( Gtk::POLICY_AUTOMATIC, _wrap ? Gtk::POLICY_AUTOMATIC : Gtk::POLICY_NEVER ); } break; - case Gtk::ANCHOR_EAST: - case Gtk::ANCHOR_WEST: + case SP_ANCHOR_EAST: + case SP_ANCHOR_WEST: { dynamic_cast<Gtk::ScrolledWindow*>(_scroller)->set_policy( Gtk::POLICY_NEVER, Gtk::POLICY_AUTOMATIC ); } @@ -179,8 +179,8 @@ void PreviewHolder::setWrap( bool b ) _wrap = b; switch ( _anchor ) { - case Gtk::ANCHOR_NORTH: - case Gtk::ANCHOR_SOUTH: + case SP_ANCHOR_NORTH: + case SP_ANCHOR_SOUTH: { dynamic_cast<Gtk::ScrolledWindow*>(_scroller)->set_policy( Gtk::POLICY_AUTOMATIC, _wrap ? Gtk::POLICY_AUTOMATIC : Gtk::POLICY_NEVER ); } @@ -206,7 +206,7 @@ void PreviewHolder::on_size_allocate( Gtk::Allocation& allocation ) // g_message(" anchor:%d", _anchor); Gtk::VBox::on_size_allocate( allocation ); - if ( _insides && !_wrap && (_view != VIEW_TYPE_LIST) && (_anchor == Gtk::ANCHOR_NORTH || _anchor == Gtk::ANCHOR_SOUTH) ) { + if ( _insides && !_wrap && (_view != VIEW_TYPE_LIST) && (_anchor == SP_ANCHOR_NORTH || _anchor == SP_ANCHOR_SOUTH) ) { Gtk::Requisition req = _insides->size_request(); gint delta = allocation.get_width() - req.width; @@ -232,7 +232,7 @@ void PreviewHolder::calcGridSize( const Gtk::Widget* thing, int itemCount, int& width = itemCount; height = 1; - if ( _anchor == Gtk::ANCHOR_SOUTH || _anchor == Gtk::ANCHOR_NORTH ) { + if ( _anchor == SP_ANCHOR_SOUTH || _anchor == SP_ANCHOR_NORTH ) { Gtk::Requisition req = _scroller->size_request(); int currW = _scroller->get_width(); if ( currW > req.width ) { diff --git a/src/ui/previewholder.h b/src/ui/previewholder.h index c396cef19..5a0dfc267 100644 --- a/src/ui/previewholder.h +++ b/src/ui/previewholder.h @@ -18,6 +18,7 @@ #include <gtkmm/table.h> #include "previewfillable.h" #include "../widgets/eek-preview.h" +#include "enums.h" namespace Inkscape { namespace UI { @@ -33,7 +34,7 @@ public: virtual void freezeUpdates(); virtual void thawUpdates(); virtual void setStyle( ::PreviewSize size, ViewType view, guint ratio ); - virtual void setOrientation( Gtk::AnchorType how ); + virtual void setOrientation(SPAnchorType how); virtual int getColumnPref() const { return _prefCols; } virtual void setColumnPref( int cols ); virtual ::PreviewSize getPreviewSize() const { return _baseSize; } @@ -56,7 +57,7 @@ private: Gtk::Table *_insides; int _prefCols; bool _updatesFrozen; - Gtk::AnchorType _anchor; + SPAnchorType _anchor; ::PreviewSize _baseSize; guint _ratio; ViewType _view; diff --git a/src/ui/tool/control-point-selection.cpp b/src/ui/tool/control-point-selection.cpp index b39a78979..e4899691a 100644 --- a/src/ui/tool/control-point-selection.cpp +++ b/src/ui/tool/control-point-selection.cpp @@ -21,6 +21,109 @@ #include <gdk/gdkkeysyms.h> +#if !GTK_CHECK_VERSION(2,22,0) +#define GDK_KEY_VoidSymbol 0xffffff +#define GDK_KEY_Up 0xff52 +#define GDK_KEY_KP_Up 0xff97 +#define GDK_KEY_Down 0xff54 +#define GDK_KEY_KP_Down 0xff99 +#define GDK_KEY_Left 0xff51 +#define GDK_KEY_KP_Left 0xff96 +#define GDK_KEY_Right 0xff53 +#define GDK_KEY_KP_Right 0xff98 +#define GDK_KEY_Page_Up 0xff55 +#define GDK_KEY_KP_Page_Up 0xff9a +#define GDK_KEY_Page_Down 0xff56 +#define GDK_KEY_KP_Page_Down 0xff9b +#define GDK_KEY_Home 0xff50 +#define GDK_KEY_KP_Home 0xff95 +#define GDK_KEY_End 0xff57 +#define GDK_KEY_KP_End 0xff9c +#define GDK_KEY_a 0x061 +#define GDK_KEY_A 0x041 +#define GDK_KEY_b 0x062 +#define GDK_KEY_B 0x042 +#define GDK_KEY_d 0x064 +#define GDK_KEY_D 0x044 +#define GDK_KEY_g 0x067 +#define GDK_KEY_G 0x047 +#define GDK_KEY_h 0x068 +#define GDK_KEY_H 0x048 +#define GDK_KEY_i 0x069 +#define GDK_KEY_I 0x049 +#define GDK_KEY_j 0x06a +#define GDK_KEY_J 0x04a +#define GDK_KEY_k 0x06b +#define GDK_KEY_K 0x04b +#define GDK_KEY_l 0x06c +#define GDK_KEY_L 0x04c +#define GDK_KEY_q 0x071 +#define GDK_KEY_Q 0x051 +#define GDK_KEY_r 0x072 +#define GDK_KEY_R 0x052 +#define GDK_KEY_s 0x073 +#define GDK_KEY_S 0x053 +#define GDK_KEY_u 0x075 +#define GDK_KEY_U 0x055 +#define GDK_KEY_v 0x076 +#define GDK_KEY_V 0x056 +#define GDK_KEY_w 0x077 +#define GDK_KEY_W 0x057 +#define GDK_KEY_x 0x078 +#define GDK_KEY_X 0x058 +#define GDK_KEY_z 0x07a +#define GDK_KEY_Z 0x05a +#define GDK_KEY_Escape 0xff1b +#define GDK_KEY_Control_L 0xffe3 +#define GDK_KEY_Control_R 0xffe4 +#define GDK_KEY_Alt_L 0xffe9 +#define GDK_KEY_Alt_R 0xffea +#define GDK_KEY_Shift_L 0xffe1 +#define GDK_KEY_Shift_R 0xffe2 +#define GDK_KEY_Meta_L 0xffe7 +#define GDK_KEY_Meta_R 0xffe8 +#define GDK_KEY_KP_0 0xffb0 +#define GDK_KEY_KP_1 0xffb1 +#define GDK_KEY_KP_2 0xffb2 +#define GDK_KEY_KP_3 0xffb3 +#define GDK_KEY_KP_4 0xffb4 +#define GDK_KEY_KP_5 0xffb5 +#define GDK_KEY_KP_6 0xffb6 +#define GDK_KEY_KP_7 0xffb7 +#define GDK_KEY_KP_8 0xffb8 +#define GDK_KEY_KP_9 0xffb9 +#define GDK_KEY_F1 0xffbe +#define GDK_KEY_F2 0xffbf +#define GDK_KEY_F3 0xffc0 +#define GDK_KEY_F4 0xffc1 +#define GDK_KEY_F5 0xffc2 +#define GDK_KEY_F6 0xffc3 +#define GDK_KEY_F7 0xffc4 +#define GDK_KEY_F8 0xffc5 +#define GDK_KEY_F9 0xffc6 +#define GDK_KEY_F10 0xffc7 +#define GDK_KEY_F11 0xffc8 +#define GDK_KEY_Insert 0xff63 +#define GDK_KEY_KP_Insert 0xff9e +#define GDK_KEY_Delete 0xffff +#define GDK_KEY_KP_Delete 0xff9f +#define GDK_KEY_BackSpace 0xff08 +#define GDK_KEY_Return 0xff0d +#define GDK_KEY_KP_Enter 0xff8d +#define GDK_KEY_space 0x020 +#define GDK_KEY_KP_Space 0xff80 +#define GDK_KEY_Tab 0xff09 +#define GDK_KEY_ISO_Left_Tab 0xfe20 +#define GDK_KEY_bracketleft 0x05b +#define GDK_KEY_bracketright 0x05d +#define GDK_KEY_less 0x03c +#define GDK_KEY_greater 0x03e +#define GDK_KEY_comma 0x02c +#define GDK_KEY_period 0x02e +#define GDK_KEY_KP_Add 0xffab +#define GDK_KEY_KP_Subtract 0xffad +#endif + namespace Inkscape { namespace UI { @@ -579,7 +682,7 @@ void ControlPointSelection::_commitHandlesTransform(CommitEvent ce) signal_commit.emit(ce); } -bool ControlPointSelection::event(SPEventContext *event_context, GdkEvent *event) +bool ControlPointSelection::event(SPEventContext * /*event_context*/, GdkEvent *event) { // implement generic event handling that should apply for all control point selections here; // for example, keyboard moves and transformations. This way this functionality doesn't need @@ -593,43 +696,43 @@ bool ControlPointSelection::event(SPEventContext *event_context, GdkEvent *event switch(shortcut_key(event->key)) { // moves - case GDK_Up: - case GDK_KP_Up: - case GDK_KP_8: + case GDK_KEY_Up: + case GDK_KEY_KP_Up: + case GDK_KEY_KP_8: return _keyboardMove(event->key, Geom::Point(0, 1)); - case GDK_Down: - case GDK_KP_Down: - case GDK_KP_2: + case GDK_KEY_Down: + case GDK_KEY_KP_Down: + case GDK_KEY_KP_2: return _keyboardMove(event->key, Geom::Point(0, -1)); - case GDK_Right: - case GDK_KP_Right: - case GDK_KP_6: + case GDK_KEY_Right: + case GDK_KEY_KP_Right: + case GDK_KEY_KP_6: return _keyboardMove(event->key, Geom::Point(1, 0)); - case GDK_Left: - case GDK_KP_Left: - case GDK_KP_4: + case GDK_KEY_Left: + case GDK_KEY_KP_Left: + case GDK_KEY_KP_4: return _keyboardMove(event->key, Geom::Point(-1, 0)); // rotates - case GDK_bracketleft: + case GDK_KEY_bracketleft: return _keyboardRotate(event->key, 1); - case GDK_bracketright: + case GDK_KEY_bracketright: return _keyboardRotate(event->key, -1); // scaling - case GDK_less: - case GDK_comma: + case GDK_KEY_less: + case GDK_KEY_comma: return _keyboardScale(event->key, -1); - case GDK_greater: - case GDK_period: + case GDK_KEY_greater: + case GDK_KEY_period: return _keyboardScale(event->key, 1); // TODO: skewing // flipping // NOTE: H is horizontal flip, while Shift+H switches transform handle mode! - case GDK_h: - case GDK_H: + case GDK_KEY_h: + case GDK_KEY_H: if (held_shift(event->key)) { toggleTransformHandlesMode(); return true; @@ -637,8 +740,8 @@ bool ControlPointSelection::event(SPEventContext *event_context, GdkEvent *event // any modifiers except shift should cause no action if (held_any_modifiers(event->key)) break; return _keyboardFlip(Geom::X); - case GDK_v: - case GDK_V: + case GDK_KEY_v: + case GDK_KEY_V: if (held_any_modifiers(event->key)) break; return _keyboardFlip(Geom::Y); default: break; diff --git a/src/ui/tool/control-point.cpp b/src/ui/tool/control-point.cpp index 8525e92f4..15af21777 100644 --- a/src/ui/tool/control-point.cpp +++ b/src/ui/tool/control-point.cpp @@ -27,6 +27,12 @@ #include "ui/tool/event-utils.h" #include "ui/tool/transform-handle-set.h" +#if !GTK_CHECK_VERSION(2,22,0) +#define GDK_KEY_Escape 0xff1b +#define GDK_KEY_Tab 0xff09 +#define GDK_KEY_ISO_Left_Tab 0xfe20 +#endif + namespace Inkscape { namespace UI { @@ -132,7 +138,7 @@ ControlPoint::ColorSet invisible_cset = { * @param group The canvas group the point's canvas item should be created in */ ControlPoint::ControlPoint(SPDesktop *d, Geom::Point const &initial_pos, - Gtk::AnchorType anchor, SPCtrlShapeType shape, + SPAnchorType anchor, SPCtrlShapeType shape, unsigned int size, ColorSet *cset, SPCanvasGroup *group) : _desktop (d) , _canvas_item (NULL) @@ -142,7 +148,7 @@ ControlPoint::ControlPoint(SPDesktop *d, Geom::Point const &initial_pos, { _canvas_item = sp_canvas_item_new( group ? group : sp_desktop_controls (_desktop), SP_TYPE_CTRL, - "anchor", (GtkAnchorType) anchor, "size", (gdouble) size, "shape", shape, + "anchor", (SPAnchorType) anchor, "size", (gdouble) size, "shape", shape, "filled", TRUE, "fill_color", _cset->normal.fill, "stroked", TRUE, "stroke_color", _cset->normal.stroke, "mode", SP_CTRL_MODE_XOR, NULL); @@ -160,7 +166,7 @@ ControlPoint::ControlPoint(SPDesktop *d, Geom::Point const &initial_pos, * @param group The canvas group the point's canvas item should be created in */ ControlPoint::ControlPoint(SPDesktop *d, Geom::Point const &initial_pos, - Gtk::AnchorType anchor, Glib::RefPtr<Gdk::Pixbuf> pixbuf, + SPAnchorType anchor, Glib::RefPtr<Gdk::Pixbuf> pixbuf, ColorSet *cset, SPCanvasGroup *group) : _desktop (d) , _canvas_item (NULL) @@ -169,7 +175,7 @@ ControlPoint::ControlPoint(SPDesktop *d, Geom::Point const &initial_pos, { _canvas_item = sp_canvas_item_new( group ? group : sp_desktop_controls(_desktop), SP_TYPE_CTRL, - "anchor", (GtkAnchorType) anchor, "size", (gdouble) pixbuf->get_width(), + "anchor", (SPAnchorType) anchor, "size", (gdouble) pixbuf->get_width(), "shape", SP_CTRL_SHAPE_BITMAP, "pixbuf", pixbuf->gobj(), "filled", TRUE, "fill_color", _cset->normal.fill, "stroked", TRUE, "stroke_color", _cset->normal.stroke, @@ -262,9 +268,9 @@ SPCtrlShapeType ControlPoint::_shape() const return ret; } -GtkAnchorType ControlPoint::_anchor() const +SPAnchorType ControlPoint::_anchor() const { - GtkAnchorType ret; + SPAnchorType ret; g_object_get(_canvas_item, "anchor", &ret, NULL); return ret; } @@ -288,7 +294,7 @@ void ControlPoint::_setShape(SPCtrlShapeType shape) g_object_set(_canvas_item, "shape", shape, NULL); } -void ControlPoint::_setAnchor(GtkAnchorType anchor) +void ControlPoint::_setAnchor(SPAnchorType anchor) { g_object_set(_canvas_item, "anchor", anchor, NULL); } @@ -440,7 +446,7 @@ bool ControlPoint::_eventHandler(SPEventContext *event_context, GdkEvent *event) case GDK_KEY_PRESS: switch (get_group0_keyval(&event->key)) { - case GDK_Escape: { + case GDK_KEY_Escape: { // ignore Escape if this is not a drag if (!_drag_initiated) break; @@ -480,7 +486,7 @@ bool ControlPoint::_eventHandler(SPEventContext *event_context, GdkEvent *event) ungrabbed(NULL); // ungrabbed handlers can handle a NULL event snapprefs.setSnapEnabledGlobally(snap_save); } return true; - case GDK_Tab: + case GDK_KEY_Tab: {// Downcast from ControlPoint to TransformHandle, if possible // This is an ugly hack; we should have the transform handle intercept the keystrokes itself TransformHandle *th = dynamic_cast<TransformHandle*>(this); @@ -490,7 +496,7 @@ bool ControlPoint::_eventHandler(SPEventContext *event_context, GdkEvent *event) } break; } - case GDK_ISO_Left_Tab: + case GDK_KEY_ISO_Left_Tab: {// Downcast from ControlPoint to TransformHandle, if possible // This is an ugly hack; we should have the transform handle intercept the keystrokes itself TransformHandle *th = dynamic_cast<TransformHandle*>(this); diff --git a/src/ui/tool/control-point.h b/src/ui/tool/control-point.h index f37ff1451..8d1b778a7 100644 --- a/src/ui/tool/control-point.h +++ b/src/ui/tool/control-point.h @@ -19,8 +19,7 @@ #include <2geom/point.h> #include "util/accumulators.h" #include "display/sodipodi-ctrl.h" - -#include <gtkmm/enums.h> +#include "enums.h" class SPDesktop; class SPEventContext; @@ -97,9 +96,9 @@ public: virtual bool _eventHandler(SPEventContext *event_context, GdkEvent *event); protected: - ControlPoint(SPDesktop *d, Geom::Point const &initial_pos, Gtk::AnchorType anchor, + ControlPoint(SPDesktop *d, Geom::Point const &initial_pos, SPAnchorType anchor, SPCtrlShapeType shape, unsigned int size, ColorSet *cset = 0, SPCanvasGroup *group = 0); - ControlPoint(SPDesktop *d, Geom::Point const &initial_pos, Gtk::AnchorType anchor, + ControlPoint(SPDesktop *d, Geom::Point const &initial_pos, SPAnchorType anchor, Glib::RefPtr<Gdk::Pixbuf> pixbuf, ColorSet *cset = 0, SPCanvasGroup *group = 0); /// @name Handle control point events in subclasses @@ -142,12 +141,12 @@ protected: unsigned int _size() const; SPCtrlShapeType _shape() const; - GtkAnchorType _anchor() const; + SPAnchorType _anchor() const; Glib::RefPtr<Gdk::Pixbuf> _pixbuf(); void _setSize(unsigned int size); void _setShape(SPCtrlShapeType shape); - void _setAnchor(GtkAnchorType anchor); + void _setAnchor(SPAnchorType anchor); void _setPixbuf(Glib::RefPtr<Gdk::Pixbuf>); /// @} diff --git a/src/ui/tool/curve-drag-point.cpp b/src/ui/tool/curve-drag-point.cpp index e932c022d..8754681df 100644 --- a/src/ui/tool/curve-drag-point.cpp +++ b/src/ui/tool/curve-drag-point.cpp @@ -38,7 +38,7 @@ bool CurveDragPoint::_segment_was_degenerate = false; CurveDragPoint::CurveDragPoint(PathManipulator &pm) : ControlPoint(pm._multi_path_manipulator._path_data.node_data.desktop, Geom::Point(), - Gtk::ANCHOR_CENTER, SP_CTRL_SHAPE_CIRCLE, 1.0, &invisible_cset, + SP_ANCHOR_CENTER, SP_CTRL_SHAPE_CIRCLE, 1.0, &invisible_cset, pm._multi_path_manipulator._path_data.dragpoint_group) , _pm(pm) { diff --git a/src/ui/tool/event-utils.cpp b/src/ui/tool/event-utils.cpp index f71f0ab12..9d4b3e8e7 100644 --- a/src/ui/tool/event-utils.cpp +++ b/src/ui/tool/event-utils.cpp @@ -14,6 +14,72 @@ #include "display/sp-canvas.h" #include "ui/tool/event-utils.h" +#if !GTK_CHECK_VERSION(2,22,0) +#define GDK_KEY_Up 0xff52 +#define GDK_KEY_KP_Up 0xff97 +#define GDK_KEY_Down 0xff54 +#define GDK_KEY_KP_Down 0xff99 +#define GDK_KEY_Left 0xff51 +#define GDK_KEY_KP_Left 0xff96 +#define GDK_KEY_Right 0xff53 +#define GDK_KEY_KP_Right 0xff98 +#define GDK_KEY_Home 0xff50 +#define GDK_KEY_KP_Home 0xff95 +#define GDK_KEY_End 0xff57 +#define GDK_KEY_KP_End 0xff9c +#define GDK_KEY_a 0x061 +#define GDK_KEY_A 0x041 +#define GDK_KEY_g 0x067 +#define GDK_KEY_G 0x047 +#define GDK_KEY_l 0x06c +#define GDK_KEY_L 0x04c +#define GDK_KEY_r 0x072 +#define GDK_KEY_R 0x052 +#define GDK_KEY_s 0x073 +#define GDK_KEY_S 0x053 +#define GDK_KEY_u 0x075 +#define GDK_KEY_U 0x055 +#define GDK_KEY_x 0x078 +#define GDK_KEY_X 0x058 +#define GDK_KEY_z 0x07a +#define GDK_KEY_Z 0x05a +#define GDK_KEY_Escape 0xff1b +#define GDK_KEY_Control_L 0xffe3 +#define GDK_KEY_Control_R 0xffe4 +#define GDK_KEY_Alt_L 0xffe9 +#define GDK_KEY_Alt_R 0xffea +#define GDK_KEY_Shift_L 0xffe1 +#define GDK_KEY_Shift_R 0xffe2 +#define GDK_KEY_Meta_L 0xffe7 +#define GDK_KEY_Meta_R 0xffe8 +#define GDK_KEY_KP_0 0xffb0 +#define GDK_KEY_KP_1 0xffb1 +#define GDK_KEY_KP_2 0xffb2 +#define GDK_KEY_KP_3 0xffb3 +#define GDK_KEY_KP_4 0xffb4 +#define GDK_KEY_KP_5 0xffb5 +#define GDK_KEY_KP_6 0xffb6 +#define GDK_KEY_KP_7 0xffb7 +#define GDK_KEY_KP_8 0xffb8 +#define GDK_KEY_KP_9 0xffb9 +#define GDK_KEY_Insert 0xff63 +#define GDK_KEY_KP_Insert 0xff9e +#define GDK_KEY_Delete 0xffff +#define GDK_KEY_KP_Delete 0xff9f +#define GDK_KEY_BackSpace 0xff08 +#define GDK_KEY_Return 0xff0d +#define GDK_KEY_KP_Enter 0xff8d +#define GDK_KEY_space 0x020 +#define GDK_KEY_Tab 0xff09 +#define GDK_KEY_ISO_Left_Tab 0xfe20 +#define GDK_KEY_bracketleft 0x05b +#define GDK_KEY_bracketright 0x05d +#define GDK_KEY_less 0x03c +#define GDK_KEY_greater 0x03e +#define GDK_KEY_comma 0x02c +#define GDK_KEY_period 0x02e +#endif + namespace Inkscape { namespace UI { @@ -107,16 +173,16 @@ unsigned state_after_event(GdkEvent *event) case GDK_KEY_PRESS: state = event->key.state; switch(shortcut_key(event->key)) { - case GDK_Shift_L: - case GDK_Shift_R: + case GDK_KEY_Shift_L: + case GDK_KEY_Shift_R: state |= GDK_SHIFT_MASK; break; - case GDK_Control_L: - case GDK_Control_R: + case GDK_KEY_Control_L: + case GDK_KEY_Control_R: state |= GDK_CONTROL_MASK; break; - case GDK_Alt_L: - case GDK_Alt_R: + case GDK_KEY_Alt_L: + case GDK_KEY_Alt_R: state |= GDK_MOD1_MASK; break; default: break; @@ -125,16 +191,16 @@ unsigned state_after_event(GdkEvent *event) case GDK_KEY_RELEASE: state = event->key.state; switch(shortcut_key(event->key)) { - case GDK_Shift_L: - case GDK_Shift_R: + case GDK_KEY_Shift_L: + case GDK_KEY_Shift_R: state &= ~GDK_SHIFT_MASK; break; - case GDK_Control_L: - case GDK_Control_R: + case GDK_KEY_Control_L: + case GDK_KEY_Control_R: state &= ~GDK_CONTROL_MASK; break; - case GDK_Alt_L: - case GDK_Alt_R: + case GDK_KEY_Alt_L: + case GDK_KEY_Alt_R: state &= ~GDK_MOD1_MASK; break; default: break; diff --git a/src/ui/tool/modifier-tracker.cpp b/src/ui/tool/modifier-tracker.cpp index bbef0d469..ea247d4fb 100644 --- a/src/ui/tool/modifier-tracker.cpp +++ b/src/ui/tool/modifier-tracker.cpp @@ -12,6 +12,73 @@ #include <gdk/gdkkeysyms.h> #include "ui/tool/event-utils.h" #include "ui/tool/modifier-tracker.h" +#include <gtk/gtk.h> + +#if !GTK_CHECK_VERSION(2,22,0) +#define GDK_KEY_Up 0xff52 +#define GDK_KEY_KP_Up 0xff97 +#define GDK_KEY_Down 0xff54 +#define GDK_KEY_KP_Down 0xff99 +#define GDK_KEY_Left 0xff51 +#define GDK_KEY_KP_Left 0xff96 +#define GDK_KEY_Right 0xff53 +#define GDK_KEY_KP_Right 0xff98 +#define GDK_KEY_Home 0xff50 +#define GDK_KEY_KP_Home 0xff95 +#define GDK_KEY_End 0xff57 +#define GDK_KEY_KP_End 0xff9c +#define GDK_KEY_a 0x061 +#define GDK_KEY_A 0x041 +#define GDK_KEY_g 0x067 +#define GDK_KEY_G 0x047 +#define GDK_KEY_l 0x06c +#define GDK_KEY_L 0x04c +#define GDK_KEY_r 0x072 +#define GDK_KEY_R 0x052 +#define GDK_KEY_s 0x073 +#define GDK_KEY_S 0x053 +#define GDK_KEY_u 0x075 +#define GDK_KEY_U 0x055 +#define GDK_KEY_x 0x078 +#define GDK_KEY_X 0x058 +#define GDK_KEY_z 0x07a +#define GDK_KEY_Z 0x05a +#define GDK_KEY_Escape 0xff1b +#define GDK_KEY_Control_L 0xffe3 +#define GDK_KEY_Control_R 0xffe4 +#define GDK_KEY_Alt_L 0xffe9 +#define GDK_KEY_Alt_R 0xffea +#define GDK_KEY_Shift_L 0xffe1 +#define GDK_KEY_Shift_R 0xffe2 +#define GDK_KEY_Meta_L 0xffe7 +#define GDK_KEY_Meta_R 0xffe8 +#define GDK_KEY_KP_0 0xffb0 +#define GDK_KEY_KP_1 0xffb1 +#define GDK_KEY_KP_2 0xffb2 +#define GDK_KEY_KP_3 0xffb3 +#define GDK_KEY_KP_4 0xffb4 +#define GDK_KEY_KP_5 0xffb5 +#define GDK_KEY_KP_6 0xffb6 +#define GDK_KEY_KP_7 0xffb7 +#define GDK_KEY_KP_8 0xffb8 +#define GDK_KEY_KP_9 0xffb9 +#define GDK_KEY_Insert 0xff63 +#define GDK_KEY_KP_Insert 0xff9e +#define GDK_KEY_Delete 0xffff +#define GDK_KEY_KP_Delete 0xff9f +#define GDK_KEY_BackSpace 0xff08 +#define GDK_KEY_Return 0xff0d +#define GDK_KEY_KP_Enter 0xff8d +#define GDK_KEY_space 0x020 +#define GDK_KEY_Tab 0xff09 +#define GDK_KEY_ISO_Left_Tab 0xfe20 +#define GDK_KEY_bracketleft 0x05b +#define GDK_KEY_bracketright 0x05d +#define GDK_KEY_less 0x03c +#define GDK_KEY_greater 0x03e +#define GDK_KEY_comma 0x02c +#define GDK_KEY_period 0x02e +#endif namespace Inkscape { namespace UI { @@ -30,44 +97,44 @@ bool ModifierTracker::event(GdkEvent *event) switch (event->type) { case GDK_KEY_PRESS: switch (shortcut_key(event->key)) { - case GDK_Shift_L: + case GDK_KEY_Shift_L: _left_shift = true; break; - case GDK_Shift_R: + case GDK_KEY_Shift_R: _right_shift = true; break; - case GDK_Control_L: + case GDK_KEY_Control_L: _left_ctrl = true; break; - case GDK_Control_R: + case GDK_KEY_Control_R: _right_ctrl = true; break; - case GDK_Alt_L: + case GDK_KEY_Alt_L: _left_alt = true; break; - case GDK_Alt_R: + case GDK_KEY_Alt_R: _right_alt = true; break; } break; case GDK_KEY_RELEASE: switch (shortcut_key(event->key)) { - case GDK_Shift_L: + case GDK_KEY_Shift_L: _left_shift = false; break; - case GDK_Shift_R: + case GDK_KEY_Shift_R: _right_shift = false; break; - case GDK_Control_L: + case GDK_KEY_Control_L: _left_ctrl = false; break; - case GDK_Control_R: + case GDK_KEY_Control_R: _right_ctrl = false; break; - case GDK_Alt_L: + case GDK_KEY_Alt_L: _left_alt = false; break; - case GDK_Alt_R: + case GDK_KEY_Alt_R: _right_alt = false; break; } diff --git a/src/ui/tool/multi-path-manipulator.cpp b/src/ui/tool/multi-path-manipulator.cpp index 597a151c0..2be96afad 100644 --- a/src/ui/tool/multi-path-manipulator.cpp +++ b/src/ui/tool/multi-path-manipulator.cpp @@ -31,6 +31,115 @@ #include <gdk/gdkkeysyms.h> +#if !GTK_CHECK_VERSION(2,22,0) +#define GDK_KEY_VoidSymbol 0xffffff +#define GDK_KEY_Up 0xff52 +#define GDK_KEY_KP_Up 0xff97 +#define GDK_KEY_Down 0xff54 +#define GDK_KEY_KP_Down 0xff99 +#define GDK_KEY_Left 0xff51 +#define GDK_KEY_KP_Left 0xff96 +#define GDK_KEY_Right 0xff53 +#define GDK_KEY_KP_Right 0xff98 +#define GDK_KEY_Page_Up 0xff55 +#define GDK_KEY_KP_Page_Up 0xff9a +#define GDK_KEY_Page_Down 0xff56 +#define GDK_KEY_KP_Page_Down 0xff9b +#define GDK_KEY_Home 0xff50 +#define GDK_KEY_KP_Home 0xff95 +#define GDK_KEY_End 0xff57 +#define GDK_KEY_KP_End 0xff9c +#define GDK_KEY_a 0x061 +#define GDK_KEY_A 0x041 +#define GDK_KEY_b 0x062 +#define GDK_KEY_B 0x042 +#define GDK_KEY_c 0x063 +#define GDK_KEY_C 0x043 +#define GDK_KEY_d 0x064 +#define GDK_KEY_D 0x044 +#define GDK_KEY_g 0x067 +#define GDK_KEY_G 0x047 +#define GDK_KEY_h 0x068 +#define GDK_KEY_H 0x048 +#define GDK_KEY_i 0x069 +#define GDK_KEY_I 0x049 +#define GDK_KEY_j 0x06a +#define GDK_KEY_J 0x04a +#define GDK_KEY_k 0x06b +#define GDK_KEY_K 0x04b +#define GDK_KEY_l 0x06c +#define GDK_KEY_L 0x04c +#define GDK_KEY_q 0x071 +#define GDK_KEY_Q 0x051 +#define GDK_KEY_r 0x072 +#define GDK_KEY_R 0x052 +#define GDK_KEY_s 0x073 +#define GDK_KEY_S 0x053 +#define GDK_KEY_u 0x075 +#define GDK_KEY_U 0x055 +#define GDK_KEY_v 0x076 +#define GDK_KEY_V 0x056 +#define GDK_KEY_w 0x077 +#define GDK_KEY_W 0x057 +#define GDK_KEY_x 0x078 +#define GDK_KEY_X 0x058 +#define GDK_KEY_y 0x079 +#define GDK_KEY_Y 0x059 +#define GDK_KEY_z 0x07a +#define GDK_KEY_Z 0x05a +#define GDK_KEY_Escape 0xff1b +#define GDK_KEY_Control_L 0xffe3 +#define GDK_KEY_Control_R 0xffe4 +#define GDK_KEY_Alt_L 0xffe9 +#define GDK_KEY_Alt_R 0xffea +#define GDK_KEY_Shift_L 0xffe1 +#define GDK_KEY_Shift_R 0xffe2 +#define GDK_KEY_Meta_L 0xffe7 +#define GDK_KEY_Meta_R 0xffe8 +#define GDK_KEY_KP_0 0xffb0 +#define GDK_KEY_KP_1 0xffb1 +#define GDK_KEY_KP_2 0xffb2 +#define GDK_KEY_KP_3 0xffb3 +#define GDK_KEY_KP_4 0xffb4 +#define GDK_KEY_KP_5 0xffb5 +#define GDK_KEY_KP_6 0xffb6 +#define GDK_KEY_KP_7 0xffb7 +#define GDK_KEY_KP_8 0xffb8 +#define GDK_KEY_KP_9 0xffb9 +#define GDK_KEY_F1 0xffbe +#define GDK_KEY_F2 0xffbf +#define GDK_KEY_F3 0xffc0 +#define GDK_KEY_F4 0xffc1 +#define GDK_KEY_F5 0xffc2 +#define GDK_KEY_F6 0xffc3 +#define GDK_KEY_F7 0xffc4 +#define GDK_KEY_F8 0xffc5 +#define GDK_KEY_F9 0xffc6 +#define GDK_KEY_F10 0xffc7 +#define GDK_KEY_F11 0xffc8 +#define GDK_KEY_Insert 0xff63 +#define GDK_KEY_KP_Insert 0xff9e +#define GDK_KEY_Delete 0xffff +#define GDK_KEY_KP_Delete 0xff9f +#define GDK_KEY_BackSpace 0xff08 +#define GDK_KEY_Return 0xff0d +#define GDK_KEY_KP_Enter 0xff8d +#define GDK_KEY_space 0x020 +#define GDK_KEY_KP_Space 0xff80 +#define GDK_KEY_Tab 0xff09 +#define GDK_KEY_ISO_Left_Tab 0xfe20 +#define GDK_KEY_bracketleft 0x05b +#define GDK_KEY_bracketright 0x05d +#define GDK_KEY_braceleft 0x07b +#define GDK_KEY_braceright 0x07d +#define GDK_KEY_less 0x03c +#define GDK_KEY_greater 0x03e +#define GDK_KEY_comma 0x02c +#define GDK_KEY_period 0x02e +#define GDK_KEY_KP_Add 0xffab +#define GDK_KEY_KP_Subtract 0xffad +#endif + #ifdef USE_GNU_HASHES namespace __gnu_cxx { template<> @@ -581,21 +690,21 @@ bool MultiPathManipulator::event(SPEventContext *event_context, GdkEvent *event) switch (key) { // single handle functions // rotation - case GDK_bracketleft: - case GDK_braceleft: + case GDK_KEY_bracketleft: + case GDK_KEY_braceleft: pm.rotateHandle(n, which, 1, one_pixel); break; - case GDK_bracketright: - case GDK_braceright: + case GDK_KEY_bracketright: + case GDK_KEY_braceright: pm.rotateHandle(n, which, -1, one_pixel); break; // adjust length - case GDK_period: - case GDK_greater: + case GDK_KEY_period: + case GDK_KEY_greater: pm.scaleHandle(n, which, 1, one_pixel); break; - case GDK_comma: - case GDK_less: + case GDK_KEY_comma: + case GDK_KEY_less: pm.scaleHandle(n, which, -1, one_pixel); break; default: @@ -611,13 +720,13 @@ bool MultiPathManipulator::event(SPEventContext *event_context, GdkEvent *event) switch (event->type) { case GDK_KEY_PRESS: switch (key) { - case GDK_Insert: - case GDK_KP_Insert: + case GDK_KEY_Insert: + case GDK_KEY_KP_Insert: // Insert - insert nodes in the middle of selected segments insertNodes(); return true; - case GDK_i: - case GDK_I: + case GDK_KEY_i: + case GDK_KEY_I: if (held_only_shift(event->key)) { // Shift+I - insert nodes (alternate keybinding for Mac keyboards // that don't have the Insert key) @@ -625,14 +734,14 @@ bool MultiPathManipulator::event(SPEventContext *event_context, GdkEvent *event) return true; } break; - case GDK_d: - case GDK_D: + case GDK_KEY_d: + case GDK_KEY_D: if (held_only_shift(event->key)) { duplicateNodes(); return true; } - case GDK_j: - case GDK_J: + case GDK_KEY_j: + case GDK_KEY_J: if (held_only_shift(event->key)) { // Shift+J - join nodes joinNodes(); @@ -644,17 +753,17 @@ bool MultiPathManipulator::event(SPEventContext *event_context, GdkEvent *event) return true; } break; - case GDK_b: - case GDK_B: + case GDK_KEY_b: + case GDK_KEY_B: if (held_only_shift(event->key)) { // Shift+B - break nodes breakNodes(); return true; } break; - case GDK_Delete: - case GDK_KP_Delete: - case GDK_BackSpace: + case GDK_KEY_Delete: + case GDK_KEY_KP_Delete: + case GDK_KEY_BackSpace: if (held_shift(event->key)) break; if (held_alt(event->key)) { // Alt+Delete - delete segments @@ -669,55 +778,55 @@ bool MultiPathManipulator::event(SPEventContext *event_context, GdkEvent *event) deleteNodes(del_preserves_shape ^ held_control(event->key)); } return true; - case GDK_c: - case GDK_C: + case GDK_KEY_c: + case GDK_KEY_C: if (held_only_shift(event->key)) { // Shift+C - make nodes cusp setNodeType(NODE_CUSP); return true; } break; - case GDK_s: - case GDK_S: + case GDK_KEY_s: + case GDK_KEY_S: if (held_only_shift(event->key)) { // Shift+S - make nodes smooth setNodeType(NODE_SMOOTH); return true; } break; - case GDK_a: - case GDK_A: + case GDK_KEY_a: + case GDK_KEY_A: if (held_only_shift(event->key)) { // Shift+A - make nodes auto-smooth setNodeType(NODE_AUTO); return true; } break; - case GDK_y: - case GDK_Y: + case GDK_KEY_y: + case GDK_KEY_Y: if (held_only_shift(event->key)) { // Shift+Y - make nodes symmetric setNodeType(NODE_SYMMETRIC); return true; } break; - case GDK_r: - case GDK_R: + case GDK_KEY_r: + case GDK_KEY_R: if (held_only_shift(event->key)) { // Shift+R - reverse subpaths reverseSubpaths(); return true; } break; - case GDK_l: - case GDK_L: + case GDK_KEY_l: + case GDK_KEY_L: if (held_only_shift(event->key)) { // Shift+L - make segments linear setSegmentType(SEGMENT_STRAIGHT); return true; } - case GDK_u: - case GDK_U: + case GDK_KEY_u: + case GDK_KEY_U: if (held_only_shift(event->key)) { // Shift+L - make segments curves setSegmentType(SEGMENT_CUBIC_BEZIER); diff --git a/src/ui/tool/node-tool.cpp b/src/ui/tool/node-tool.cpp index 3c1e7de71..95cf7aebb 100644 --- a/src/ui/tool/node-tool.cpp +++ b/src/ui/tool/node-tool.cpp @@ -43,6 +43,14 @@ #include <gdk/gdkkeysyms.h> +#if !GTK_CHECK_VERSION(2,22,0) +#define GDK_KEY_Escape 0xff1b +#define GDK_KEY_a 0x061 +#define GDK_KEY_A 0x041 +#define GDK_KEY_h 0x068 +#define GDK_KEY_H 0x048 +#endif + /** @struct InkNodeTool * * Node tool event context. @@ -503,7 +511,7 @@ gint ink_node_tool_root_handler(SPEventContext *event_context, GdkEvent *event) case GDK_KEY_PRESS: switch (get_group0_keyval(&event->key)) { - case GDK_Escape: // deselect everything + case GDK_KEY_Escape: // deselect everything if (nt->_selected_nodes->empty()) { selection->clear(); } else { @@ -511,8 +519,8 @@ gint ink_node_tool_root_handler(SPEventContext *event_context, GdkEvent *event) } ink_node_tool_update_tip(nt, event); return TRUE; - case GDK_a: - case GDK_A: + case GDK_KEY_a: + case GDK_KEY_A: if (held_control(event->key) && held_alt(event->key)) { nt->_selected_nodes->selectAll(); // Ctrl+A is handled in selection-chemistry.cpp via verb @@ -520,8 +528,8 @@ gint ink_node_tool_root_handler(SPEventContext *event_context, GdkEvent *event) return TRUE; } break; - case GDK_h: - case GDK_H: + case GDK_KEY_h: + case GDK_KEY_H: if (held_only_control(event->key)) { Inkscape::Preferences *prefs = Inkscape::Preferences::get(); prefs->setBool("/tools/nodes/show_handles", !nt->show_handles); diff --git a/src/ui/tool/node.cpp b/src/ui/tool/node.cpp index 8e39ec05a..1d3acb4a5 100644 --- a/src/ui/tool/node.cpp +++ b/src/ui/tool/node.cpp @@ -33,6 +33,15 @@ #include "ui/tool/path-manipulator.h" #include <gdk/gdkkeysyms.h> +#if !GTK_CHECK_VERSION(2,22,0) +#define GDK_KEY_s 0x073 +#define GDK_KEY_S 0x053 +#define GDK_KEY_Page_Up 0xff55 +#define GDK_KEY_KP_Page_Up 0xff9a +#define GDK_KEY_Page_Down 0xff56 +#define GDK_KEY_KP_Page_Down 0xff9b +#endif + namespace Inkscape { namespace UI { @@ -81,7 +90,7 @@ double Handle::_saved_length = 0.0; bool Handle::_drag_out = false; Handle::Handle(NodeSharedData const &data, Geom::Point const &initial_pos, Node *parent) - : ControlPoint(data.desktop, initial_pos, Gtk::ANCHOR_CENTER, SP_CTRL_SHAPE_CIRCLE, 7.0, + : ControlPoint(data.desktop, initial_pos, SP_ANCHOR_CENTER, SP_CTRL_SHAPE_CIRCLE, 7.0, &handle_colors, data.handle_group) , _parent(parent) , _degenerate(true) @@ -232,8 +241,8 @@ bool Handle::_eventHandler(SPEventContext *event_context, GdkEvent *event) case GDK_KEY_PRESS: switch (shortcut_key(event->key)) { - case GDK_s: - case GDK_S: + case GDK_KEY_s: + case GDK_KEY_S: if (held_only_shift(event->key) && _parent->_type == NODE_CUSP) { // when Shift+S is pressed when hovering over a handle belonging to a cusp node, // hold this handle in place; otherwise process normally @@ -473,7 +482,7 @@ Glib::ustring Handle::_getDragTip(GdkEventMotion */*event*/) * The method move() keeps node type invariants during translations. */ Node::Node(NodeSharedData const &data, Geom::Point const &initial_pos) - : SelectableControlPoint(data.desktop, initial_pos, Gtk::ANCHOR_CENTER, + : SelectableControlPoint(data.desktop, initial_pos, SP_ANCHOR_CENTER, SP_CTRL_SHAPE_DIAMOND, 9.0, *data.selection, &node_colors, data.node_group) , _front(data, initial_pos, this) , _back(data, initial_pos, this) @@ -803,10 +812,10 @@ bool Node::_eventHandler(SPEventContext *event_context, GdkEvent *event) case GDK_KEY_PRESS: switch (shortcut_key(event->key)) { - case GDK_Page_Up: + case GDK_KEY_Page_Up: dir = 1; break; - case GDK_Page_Down: + case GDK_KEY_Page_Down: dir = -1; break; default: goto bail_out; diff --git a/src/ui/tool/path-manipulator.cpp b/src/ui/tool/path-manipulator.cpp index cded702b4..97e25069f 100644 --- a/src/ui/tool/path-manipulator.cpp +++ b/src/ui/tool/path-manipulator.cpp @@ -158,7 +158,7 @@ PathManipulator::~PathManipulator() } /** Handle motion events to update the position of the curve drag point. */ -bool PathManipulator::event(SPEventContext *event_context, GdkEvent *event) +bool PathManipulator::event(SPEventContext * /*event_context*/, GdkEvent *event) { if (empty()) return false; diff --git a/src/ui/tool/selectable-control-point.cpp b/src/ui/tool/selectable-control-point.cpp index c92dcaaae..cec2e7b07 100644 --- a/src/ui/tool/selectable-control-point.cpp +++ b/src/ui/tool/selectable-control-point.cpp @@ -27,7 +27,7 @@ static SelectableControlPoint::ColorSet default_scp_color_set = { }; SelectableControlPoint::SelectableControlPoint(SPDesktop *d, Geom::Point const &initial_pos, - Gtk::AnchorType anchor, SPCtrlShapeType shape, unsigned int size, + SPAnchorType anchor, SPCtrlShapeType shape, unsigned int size, ControlPointSelection &sel, ColorSet *cset, SPCanvasGroup *group) : ControlPoint (d, initial_pos, anchor, shape, size, cset ? reinterpret_cast<ControlPoint::ColorSet*>(cset) @@ -37,7 +37,7 @@ SelectableControlPoint::SelectableControlPoint(SPDesktop *d, Geom::Point const & _selection.allPoints().insert(this); } SelectableControlPoint::SelectableControlPoint(SPDesktop *d, Geom::Point const &initial_pos, - Gtk::AnchorType anchor, Glib::RefPtr<Gdk::Pixbuf> pixbuf, + SPAnchorType anchor, Glib::RefPtr<Gdk::Pixbuf> pixbuf, ControlPointSelection &sel, ColorSet *cset, SPCanvasGroup *group) : ControlPoint (d, initial_pos, anchor, pixbuf, cset ? reinterpret_cast<ControlPoint::ColorSet*>(cset) diff --git a/src/ui/tool/selectable-control-point.h b/src/ui/tool/selectable-control-point.h index 9467aef74..8ecb39a79 100644 --- a/src/ui/tool/selectable-control-point.h +++ b/src/ui/tool/selectable-control-point.h @@ -35,11 +35,11 @@ public: } protected: SelectableControlPoint(SPDesktop *d, Geom::Point const &initial_pos, - Gtk::AnchorType anchor, SPCtrlShapeType shape, + SPAnchorType anchor, SPCtrlShapeType shape, unsigned int size, ControlPointSelection &sel, ColorSet *cset = 0, SPCanvasGroup *group = 0); SelectableControlPoint(SPDesktop *d, Geom::Point const &initial_pos, - Gtk::AnchorType anchor, Glib::RefPtr<Gdk::Pixbuf> pixbuf, + SPAnchorType anchor, Glib::RefPtr<Gdk::Pixbuf> pixbuf, ControlPointSelection &sel, ColorSet *cset = 0, SPCanvasGroup *group = 0); virtual void _setState(State state); diff --git a/src/ui/tool/selector.cpp b/src/ui/tool/selector.cpp index 25d22ecdc..6820b7635 100644 --- a/src/ui/tool/selector.cpp +++ b/src/ui/tool/selector.cpp @@ -19,6 +19,10 @@ #include <gdk/gdkkeysyms.h> +#if !GTK_CHECK_VERSION(2,22,0) +#define GDK_KEY_Escape 0xff1b +#endif + namespace Inkscape { namespace UI { @@ -29,7 +33,7 @@ namespace UI { class SelectorPoint : public ControlPoint { public: SelectorPoint(SPDesktop *d, SPCanvasGroup *group, Selector *s) - : ControlPoint(d, Geom::Point(0,0), Gtk::ANCHOR_CENTER, SP_CTRL_SHAPE_SQUARE, + : ControlPoint(d, Geom::Point(0,0), SP_ANCHOR_CENTER, SP_CTRL_SHAPE_SQUARE, 1, &invisible_cset, group) , _selector(s) , _cancel(false) @@ -49,7 +53,7 @@ public: protected: virtual bool _eventHandler(SPEventContext *event_context, GdkEvent *event) { - if (event->type == GDK_KEY_PRESS && shortcut_key(event->key) == GDK_Escape && + if (event->type == GDK_KEY_PRESS && shortcut_key(event->key) == GDK_KEY_Escape && sp_canvas_item_is_visible(_rubber)) { _cancel = true; diff --git a/src/ui/tool/transform-handle-set.cpp b/src/ui/tool/transform-handle-set.cpp index 2cf6fe55a..b4a27170a 100644 --- a/src/ui/tool/transform-handle-set.cpp +++ b/src/ui/tool/transform-handle-set.cpp @@ -38,20 +38,20 @@ namespace Inkscape { namespace UI { namespace { -Gtk::AnchorType corner_to_anchor(unsigned c) { +SPAnchorType corner_to_anchor(unsigned c) { switch (c % 4) { - case 0: return Gtk::ANCHOR_NE; - case 1: return Gtk::ANCHOR_NW; - case 2: return Gtk::ANCHOR_SW; - default: return Gtk::ANCHOR_SE; + case 0: return SP_ANCHOR_NE; + case 1: return SP_ANCHOR_NW; + case 2: return SP_ANCHOR_SW; + default: return SP_ANCHOR_SE; } } -Gtk::AnchorType side_to_anchor(unsigned s) { +SPAnchorType side_to_anchor(unsigned s) { switch (s % 4) { - case 0: return Gtk::ANCHOR_N; - case 1: return Gtk::ANCHOR_W; - case 2: return Gtk::ANCHOR_S; - default: return Gtk::ANCHOR_E; + case 0: return SP_ANCHOR_N; + case 1: return SP_ANCHOR_W; + case 2: return SP_ANCHOR_S; + default: return SP_ANCHOR_E; } } @@ -82,7 +82,7 @@ ControlPoint::ColorSet center_cset = { } // anonymous namespace /** Base class for node transform handles to simplify implementation */ -TransformHandle::TransformHandle(TransformHandleSet &th, Gtk::AnchorType anchor, Glib::RefPtr<Gdk::Pixbuf> pb) +TransformHandle::TransformHandle(TransformHandleSet &th, SPAnchorType anchor, Glib::RefPtr<Gdk::Pixbuf> pb) : ControlPoint(th._desktop, Geom::Point(), anchor, pb, &thandle_cset, th._transform_handle_group) , _th(th) @@ -180,7 +180,7 @@ void TransformHandle::ungrabbed(GdkEventButton *) class ScaleHandle : public TransformHandle { public: - ScaleHandle(TransformHandleSet &th, Gtk::AnchorType anchor, Glib::RefPtr<Gdk::Pixbuf> pb) + ScaleHandle(TransformHandleSet &th, SPAnchorType anchor, Glib::RefPtr<Gdk::Pixbuf> pb) : TransformHandle(th, anchor, pb) {} protected: @@ -603,7 +603,7 @@ double SkewHandle::_last_angle = 0; class RotationCenter : public ControlPoint { public: RotationCenter(TransformHandleSet &th) - : ControlPoint(th._desktop, Geom::Point(), Gtk::ANCHOR_CENTER, _get_pixbuf(), + : ControlPoint(th._desktop, Geom::Point(), SP_ANCHOR_CENTER, _get_pixbuf(), ¢er_cset, th._transform_handle_group) , _th(th) { diff --git a/src/ui/tool/transform-handle-set.h b/src/ui/tool/transform-handle-set.h index f5f208e6f..cd1a61da2 100644 --- a/src/ui/tool/transform-handle-set.h +++ b/src/ui/tool/transform-handle-set.h @@ -16,6 +16,7 @@ #include <2geom/forward.h> #include "ui/tool/commit-events.h" #include "ui/tool/manipulator.h" +#include "enums.h" class SPDesktop; class CtrlRect; @@ -81,7 +82,7 @@ private: /** Base class for node transform handles to simplify implementation */ class TransformHandle : public ControlPoint { public: - TransformHandle(TransformHandleSet &th, Gtk::AnchorType anchor, Glib::RefPtr<Gdk::Pixbuf> pb); + TransformHandle(TransformHandleSet &th, SPAnchorType anchor, Glib::RefPtr<Gdk::Pixbuf> pb); void getNextClosestPoint(bool reverse); protected: diff --git a/src/ui/widget/dock-item.h b/src/ui/widget/dock-item.h index 75ffea1a0..608badb62 100644 --- a/src/ui/widget/dock-item.h +++ b/src/ui/widget/dock-item.h @@ -15,7 +15,11 @@ #include <gtkmm/frame.h> #include <gtkmm/window.h> +#if WITH_EXT_GDL +#include <gdl/gdl.h> +#else #include "libgdl/gdl.h" +#endif namespace Gtk { class HButtonBox; diff --git a/src/ui/widget/panel.cpp b/src/ui/widget/panel.cpp index 0989c7d0d..45c4e5f07 100644 --- a/src/ui/widget/panel.cpp +++ b/src/ui/widget/panel.cpp @@ -88,7 +88,7 @@ void Panel::_popper(GdkEventButton* event) void Panel::_init() { Glib::ustring tmp("<"); - _anchor = Gtk::ANCHOR_CENTER; + _anchor = SP_ANCHOR_CENTER; guint panel_size = 0, panel_mode = 0, panel_ratio = 100; bool panel_wrap = 0; @@ -269,13 +269,13 @@ void Panel::setLabel(Glib::ustring const &label) _tab_title.set_label(_label); } -void Panel::setOrientation(Gtk::AnchorType how) +void Panel::setOrientation(SPAnchorType how) { if (_anchor != how) { _anchor = how; switch (_anchor) { - case Gtk::ANCHOR_NORTH: - case Gtk::ANCHOR_SOUTH: + case SP_ANCHOR_NORTH: + case SP_ANCHOR_SOUTH: { if (_menu_desired) { _menu_popper.reference(); diff --git a/src/ui/widget/panel.h b/src/ui/widget/panel.h index c1942ef05..2d92d65c9 100644 --- a/src/ui/widget/panel.h +++ b/src/ui/widget/panel.h @@ -18,8 +18,9 @@ #include <gtkmm/button.h> #include <gtkmm/eventbox.h> #include <gtkmm/label.h> - +#include "enums.h" #include <vector> +#include <map> class SPDesktop; class SPDocument; @@ -80,7 +81,7 @@ public: int const &getVerb() const; Glib::ustring const &getApplyLabel() const; - virtual void setOrientation(Gtk::AnchorType how); + virtual void setOrientation(SPAnchorType how); virtual void present(); //< request to be present @@ -126,7 +127,7 @@ protected: */ Glib::ustring const _prefs_path; bool _menu_desired; - Gtk::AnchorType _anchor; + SPAnchorType _anchor; /* Signals */ sigc::signal<void, int> _signal_response; diff --git a/src/ui/widget/registered-widget.h b/src/ui/widget/registered-widget.h index 52a44114d..2a7843a51 100644 --- a/src/ui/widget/registered-widget.h +++ b/src/ui/widget/registered-widget.h @@ -12,11 +12,11 @@ #ifndef INKSCAPE_UI_WIDGET_REGISTERED_WIDGET__H_ #define INKSCAPE_UI_WIDGET_REGISTERED_WIDGET__H_ +#include "ui/widget/scalar.h" #include <2geom/affine.h> #include "xml/node.h" #include "registry.h" -#include "ui/widget/scalar.h" #include "ui/widget/scalar-unit.h" #include "ui/widget/point.h" #include "ui/widget/text.h" @@ -30,6 +30,8 @@ #include "desktop-handles.h" #include "sp-namedview.h" +#include <gtkmm/checkbutton.h> + class SPUnit; class SPDocument; diff --git a/src/ui/widget/selected-style.cpp b/src/ui/widget/selected-style.cpp index ab7b99237..c81385dd7 100644 --- a/src/ui/widget/selected-style.cpp +++ b/src/ui/widget/selected-style.cpp @@ -164,10 +164,10 @@ SelectedStyle::SelectedStyle(bool /*layout*/) _na[i].show_all(); __na[i] = (_("Nothing selected")); - _none[i].set_markup (_("<i>None</i>")); + _none[i].set_markup (C_("Fill and stroke", "<i>None</i>")); sp_set_font_size_smaller (GTK_WIDGET(_none[i].gobj())); _none[i].show_all(); - __none[i] = (i == SS_FILL)? (_("No fill")) : (_("No stroke")); + __none[i] = (i == SS_FILL)? (C_("Fill and stroke", "No fill")) : (C_("Fill and stroke", "No stroke")); _pattern[i].set_markup (_("Pattern")); sp_set_font_size_smaller (GTK_WIDGET(_pattern[i].gobj())); @@ -1259,7 +1259,11 @@ RotateableSwatch::do_motion(double by, guint modifier) { g_object_unref (bitmap); g_object_unref (mask); gdk_window_set_cursor(gtk_widget_get_window(w), cr); +#if GTK_CHECK_VERSION(3,0,0) + g_object_unref(cr); +#else gdk_cursor_unref(cr); +#endif cr_set = true; } } @@ -1314,7 +1318,11 @@ RotateableSwatch::do_release(double by, guint modifier) { GtkWidget *w = GTK_WIDGET(gobj()); gdk_window_set_cursor(gtk_widget_get_window(w), NULL); if (cr) { +#if GTK_CHECK_VERSION(3,0,0) + g_object_unref(cr); +#else gdk_cursor_unref (cr); +#endif cr = NULL; } cr_set = false; diff --git a/src/ui/widget/spinbutton.cpp b/src/ui/widget/spinbutton.cpp index 60b7856f6..8ba8d413d 100644 --- a/src/ui/widget/spinbutton.cpp +++ b/src/ui/widget/spinbutton.cpp @@ -17,6 +17,12 @@ #include "util/expression-evaluator.h" #include "event-context.h" +#if !GTK_CHECK_VERSION(2,22,0) +#define GDK_KEY_Escape 0xff1b +#define GDK_KEY_z 0x07a +#define GDK_KEY_Z 0x05a +#endif + namespace Inkscape { namespace UI { namespace Widget { @@ -64,12 +70,12 @@ bool SpinButton::on_my_focus_in_event(GdkEventFocus* /*event*/) bool SpinButton::on_my_key_press_event(GdkEventKey* event) { switch (get_group0_keyval (event)) { - case GDK_Escape: + case GDK_KEY_Escape: undo(); return true; // I consumed the event break; - case GDK_z: - case GDK_Z: + case GDK_KEY_z: + case GDK_KEY_Z: if (event->state & GDK_CONTROL_MASK) { undo(); return true; // I consumed the event diff --git a/src/ui/widget/style-swatch.cpp b/src/ui/widget/style-swatch.cpp index 0ecf2dd5e..1ee26e803 100644 --- a/src/ui/widget/style-swatch.cpp +++ b/src/ui/widget/style-swatch.cpp @@ -298,9 +298,9 @@ StyleSwatch::setStyle(SPStyle *query) place->set_tooltip_text(tip); g_free (tip); } else if (paint->set && paint->isNone()) { - _value[i].set_markup(_("<i>None</i>")); + _value[i].set_markup(C_("Fill and stroke", "<i>None</i>")); place->add(_value[i]); - place->set_tooltip_text((i == SS_FILL)? (_("No fill")) : (_("No stroke"))); + place->set_tooltip_text((i == SS_FILL)? (C_("Fill and stroke", "No fill")) : (C_("Fill and stroke", "No stroke"))); if (i == SS_STROKE) has_stroke = false; } else if (!paint->set) { _value[i].set_markup(_("<b>Unset</b>")); diff --git a/src/ui/widget/zoom-status.cpp b/src/ui/widget/zoom-status.cpp index fa8191671..579449744 100644 --- a/src/ui/widget/zoom-status.cpp +++ b/src/ui/widget/zoom-status.cpp @@ -106,7 +106,7 @@ ZoomStatus::on_value_changed() double zoom_factor = pow(2, get_value()); Geom::Rect const d = _dt->get_display_area(); _dt->zoom_absolute(d.midpoint()[Geom::X], d.midpoint()[Geom::Y], zoom_factor); - gtk_widget_grab_focus(static_cast<GtkWidget*>((void*)_dt->canvas)); /// \todo this no love song + gtk_widget_grab_focus(static_cast<GtkWidget*>((void*)_dt->canvas)); _upd_f = false; } |
