summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorbulia byak <buliabyak@gmail.com>2006-11-06 05:46:26 +0000
committerbuliabyak <buliabyak@users.sourceforge.net>2006-11-06 05:46:26 +0000
commit1d1b9701b789111337d30e7eebb5295ef68f5094 (patch)
tree9aa09808d1a7bb03ce154f1885d08454069208de /src
parentfix key names; match above/below to select next/prev (diff)
downloadinkscape-1d1b9701b789111337d30e7eebb5295ef68f5094.tar.gz
inkscape-1d1b9701b789111337d30e7eebb5295ef68f5094.zip
implement select next/prev as verbs
(bzr r1917)
Diffstat (limited to 'src')
-rw-r--r--src/event-context.cpp22
-rw-r--r--src/node-context.cpp12
-rw-r--r--src/select-context.cpp12
-rw-r--r--src/verbs.cpp21
-rw-r--r--src/verbs.h2
5 files changed, 27 insertions, 42 deletions
diff --git a/src/event-context.cpp b/src/event-context.cpp
index 42557abdc..47447e6a0 100644
--- a/src/event-context.cpp
+++ b/src/event-context.cpp
@@ -479,9 +479,13 @@ static gint sp_event_context_private_root_handler(SPEventContext *event_context,
break;
case GDK_KEY_PRESS:
switch (get_group0_keyval(&event->key)) {
+ // GDK insists on stealing these keys (F1 for no idea what, tab for cycling widgets
+ // in the editing window). So we resteal them back and run our regular shortcut
+ // invoker on them.
unsigned int shortcut;
+ case GDK_Tab:
+ case GDK_ISO_Left_Tab:
case GDK_F1:
- /* Grab it away from Gtk */
shortcut = get_group0_keyval(&event->key);
if (event->key.state & GDK_SHIFT_MASK)
shortcut |= SP_SHORTCUT_SHIFT_MASK;
@@ -492,22 +496,6 @@ static gint sp_event_context_private_root_handler(SPEventContext *event_context,
ret = sp_shortcut_invoke(shortcut, desktop);
break;
- case GDK_Tab: // disable tab/shift-tab which cycle widget focus
- case GDK_ISO_Left_Tab: // they will get different functions
- if (!(MOD__CTRL_ONLY || (MOD__CTRL && MOD__SHIFT))) {
- ret = TRUE;
- } else {
- /* Grab it away from Gtk */
- shortcut = get_group0_keyval(&event->key);
- if (event->key.state & GDK_SHIFT_MASK)
- shortcut |= SP_SHORTCUT_SHIFT_MASK;
- if (event->key.state & GDK_CONTROL_MASK)
- shortcut |= SP_SHORTCUT_CONTROL_MASK;
- if (event->key.state & GDK_MOD1_MASK)
- shortcut |= SP_SHORTCUT_ALT_MASK;
- ret = sp_shortcut_invoke(shortcut, desktop);
- }
- break;
case GDK_W:
case GDK_w:
case GDK_F4:
diff --git a/src/node-context.cpp b/src/node-context.cpp
index e6ea78c62..439848d52 100644
--- a/src/node-context.cpp
+++ b/src/node-context.cpp
@@ -812,18 +812,6 @@ sp_node_context_root_handler(SPEventContext *event_context, GdkEvent *event)
ret = TRUE;
}
break;
- case GDK_Tab: // Tab - cycle selection forward
- if (!(MOD__CTRL_ONLY || (MOD__CTRL && MOD__SHIFT))) {
- sp_nodepath_select_next(nc->nodepath);
- ret = TRUE;
- }
- break;
- case GDK_ISO_Left_Tab: // Shift Tab - cycle selection backward
- if (!(MOD__CTRL_ONLY || (MOD__CTRL && MOD__SHIFT))) {
- sp_nodepath_select_prev(nc->nodepath);
- ret = TRUE;
- }
- break;
case GDK_Escape:
{
NR::Maybe<NR::Rect> const b = Inkscape::Rubberband::get()->getRectangle();
diff --git a/src/select-context.cpp b/src/select-context.cpp
index 35b1aded5..96a9f741b 100644
--- a/src/select-context.cpp
+++ b/src/select-context.cpp
@@ -736,18 +736,6 @@ sp_select_context_root_handler(SPEventContext *event_context, GdkEvent *event)
ret = TRUE;
}
break;
- case GDK_Tab: // Tab - cycle selection forward
- if (!(MOD__CTRL_ONLY || (MOD__CTRL && MOD__SHIFT))) {
- sp_selection_item_next();
- ret = TRUE;
- }
- break;
- case GDK_ISO_Left_Tab: // Shift Tab - cycle selection backward
- if (!(MOD__CTRL_ONLY || (MOD__CTRL && MOD__SHIFT))) {
- sp_selection_item_prev();
- ret = TRUE;
- }
- break;
case GDK_space:
/* stamping mode: show outline mode moving */
/* FIXME: Is next condition ok? (lauris) */
diff --git a/src/verbs.cpp b/src/verbs.cpp
index da843bbe8..1495c1f9e 100644
--- a/src/verbs.cpp
+++ b/src/verbs.cpp
@@ -846,7 +846,6 @@ EditVerb::perform(SPAction *action, void *data, void *pdata)
SPDesktop *dt = static_cast<SPDesktop*>(sp_action_get_view(action));
if (!dt)
return;
-
SPEventContext *ec = dt->event_context;
switch (reinterpret_cast<std::size_t>(data)) {
@@ -941,6 +940,22 @@ EditVerb::perform(SPAction *action, void *data, void *pdata)
sp_edit_invert_in_all_layers();
}
break;
+
+ case SP_VERB_EDIT_SELECT_NEXT:
+ if (tools_isactive(dt, TOOLS_NODES)) {
+ sp_nodepath_select_next(SP_NODE_CONTEXT(ec)->nodepath);
+ } else {
+ sp_selection_item_next();
+ }
+ break;
+ case SP_VERB_EDIT_SELECT_PREV:
+ if (tools_isactive(dt, TOOLS_NODES)) {
+ sp_nodepath_select_prev(SP_NODE_CONTEXT(ec)->nodepath);
+ } else {
+ sp_selection_item_prev();
+ }
+ break;
+
case SP_VERB_EDIT_DESELECT:
if (tools_isactive(dt, TOOLS_NODES)) {
sp_nodepath_deselect(SP_NODE_CONTEXT(ec)->nodepath);
@@ -2027,6 +2042,10 @@ Verb *Verb::_base_verbs[] = {
N_("Invert selection (unselect what is selected and select everything else)"), "selection_invert"),
new EditVerb(SP_VERB_EDIT_INVERT_IN_ALL_LAYERS, "EditInvertInAllLayers", N_("Invert in All Layers"),
N_("Invert selection in all visible and unlocked layers"), NULL),
+ new EditVerb(SP_VERB_EDIT_SELECT_NEXT, "EditSelectNext", N_("Select Next"),
+ N_("Select next object or node"), NULL),
+ new EditVerb(SP_VERB_EDIT_SELECT_PREV, "EditSelectPrev", N_("Select Previous"),
+ N_("Select previous object or node"), NULL),
new EditVerb(SP_VERB_EDIT_DESELECT, "EditDeselect", N_("D_eselect"),
N_("Deselect any selected objects or nodes"), "selection_deselect"),
diff --git a/src/verbs.h b/src/verbs.h
index f20806c02..7567deefa 100644
--- a/src/verbs.h
+++ b/src/verbs.h
@@ -71,6 +71,8 @@ enum {
SP_VERB_EDIT_SELECT_ALL_IN_ALL_LAYERS,
SP_VERB_EDIT_INVERT,
SP_VERB_EDIT_INVERT_IN_ALL_LAYERS,
+ SP_VERB_EDIT_SELECT_NEXT,
+ SP_VERB_EDIT_SELECT_PREV,
SP_VERB_EDIT_DESELECT,
/* Selection */
SP_VERB_SELECTION_TO_FRONT,