summaryrefslogtreecommitdiffstats
path: root/src/event-context.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/event-context.cpp')
-rw-r--r--src/event-context.cpp183
1 files changed, 140 insertions, 43 deletions
diff --git a/src/event-context.cpp b/src/event-context.cpp
index 0cfa18f57..db7b29640 100644
--- a/src/event-context.cpp
+++ b/src/event-context.cpp
@@ -6,8 +6,9 @@
* Frank Felfe <innerspace@iname.com>
* bulia byak <buliabyak@users.sf.net>
* Jon A. Cruz <jon@joncruz.org>
+ * Kris De Gussem <Kris.DeGussem@gmail.com>
*
- * Copyright (C) 1999-2010 authors
+ * Copyright (C) 1999-2012 authors
* Copyright (C) 2001-2002 Ximian, Inc.
*
* Released under GNU GPL, read the file 'COPYING' for more information
@@ -63,6 +64,93 @@
#include "sp-guide.h"
#include "color.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_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_d 0x064
+#define GDK_KEY_D 0x044
+#define GDK_KEY_g 0x067
+#define GDK_KEY_G 0x047
+#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_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_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
+
static void sp_event_context_class_init(SPEventContextClass *klass);
static void sp_event_context_init(SPEventContext *event_context);
static void sp_event_context_dispose(GObject *object);
@@ -157,7 +245,11 @@ static void sp_event_context_dispose(GObject *object) {
}
if (ec->cursor != NULL) {
+#if GTK_CHECK_VERSION(3,0,0)
+ g_object_unref(ec->cursor);
+#else
gdk_cursor_unref(ec->cursor);
+#endif
ec->cursor = NULL;
}
@@ -203,7 +295,11 @@ void sp_event_context_update_cursor(SPEventContext *ec) {
);
if (pixbuf != NULL) {
if (ec->cursor)
+#if GTK_CHECK_VERSION(3,0,0)
+ g_object_unref(ec->cursor);
+#else
gdk_cursor_unref(ec->cursor);
+#endif
ec->cursor = gdk_cursor_new_from_pixbuf(display, pixbuf, ec->hot_x, ec->hot_y);
g_object_unref(pixbuf);
}
@@ -213,7 +309,11 @@ void sp_event_context_update_cursor(SPEventContext *ec) {
sp_cursor_bitmap_and_mask_from_xpm(&bitmap, &mask, ec->cursor_shape);
if ((bitmap != NULL) && (mask != NULL)) {
if (ec->cursor)
+#if GTK_CHECK_VERSION(3,0,0)
+ g_object_unref(ec->cursor);
+#else
gdk_cursor_unref(ec->cursor);
+#endif
ec->cursor = gdk_cursor_new_from_pixmap(bitmap, mask,
&style->black, &style->white, ec->hot_x,
ec->hot_y);
@@ -545,9 +645,9 @@ static gint sp_event_context_private_root_handler(
// 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:
+ case GDK_KEY_Tab:
+ case GDK_KEY_ISO_Left_Tab:
+ case GDK_KEY_F1:
shortcut = get_group0_keyval(&event->key);
if (event->key.state & GDK_SHIFT_MASK)
shortcut |= SP_SHORTCUT_SHIFT_MASK;
@@ -558,15 +658,15 @@ static gint sp_event_context_private_root_handler(
ret = sp_shortcut_invoke(shortcut, desktop);
break;
- case GDK_D:
- case GDK_d:
+ case GDK_KEY_D:
+ case GDK_KEY_d:
if (!MOD__SHIFT && !MOD__CTRL && !MOD__ALT) {
sp_toggle_dropper(desktop);
ret = TRUE;
}
break;
- case GDK_Q:
- case GDK_q:
+ case GDK_KEY_Q:
+ case GDK_KEY_q:
if (desktop->quick_zoomed()) {
ret = TRUE;
}
@@ -575,18 +675,18 @@ static gint sp_event_context_private_root_handler(
ret = TRUE;
}
break;
- case GDK_W:
- case GDK_w:
- case GDK_F4:
+ case GDK_KEY_W:
+ case GDK_KEY_w:
+ case GDK_KEY_F4:
/* Close view */
if (MOD__CTRL_ONLY) {
sp_ui_close_view(NULL);
ret = TRUE;
}
break;
- case GDK_Left: // Ctrl Left
- case GDK_KP_Left:
- case GDK_KP_4:
+ case GDK_KEY_Left: // Ctrl Left
+ case GDK_KEY_KP_Left:
+ case GDK_KEY_KP_4:
if (MOD__CTRL_ONLY) {
int i = (int) floor(key_scroll * accelerate_scroll(event,
acceleration, sp_desktop_canvas(desktop)));
@@ -595,9 +695,9 @@ static gint sp_event_context_private_root_handler(
ret = TRUE;
}
break;
- case GDK_Up: // Ctrl Up
- case GDK_KP_Up:
- case GDK_KP_8:
+ case GDK_KEY_Up: // Ctrl Up
+ case GDK_KEY_KP_Up:
+ case GDK_KEY_KP_8:
if (MOD__CTRL_ONLY) {
int i = (int) floor(key_scroll * accelerate_scroll(event,
acceleration, sp_desktop_canvas(desktop)));
@@ -606,9 +706,9 @@ static gint sp_event_context_private_root_handler(
ret = TRUE;
}
break;
- case GDK_Right: // Ctrl Right
- case GDK_KP_Right:
- case GDK_KP_6:
+ case GDK_KEY_Right: // Ctrl Right
+ case GDK_KEY_KP_Right:
+ case GDK_KEY_KP_6:
if (MOD__CTRL_ONLY) {
int i = (int) floor(key_scroll * accelerate_scroll(event,
acceleration, sp_desktop_canvas(desktop)));
@@ -617,9 +717,9 @@ static gint sp_event_context_private_root_handler(
ret = TRUE;
}
break;
- case GDK_Down: // Ctrl Down
- case GDK_KP_Down:
- case GDK_KP_2:
+ case GDK_KEY_Down: // Ctrl Down
+ case GDK_KEY_KP_Down:
+ case GDK_KEY_KP_2:
if (MOD__CTRL_ONLY) {
int i = (int) floor(key_scroll * accelerate_scroll(event,
acceleration, sp_desktop_canvas(desktop)));
@@ -628,13 +728,13 @@ static gint sp_event_context_private_root_handler(
ret = TRUE;
}
break;
- case GDK_F10:
+ case GDK_KEY_F10:
if (MOD__SHIFT_ONLY) {
sp_event_root_menu_popup(desktop, NULL, event);
ret = TRUE;
}
break;
- case GDK_space:
+ case GDK_KEY_space:
if (prefs->getBool("/options/spacepans/value")) {
event_context->space_panning = true;
event_context->_message_context->set(Inkscape::INFORMATION_MESSAGE,
@@ -645,8 +745,8 @@ static gint sp_event_context_private_root_handler(
ret = TRUE;
}
break;
- case GDK_z:
- case GDK_Z:
+ case GDK_KEY_z:
+ case GDK_KEY_Z:
if (MOD__ALT_ONLY) {
desktop->zoom_grab_focus();
ret = TRUE;
@@ -659,7 +759,7 @@ static gint sp_event_context_private_root_handler(
break;
case GDK_KEY_RELEASE:
switch (get_group0_keyval(&event->key)) {
- case GDK_space:
+ case GDK_KEY_space:
if (event_context->space_panning) {
event_context->space_panning = false;
event_context->_message_context->clear();
@@ -672,8 +772,8 @@ static gint sp_event_context_private_root_handler(
ret = TRUE;
}
break;
- case GDK_Q:
- case GDK_q:
+ case GDK_KEY_Q:
+ case GDK_KEY_q:
if (desktop->quick_zoomed()) {
desktop->zoom_quick(false);
ret = TRUE;
@@ -1034,22 +1134,19 @@ static void set_event_location(SPDesktop *desktop, GdkEvent *event) {
* Create popup menu and tell Gtk to show it.
*/
void sp_event_root_menu_popup(SPDesktop *desktop, SPItem *item, GdkEvent *event) {
- GtkWidget *menu;
-
/* fixme: This is not what I want but works for now (Lauris) */
if (event->type == GDK_KEY_PRESS) {
item = sp_desktop_selection(desktop)->singleItem();
}
- menu = sp_ui_context_menu(desktop, item);
- gtk_widget_show(menu);
+ ContextMenu* CM = new ContextMenu(desktop, item);
+ CM->show();
switch (event->type) {
case GDK_BUTTON_PRESS:
- gtk_menu_popup(GTK_MENU(menu), NULL, NULL, 0, NULL,
- event->button.button, event->button.time);
+ CM->popup(event->button.button, event->button.time);
break;
case GDK_KEY_PRESS:
- gtk_menu_popup(GTK_MENU(menu), NULL, NULL, 0, NULL, 0, event->key.time);
+ CM->popup(0, event->key.time);
break;
default:
break;
@@ -1064,12 +1161,12 @@ void sp_event_show_modifier_tip(Inkscape::MessageContext *message_context,
gchar const *alt_tip) {
guint keyval = get_group0_keyval(&event->key);
- bool ctrl = ctrl_tip && (MOD__CTRL || (keyval == GDK_Control_L) || (keyval
- == GDK_Control_R));
- bool shift = shift_tip && (MOD__SHIFT || (keyval == GDK_Shift_L) || (keyval
- == GDK_Shift_R));
- bool alt = alt_tip && (MOD__ALT || (keyval == GDK_Alt_L) || (keyval
- == GDK_Alt_R) || (keyval == GDK_Meta_L) || (keyval == GDK_Meta_R));
+ bool ctrl = ctrl_tip && (MOD__CTRL || (keyval == GDK_KEY_Control_L) || (keyval
+ == GDK_KEY_Control_R));
+ bool shift = shift_tip && (MOD__SHIFT || (keyval == GDK_KEY_Shift_L) || (keyval
+ == GDK_KEY_Shift_R));
+ bool alt = alt_tip && (MOD__ALT || (keyval == GDK_KEY_Alt_L) || (keyval
+ == GDK_KEY_Alt_R) || (keyval == GDK_KEY_Meta_L) || (keyval == GDK_KEY_Meta_R));
gchar *tip = g_strdup_printf("%s%s%s%s%s", (ctrl ? ctrl_tip : ""), (ctrl
&& (shift || alt) ? "; " : ""), (shift ? shift_tip : ""), ((ctrl