summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJiří Klimeš <jklimes@redhat.com>2015-03-30 15:34:44 +0200
committerJiří Klimeš <jklimes@redhat.com>2015-03-30 15:42:35 +0200
commit0bc3e5a226822b82440e0691385fdce015012b02 (patch)
tree83feffe47ce2d4a61105007d5fbd9b4ebd10e91c
parentbc7659c8915cff1e316e6da1c836f470904e62cb (diff)
downloadnetwork-manager-applet-0bc3e5a226822b82440e0691385fdce015012b02.tar.gz
editor: additional fix for navigation in address/route treeview (rh #1201412)
Make keypad keys (Enter, UpArrow, DownArrow) work properly. https://bugzilla.redhat.com/show_bug.cgi?id=1201412
-rw-r--r--src/connection-editor/ip4-routes-dialog.c25
-rw-r--r--src/connection-editor/ip6-routes-dialog.c25
-rw-r--r--src/connection-editor/page-ip4.c25
-rw-r--r--src/connection-editor/page-ip6.c25
4 files changed, 76 insertions, 24 deletions
diff --git a/src/connection-editor/ip4-routes-dialog.c b/src/connection-editor/ip4-routes-dialog.c
index c7ff6cc7..310b203e 100644
--- a/src/connection-editor/ip4-routes-dialog.c
+++ b/src/connection-editor/ip4-routes-dialog.c
@@ -507,13 +507,21 @@ key_pressed_cb (GtkWidget *widget, GdkEventKey *event, gpointer user_data)
modifiers = event->state & gtk_accelerator_get_default_mod_mask ();
/*
- * Tab should behave the same way as Enter (cycling on cells).
+ * Change some keys so that they work properly:
+ * We want:
+ * - Tab should behave the same way as Enter (cycling on cells),
+ * - Shift-Tab should move in backwards direction.
+ * - Down arrow moves as Enter, but we have to handle Down arrow on
+ * key pad.
+ * - Up arrow should move backwards and we also have to handle Up arrow
+ * on key pad.
+ * - Enter should end editing when pressed on last column.
*
- * Previously, we had finished cell editing, which appeared to work:
- * gtk_cell_editable_editing_done (GTK_CELL_EDITABLE (widget));
- * But unfortunately, it showed up crash occurred with XIM input (GTK_IM_MODULE=xim).
+ * Note: gtk_cell_editable_editing_done (GTK_CELL_EDITABLE (widget)) cannot be called
+ * in this function, because it would crash with XIM input (GTK_IM_MODULE=xim), see
* https://bugzilla.redhat.com/show_bug.cgi?id=747368
*/
+
if (event->keyval == GDK_KEY_Tab && modifiers == 0) {
/* Tab */
g_object_set_data (G_OBJECT (cell), DIRECTION_TAG, GINT_TO_POINTER (1));
@@ -522,9 +530,14 @@ key_pressed_cb (GtkWidget *widget, GdkEventKey *event, gpointer user_data)
/* Shift-Tab */
g_object_set_data (G_OBJECT (cell), DIRECTION_TAG, GINT_TO_POINTER (-1));
utils_fake_return_key (event);
- } else if (event->keyval == GDK_KEY_Up)
+ } else if (event->keyval == GDK_KEY_KP_Down)
+ event->keyval = GDK_KEY_Down;
+ else if (event->keyval == GDK_KEY_Up || event->keyval == GDK_KEY_KP_Up) {
+ event->keyval = GDK_KEY_Up;
g_object_set_data (G_OBJECT (cell), DIRECTION_TAG, GINT_TO_POINTER (-1));
- else if (event->keyval == GDK_KEY_Return || event->keyval == GDK_KEY_ISO_Enter)
+ } else if ( event->keyval == GDK_KEY_Return
+ || event->keyval == GDK_KEY_ISO_Enter
+ || event->keyval == GDK_KEY_KP_Enter)
g_object_set_data (G_OBJECT (cell), DO_NOT_CYCLE_TAG, GUINT_TO_POINTER (TRUE));
return FALSE; /* Allow default handler to be called */
diff --git a/src/connection-editor/ip6-routes-dialog.c b/src/connection-editor/ip6-routes-dialog.c
index b7e48f2c..2c830a7b 100644
--- a/src/connection-editor/ip6-routes-dialog.c
+++ b/src/connection-editor/ip6-routes-dialog.c
@@ -452,13 +452,21 @@ key_pressed_cb (GtkWidget *widget, GdkEventKey *event, gpointer user_data)
modifiers = event->state & gtk_accelerator_get_default_mod_mask ();
/*
- * Tab should behave the same way as Enter (cycling on cells).
+ * Change some keys so that they work properly:
+ * We want:
+ * - Tab should behave the same way as Enter (cycling on cells),
+ * - Shift-Tab should move in backwards direction.
+ * - Down arrow moves as Enter, but we have to handle Down arrow on
+ * key pad.
+ * - Up arrow should move backwards and we also have to handle Up arrow
+ * on key pad.
+ * - Enter should end editing when pressed on last column.
*
- * Previously, we had finished cell editing, which appeared to work:
- * gtk_cell_editable_editing_done (GTK_CELL_EDITABLE (widget));
- * But unfortunately, it showed up crash occurred with XIM input (GTK_IM_MODULE=xim).
+ * Note: gtk_cell_editable_editing_done (GTK_CELL_EDITABLE (widget)) cannot be called
+ * in this function, because it would crash with XIM input (GTK_IM_MODULE=xim), see
* https://bugzilla.redhat.com/show_bug.cgi?id=747368
*/
+
if (event->keyval == GDK_KEY_Tab && modifiers == 0) {
/* Tab */
g_object_set_data (G_OBJECT (cell), DIRECTION_TAG, GINT_TO_POINTER (1));
@@ -467,9 +475,14 @@ key_pressed_cb (GtkWidget *widget, GdkEventKey *event, gpointer user_data)
/* Shift-Tab */
g_object_set_data (G_OBJECT (cell), DIRECTION_TAG, GINT_TO_POINTER (-1));
utils_fake_return_key (event);
- } else if (event->keyval == GDK_KEY_Up)
+ } else if (event->keyval == GDK_KEY_KP_Down)
+ event->keyval = GDK_KEY_Down;
+ else if (event->keyval == GDK_KEY_Up || event->keyval == GDK_KEY_KP_Up) {
+ event->keyval = GDK_KEY_Up;
g_object_set_data (G_OBJECT (cell), DIRECTION_TAG, GINT_TO_POINTER (-1));
- else if (event->keyval == GDK_KEY_Return || event->keyval == GDK_KEY_ISO_Enter)
+ } else if ( event->keyval == GDK_KEY_Return
+ || event->keyval == GDK_KEY_ISO_Enter
+ || event->keyval == GDK_KEY_KP_Enter)
g_object_set_data (G_OBJECT (cell), DO_NOT_CYCLE_TAG, GUINT_TO_POINTER (TRUE));
return FALSE; /* Allow default handler to be called */
diff --git a/src/connection-editor/page-ip4.c b/src/connection-editor/page-ip4.c
index f4c24bb5..a6ec7152 100644
--- a/src/connection-editor/page-ip4.c
+++ b/src/connection-editor/page-ip4.c
@@ -766,13 +766,21 @@ key_pressed_cb (GtkWidget *widget, GdkEventKey *event, gpointer user_data)
modifiers = event->state & gtk_accelerator_get_default_mod_mask ();
/*
- * Tab should behave the same way as Enter (cycling on cells).
+ * Change some keys so that they work properly:
+ * We want:
+ * - Tab should behave the same way as Enter (cycling on cells),
+ * - Shift-Tab should move in backwards direction.
+ * - Down arrow moves as Enter, but we have to handle Down arrow on
+ * key pad.
+ * - Up arrow should move backwards and we also have to handle Up arrow
+ * on key pad.
+ * - Enter should end editing when pressed on last column.
*
- * Previously, we had finished cell editing, which appeared to work:
- * gtk_cell_editable_editing_done (GTK_CELL_EDITABLE (widget));
- * But unfortunately, it showed up crash occurred with XIM input (GTK_IM_MODULE=xim).
+ * Note: gtk_cell_editable_editing_done (GTK_CELL_EDITABLE (widget)) cannot be called
+ * in this function, because it would crash with XIM input (GTK_IM_MODULE=xim), see
* https://bugzilla.redhat.com/show_bug.cgi?id=747368
*/
+
if (event->keyval == GDK_KEY_Tab && modifiers == 0) {
/* Tab */
g_object_set_data (G_OBJECT (cell), DIRECTION_TAG, GINT_TO_POINTER (1));
@@ -781,9 +789,14 @@ key_pressed_cb (GtkWidget *widget, GdkEventKey *event, gpointer user_data)
/* Shift-Tab */
g_object_set_data (G_OBJECT (cell), DIRECTION_TAG, GINT_TO_POINTER (-1));
utils_fake_return_key (event);
- } else if (event->keyval == GDK_KEY_Up)
+ } else if (event->keyval == GDK_KEY_KP_Down)
+ event->keyval = GDK_KEY_Down;
+ else if (event->keyval == GDK_KEY_Up || event->keyval == GDK_KEY_KP_Up) {
+ event->keyval = GDK_KEY_Up;
g_object_set_data (G_OBJECT (cell), DIRECTION_TAG, GINT_TO_POINTER (-1));
- else if (event->keyval == GDK_KEY_Return || event->keyval == GDK_KEY_ISO_Enter)
+ } else if ( event->keyval == GDK_KEY_Return
+ || event->keyval == GDK_KEY_ISO_Enter
+ || event->keyval == GDK_KEY_KP_Enter)
g_object_set_data (G_OBJECT (cell), DO_NOT_CYCLE_TAG, GUINT_TO_POINTER (TRUE));
return FALSE; /* Allow default handler to be called */
diff --git a/src/connection-editor/page-ip6.c b/src/connection-editor/page-ip6.c
index 0d79589b..35ef7131 100644
--- a/src/connection-editor/page-ip6.c
+++ b/src/connection-editor/page-ip6.c
@@ -762,13 +762,21 @@ key_pressed_cb (GtkWidget *widget, GdkEventKey *event, gpointer user_data)
modifiers = event->state & gtk_accelerator_get_default_mod_mask ();
/*
- * Tab should behave the same way as Enter (cycling on cells).
+ * Change some keys so that they work properly:
+ * We want:
+ * - Tab should behave the same way as Enter (cycling on cells),
+ * - Shift-Tab should move in backwards direction.
+ * - Down arrow moves as Enter, but we have to handle Down arrow on
+ * key pad.
+ * - Up arrow should move backwards and we also have to handle Up arrow
+ * on key pad.
+ * - Enter should end editing when pressed on last column.
*
- * Previously, we had finished cell editing, which appeared to work:
- * gtk_cell_editable_editing_done (GTK_CELL_EDITABLE (widget));
- * But unfortunately, it showed up crash occurred with XIM input (GTK_IM_MODULE=xim).
+ * Note: gtk_cell_editable_editing_done (GTK_CELL_EDITABLE (widget)) cannot be called
+ * in this function, because it would crash with XIM input (GTK_IM_MODULE=xim), see
* https://bugzilla.redhat.com/show_bug.cgi?id=747368
*/
+
if (event->keyval == GDK_KEY_Tab && modifiers == 0) {
/* Tab */
g_object_set_data (G_OBJECT (cell), DIRECTION_TAG, GINT_TO_POINTER (1));
@@ -777,9 +785,14 @@ key_pressed_cb (GtkWidget *widget, GdkEventKey *event, gpointer user_data)
/* Shift-Tab */
g_object_set_data (G_OBJECT (cell), DIRECTION_TAG, GINT_TO_POINTER (-1));
utils_fake_return_key (event);
- } else if (event->keyval == GDK_KEY_Up)
+ } else if (event->keyval == GDK_KEY_KP_Down)
+ event->keyval = GDK_KEY_Down;
+ else if (event->keyval == GDK_KEY_Up || event->keyval == GDK_KEY_KP_Up) {
+ event->keyval = GDK_KEY_Up;
g_object_set_data (G_OBJECT (cell), DIRECTION_TAG, GINT_TO_POINTER (-1));
- else if (event->keyval == GDK_KEY_Return || event->keyval == GDK_KEY_ISO_Enter)
+ } else if ( event->keyval == GDK_KEY_Return
+ || event->keyval == GDK_KEY_ISO_Enter
+ || event->keyval == GDK_KEY_KP_Enter)
g_object_set_data (G_OBJECT (cell), DO_NOT_CYCLE_TAG, GUINT_TO_POINTER (TRUE));
return FALSE; /* Allow default handler to be called */