comparison pidgin/gtkdocklet-x11.c @ 27177:211b59ac6345

Apply patch that adds support for keyboard navigation for the status icon. Fixes #6515.
author Elliott Sales de Andrade <qulogic@pidgin.im>
date Wed, 10 Jun 2009 03:40:27 +0000
parents 584063555949
children 48ea900ee72a
comparison
equal deleted inserted replaced
27176:db373b572015 27177:211b59ac6345
30 30
31 #include "gtkdialogs.h" 31 #include "gtkdialogs.h"
32 32
33 #include "eggtrayicon.h" 33 #include "eggtrayicon.h"
34 #include "gtkdocklet.h" 34 #include "gtkdocklet.h"
35 #include <gdk/gdkkeysyms.h>
35 36
36 #define SHORT_EMBED_TIMEOUT 5000 37 #define SHORT_EMBED_TIMEOUT 5000
37 #define LONG_EMBED_TIMEOUT 15000 38 #define LONG_EMBED_TIMEOUT 15000
38 39
39 /* globals */ 40 /* globals */
85 if (event->type != GDK_BUTTON_PRESS) 86 if (event->type != GDK_BUTTON_PRESS)
86 return FALSE; 87 return FALSE;
87 88
88 pidgin_docklet_clicked(event->button); 89 pidgin_docklet_clicked(event->button);
89 return TRUE; 90 return TRUE;
91 }
92
93 static gboolean
94 docklet_x11_pressed_cb(GtkWidget *button, GdkEventKey *event)
95 {
96 guint state, keyval;
97
98 state = event->state & gtk_accelerator_get_default_mod_mask();
99 keyval = event->keyval;
100 if (state == 0 &&
101 (keyval == GDK_Return ||
102 keyval == GDK_KP_Enter ||
103 keyval == GDK_ISO_Enter ||
104 keyval == GDK_space ||
105 keyval == GDK_KP_Space))
106 {
107 pidgin_docklet_clicked(1);
108 return TRUE;
109 }
110
111 return FALSE;
112 }
113
114 static void
115 docklet_x11_popup_cb(GtkWidget *button)
116 {
117 pidgin_docklet_clicked(3);
90 } 118 }
91 119
92 static void 120 static void
93 docklet_x11_update_icon(PurpleStatusPrimitive status, gboolean connecting, gboolean pending) 121 docklet_x11_update_icon(PurpleStatusPrimitive status, gboolean connecting, gboolean pending)
94 { 122 {
257 } 285 }
258 286
259 docklet = egg_tray_icon_new(PIDGIN_NAME); 287 docklet = egg_tray_icon_new(PIDGIN_NAME);
260 box = gtk_event_box_new(); 288 box = gtk_event_box_new();
261 image = gtk_image_new(); 289 image = gtk_image_new();
290 GTK_WIDGET_SET_FLAGS (image, GTK_CAN_FOCUS);
262 291
263 g_signal_connect(G_OBJECT(docklet), "embedded", G_CALLBACK(docklet_x11_embedded_cb), NULL); 292 g_signal_connect(G_OBJECT(docklet), "embedded", G_CALLBACK(docklet_x11_embedded_cb), NULL);
264 g_signal_connect(G_OBJECT(docklet), "destroy", G_CALLBACK(docklet_x11_destroyed_cb), NULL); 293 g_signal_connect(G_OBJECT(docklet), "destroy", G_CALLBACK(docklet_x11_destroyed_cb), NULL);
265 g_signal_connect(G_OBJECT(docklet), "size-allocate", G_CALLBACK(docklet_x11_resize_icon), NULL); 294 g_signal_connect(G_OBJECT(docklet), "size-allocate", G_CALLBACK(docklet_x11_resize_icon), NULL);
266 g_signal_connect(G_OBJECT(box), "button-press-event", G_CALLBACK(docklet_x11_clicked_cb), NULL); 295 g_signal_connect(G_OBJECT(box), "button-press-event", G_CALLBACK(docklet_x11_clicked_cb), NULL);
296 g_signal_connect(G_OBJECT(box), "key-press-event", G_CALLBACK(docklet_x11_pressed_cb), NULL);
297 g_signal_connect(G_OBJECT(box), "popup-menu", G_CALLBACK(docklet_x11_popup_cb), NULL);
267 gtk_container_add(GTK_CONTAINER(box), image); 298 gtk_container_add(GTK_CONTAINER(box), image);
268 gtk_container_add(GTK_CONTAINER(docklet), box); 299 gtk_container_add(GTK_CONTAINER(docklet), box);
269 300
270 if (!gtk_check_version(2,4,0)) 301 if (!gtk_check_version(2,4,0))
271 g_object_set(G_OBJECT(box), "visible-window", FALSE, NULL); 302 g_object_set(G_OBJECT(box), "visible-window", FALSE, NULL);