aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/interface-gtk.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/interface-gtk.cpp')
-rw-r--r--src/interface-gtk.cpp44
1 files changed, 29 insertions, 15 deletions
diff --git a/src/interface-gtk.cpp b/src/interface-gtk.cpp
index 3421d6f..e94c42c 100644
--- a/src/interface-gtk.cpp
+++ b/src/interface-gtk.cpp
@@ -253,20 +253,10 @@ scintilla_notify(ScintillaObject *sci, uptr_t idFrom,
interface.process_notify(notify);
}
-static gboolean
-cmdline_key_pressed(GtkWidget *widget, GdkEventKey *event,
- gpointer user_data)
+static inline void
+handle_key_press(bool is_shift, bool is_ctl, guint keyval)
{
- bool is_shift = event->state & GDK_SHIFT_MASK;
- bool is_ctl = event->state & GDK_CONTROL_MASK;
-
-#ifdef DEBUG
- g_printf("KEY \"%s\" (%d) SHIFT=%d CNTRL=%d\n",
- event->string, *event->string,
- event->state & GDK_SHIFT_MASK, event->state & GDK_CONTROL_MASK);
-#endif
-
- switch (event->keyval) {
+ switch (keyval) {
case GDK_Escape:
cmdline_keypress('\x1B');
break;
@@ -296,7 +286,7 @@ cmdline_key_pressed(GtkWidget *widget, GdkEventKey *event,
gchar macro_name[3+1];
g_snprintf(macro_name, sizeof(macro_name),
- "F%d", event->keyval - GDK_F1 + 1);
+ "F%d", keyval - GDK_F1 + 1);
cmdline_fnmacro(macro_name);
break;
}
@@ -316,7 +306,7 @@ cmdline_key_pressed(GtkWidget *widget, GdkEventKey *event,
* Control keys and keys with printable representation
*/
default:
- gunichar u = gdk_keyval_to_unicode(event->keyval);
+ gunichar u = gdk_keyval_to_unicode(keyval);
if (u && g_unichar_to_utf8(u, NULL) == 1) {
gchar key;
@@ -330,6 +320,30 @@ cmdline_key_pressed(GtkWidget *widget, GdkEventKey *event,
cmdline_keypress(key);
}
}
+}
+
+static gboolean
+cmdline_key_pressed(GtkWidget *widget, GdkEventKey *event,
+ gpointer user_data)
+{
+ bool is_shift = event->state & GDK_SHIFT_MASK;
+ bool is_ctl = event->state & GDK_CONTROL_MASK;
+
+#ifdef DEBUG
+ g_printf("KEY \"%s\" (%d) SHIFT=%d CNTRL=%d\n",
+ event->string, *event->string,
+ event->state & GDK_SHIFT_MASK, event->state & GDK_CONTROL_MASK);
+#endif
+
+ try {
+ handle_key_press(is_shift, is_ctl, event->keyval);
+ } catch (Quit) {
+ /*
+ * SciTECO should terminate, so we exit
+ * the main loop. event_loop() will return.
+ */
+ gtk_main_quit();
+ }
return TRUE;
}