summaryrefslogtreecommitdiffstats
path: root/src/ui
diff options
context:
space:
mode:
authorDenis Declara <declara91@gmail.com>2012-04-15 12:29:45 +0000
committerDenis Declara <declara91@gmail.com>2012-04-15 12:29:45 +0000
commit6b5ff661a46ea1779c86f6947006c5ed32926117 (patch)
treea5b170f0830854e99ad065055ee2a3996933e614 /src/ui
parentImproved User interface. (diff)
parenti18n. Fix for Bug #980518 (Please use c-format). (diff)
downloadinkscape-6b5ff661a46ea1779c86f6947006c5ed32926117.tar.gz
inkscape-6b5ff661a46ea1779c86f6947006c5ed32926117.zip
Trunk merge
(bzr r11073.1.15)
Diffstat (limited to 'src/ui')
-rw-r--r--src/ui/CMakeLists.txt2
-rw-r--r--src/ui/Makefile_insert2
-rw-r--r--src/ui/clipboard.cpp185
-rw-r--r--src/ui/context-menu.cpp693
-rw-r--r--src/ui/context-menu.h36
-rw-r--r--src/ui/dialog/aboutbox.cpp4
-rw-r--r--src/ui/dialog/align-and-distribute.cpp45
-rw-r--r--src/ui/dialog/align-and-distribute.h25
-rw-r--r--src/ui/dialog/clonetiler.cpp75
-rw-r--r--src/ui/dialog/export.cpp128
-rw-r--r--src/ui/dialog/export.h6
-rw-r--r--src/ui/dialog/filedialogimpl-gtkmm.cpp2
-rw-r--r--src/ui/dialog/filedialogimpl-win32.cpp4
-rw-r--r--src/ui/dialog/filter-effects-dialog.cpp86
-rw-r--r--src/ui/dialog/find.cpp4
-rw-r--r--src/ui/dialog/inkscape-preferences.cpp58
-rw-r--r--src/ui/dialog/layers.h4
-rw-r--r--src/ui/dialog/livepatheffect-editor.cpp105
-rw-r--r--src/ui/dialog/livepatheffect-editor.h4
-rw-r--r--src/ui/dialog/ocaldialogs.cpp30
-rw-r--r--src/ui/dialog/ocaldialogs.h2
-rw-r--r--src/ui/dialog/spellcheck.h4
-rw-r--r--src/ui/dialog/swatches.cpp10
-rw-r--r--src/ui/dialog/swatches.h3
-rw-r--r--src/ui/dialog/text-edit.cpp4
-rw-r--r--src/ui/dialog/xml-tree.cpp215
-rw-r--r--src/ui/dialog/xml-tree.h13
-rw-r--r--src/ui/previewfillable.h3
-rw-r--r--src/ui/previewholder.cpp24
-rw-r--r--src/ui/previewholder.h5
-rw-r--r--src/ui/tool/control-point-selection.cpp149
-rw-r--r--src/ui/tool/control-point.cpp26
-rw-r--r--src/ui/tool/control-point.h11
-rw-r--r--src/ui/tool/curve-drag-point.cpp2
-rw-r--r--src/ui/tool/event-utils.cpp90
-rw-r--r--src/ui/tool/modifier-tracker.cpp91
-rw-r--r--src/ui/tool/multi-path-manipulator.cpp179
-rw-r--r--src/ui/tool/node-tool.cpp18
-rw-r--r--src/ui/tool/node.cpp21
-rw-r--r--src/ui/tool/path-manipulator.cpp2
-rw-r--r--src/ui/tool/selectable-control-point.cpp4
-rw-r--r--src/ui/tool/selectable-control-point.h4
-rw-r--r--src/ui/tool/selector.cpp8
-rw-r--r--src/ui/tool/transform-handle-set.cpp26
-rw-r--r--src/ui/tool/transform-handle-set.h3
-rw-r--r--src/ui/widget/dock-item.h4
-rw-r--r--src/ui/widget/panel.cpp8
-rw-r--r--src/ui/widget/panel.h7
-rw-r--r--src/ui/widget/registered-widget.h4
-rw-r--r--src/ui/widget/selected-style.cpp12
-rw-r--r--src/ui/widget/spinbutton.cpp12
-rw-r--r--src/ui/widget/style-swatch.cpp4
-rw-r--r--src/ui/widget/zoom-status.cpp2
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(),
&center_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;
}