Mercurial > pidgin.yaz
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); |