[gedit] Bug 620435 - Show statusbar option menus on specific key presses



commit bc2d6de40966dd637d1ad5e30a47f081d2c4cda8
Author: Garrett Regier <alias301 gmail com>
Date:   Thu Jun 3 03:41:44 2010 -0700

    Bug 620435 - Show statusbar option menus on specific key presses

 gedit/gedit-status-combo-box.c |   62 +++++++++++++++++++++++++++++++--------
 1 files changed, 49 insertions(+), 13 deletions(-)
---
diff --git a/gedit/gedit-status-combo-box.c b/gedit/gedit-status-combo-box.c
index c0ea571..10ed49e 100644
--- a/gedit/gedit-status-combo-box.c
+++ b/gedit/gedit-status-combo-box.c
@@ -21,6 +21,8 @@
  */
 
 #include "gedit-status-combo-box.h"
+
+#include <gdk/gdkkeysyms.h>
 #include "gseal-gtk-compat.h"
 
 #define COMBO_BOX_TEXT_DATA "GeditStatusComboBoxTextData"
@@ -195,9 +197,9 @@ menu_position_func (GtkMenu		*menu,
 }
 
 static void
-button_press_event (GtkWidget           *widget,
-		    GdkEventButton      *event,
-		    GeditStatusComboBox *combo)
+show_menu (GeditStatusComboBox *combo,
+	   guint                button,
+	   guint32              time)
 {
 	GtkRequisition request;
 	gint max_height;
@@ -215,13 +217,13 @@ button_press_event (GtkWidget           *widget,
 		gtk_widget_set_size_request (gtk_widget_get_toplevel (combo->priv->menu), -1, max_height);
 	}
 	
-	gtk_menu_popup (GTK_MENU (combo->priv->menu), 
-			NULL, 
-			NULL, 
-			(GtkMenuPositionFunc)menu_position_func, 
-			combo, 
-			event->button, 
-			event->time);
+	gtk_menu_popup (GTK_MENU (combo->priv->menu),
+			NULL,
+			NULL,
+			(GtkMenuPositionFunc)menu_position_func,
+			combo,
+			button,
+			time);
 
 	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (combo->priv->button), TRUE);
 
@@ -232,6 +234,36 @@ button_press_event (GtkWidget           *widget,
 	}
 }
 
+static gboolean
+button_press_event (GtkWidget           *widget,
+		    GdkEventButton      *event,
+		    GeditStatusComboBox *combo)
+{
+	if (event->type == GDK_BUTTON_PRESS && event->button == 1)
+	{
+		show_menu (combo, event->button,event->time);
+		return TRUE;
+	}
+
+	return FALSE;
+}
+
+static gboolean
+key_press_event (GtkWidget           *widget,
+		 GdkEventKey         *event,
+		 GeditStatusComboBox *combo)
+{
+	if (event->keyval == GDK_Return || event->keyval == GDK_ISO_Enter ||
+	    event->keyval == GDK_KP_Enter || event->keyval == GDK_space ||
+	    event->keyval == GDK_KP_Space)
+	{
+		show_menu (combo, 0, event->time);
+		return TRUE;
+	}
+
+	return FALSE;
+}
+
 static void
 set_shadow_type (GeditStatusComboBox *combo)
 {
@@ -297,9 +329,13 @@ gedit_status_combo_box_init (GeditStatusComboBox *self)
 	self->priv->menu = gtk_menu_new ();
 	g_object_ref_sink (self->priv->menu);
 
-	g_signal_connect (self->priv->button, 
-			  "button-press-event", 
-			  G_CALLBACK (button_press_event), 
+	g_signal_connect (self->priv->button,
+			  "button-press-event",
+			  G_CALLBACK (button_press_event),
+			  self);
+	g_signal_connect (self->priv->button,
+			  "key-press-event",
+			  G_CALLBACK (key_press_event),
 			  self);
 	g_signal_connect (self->priv->menu,
 			  "deactivate",



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]