Author: post
Date: 2011-03-16 19:08:17 +0100 (Wed, 16 Mar 2011)
New Revision: 3885
Modified:
trunk/src/gtk-helper.c
Log:
Also enable use of num pad for prioritizing.
Modified: trunk/src/gtk-helper.c
===================================================================
--- trunk/src/gtk-helper.c 2011-03-16 18:06:48 UTC (rev 3884)
+++ trunk/src/gtk-helper.c 2011-03-16 18:08:17 UTC (rev 3885)
@@ -310,6 +310,40 @@
rs_block_keyboard = block_keyboard;
}
+static GdkEventKey*
+replace_key_events(const GdkEventKey *in)
+{
+ GdkEventKey *out = g_memdup(in, sizeof(GdkEventKey));
+
+ static guint one_keyval = 0;
+ static guint one_hardware = 0;
+ if (!one_keyval)
+ {
+ one_keyval = gdk_keyval_from_name("1");
+ GdkKeymapKey *keys;
+ gint n_keys;
+ if (gdk_keymap_get_entries_for_keyval(gdk_keymap_get_default(),
one_keyval, &keys, &n_keys))
+ {
+ one_hardware = keys[0].keycode;
+ }
+ }
+
+ /* Replace 'Num-*' with '*' */
+ if (in->keyval == 65450)
+ {
+ /* TODO: Find some way to figure that out, since state is often
different */
+ }
+
+ /* Replace Numpad 1,2,3 with ordinary numbers */
+ if (in->keyval >= 65457 && in->keyval <= 65459)
+ {
+ out->keyval = one_keyval+(in->keyval-65457);
+ out->hardware_keycode = one_hardware+(in->keyval-65457);
+ }
+
+ return out;
+}
+
/* copied verbatim from Gimp: app/widgets/gimpdock.c */
gboolean
window_key_press_event (GtkWidget *widget,
@@ -336,18 +370,21 @@
if (! handled && G_UNLIKELY (GTK_IS_EDITABLE (focus) || GTK_IS_TEXT_VIEW
(focus)))
handled = gtk_window_propagate_key_event (window, event);
+ GdkEventKey *new_event = replace_key_events(event);
+
/* invoke focus widget handlers */
if (! handled)
- handled = gtk_window_propagate_key_event (window, event);
+ handled = gtk_window_propagate_key_event (window, new_event);
/* invoke non-(control/alt) accelerators */
- if (! handled && ! (event->state & (GDK_CONTROL_MASK | GDK_MOD1_MASK)))
- handled = gtk_window_activate_key (window, event);
+ if (! handled && ! (new_event->state & (GDK_CONTROL_MASK | GDK_MOD1_MASK)))
+ handled = gtk_window_activate_key (window, new_event);
/* chain up, bypassing gtk_window_key_press(), to invoke binding set */
if (! handled)
- handled = GTK_WIDGET_CLASS (g_type_class_peek (g_type_parent
(GTK_TYPE_WINDOW)))->key_press_event (widget, event);
+ handled = GTK_WIDGET_CLASS (g_type_class_peek (g_type_parent
(GTK_TYPE_WINDOW)))->key_press_event (widget, new_event);
+ g_free(new_event);
return handled;
}
_______________________________________________
Rawstudio-commit mailing list
[email protected]
http://rawstudio.org/cgi-bin/mailman/listinfo/rawstudio-commit