1
Author: Ikuya Awashiro <ikuya@fruitsbasket.info>
2
Status: included upstream in svn r256, can be dropped past 1.4.9
3
Description: Use better tray icon
4
https://bugzilla.redhat.com/show_bug.cgi?id=447848
5
--- a/extras/panel/scim_panel_gtk.cpp
6
+++ b/extras/panel/scim_panel_gtk.cpp
8
#include "scimstringview.h"
11
- #include "scimtrayicon.h"
12
+// #include "scimtrayicon.h"
18
static void ui_tray_icon_destroy_cb (GtkObject *object,
20
+static void ui_tray_icon_popup_menu_cb (GtkStatusIcon *status_icon,
22
+ guint activate_time,
23
+ gpointer user_data);
25
+static void ui_tray_icon_activate_cb (GtkStatusIcon *status_icon,
26
+ gpointer user_data);
29
// Client Property Callback
31
static PangoFontDescription *_default_font_desc = 0;
34
-static ScimTrayIcon *_tray_icon = 0;
35
-static GtkWidget *_tray_icon_factory_button = 0;
36
-static gulong _tray_icon_destroy_signal_id = 0;
37
+static GtkStatusIcon *_tray_icon = 0;
38
+// static GtkWidget *_tray_icon_factory_button = 0;
39
+// static gulong _tray_icon_destroy_signal_id = 0;
42
static gboolean _input_window_draging = FALSE;
47
- g_signal_handler_disconnect (G_OBJECT (_tray_icon),
48
- _tray_icon_destroy_signal_id);
49
- gtk_widget_destroy (GTK_WIDGET (_tray_icon));
50
+ // g_signal_handler_disconnect (G_OBJECT (_tray_icon),
51
+ // _tray_icon_destroy_signal_id);
52
+ g_object_unref (_tray_icon);
61
- gtk_window_set_screen (GTK_WINDOW (_tray_icon), screen);
63
+ // if (_tray_icon) {
64
+ // gtk_window_set_screen (GTK_WINDOW (_tray_icon), screen);
69
@@ -1330,65 +1337,75 @@
74
-ui_tray_icon_expose_event_cb (GtkWidget *widget, GdkEventExpose *event)
76
- gdk_window_clear_area (widget->window, event->area.x, event->area.y,
77
- event->area.width, event->area.height);
82
-ui_tray_icon_style_set_cb (GtkWidget *widget, GtkStyle *previous_style)
84
- gdk_window_set_back_pixmap (widget->window, NULL, TRUE);
88
-ui_tray_icon_realize_cb (GtkWidget *widget)
90
- if (GTK_WIDGET_NO_WINDOW (widget) || GTK_WIDGET_APP_PAINTABLE (widget))
93
- gtk_widget_set_app_paintable (widget, TRUE);
94
- gtk_widget_set_double_buffered (widget, FALSE);
95
- gdk_window_set_back_pixmap (widget->window, NULL, TRUE);
96
- g_signal_connect (widget, "expose_event",
97
- G_CALLBACK (ui_tray_icon_expose_event_cb), NULL);
98
- g_signal_connect_after (widget, "style_set",
99
- G_CALLBACK (ui_tray_icon_style_set_cb), NULL);
102
+// ui_tray_icon_expose_event_cb (GtkWidget *widget, GdkEventExpose *event)
104
+// gdk_window_clear_area (widget->window, event->area.x, event->area.y,
105
+// event->area.width, event->area.height);
110
+// ui_tray_icon_style_set_cb (GtkWidget *widget, GtkStyle *previous_style)
112
+// gdk_window_set_back_pixmap (widget->window, NULL, TRUE);
116
+// ui_tray_icon_realize_cb (GtkWidget *widget)
118
+// if (GTK_WIDGET_NO_WINDOW (widget) || GTK_WIDGET_APP_PAINTABLE (widget))
121
+// gtk_widget_set_app_paintable (widget, TRUE);
122
+// gtk_widget_set_double_buffered (widget, FALSE);
123
+// gdk_window_set_back_pixmap (widget->window, NULL, TRUE);
124
+// g_signal_connect (widget, "expose_event",
125
+// G_CALLBACK (ui_tray_icon_expose_event_cb), NULL);
126
+// g_signal_connect_after (widget, "style_set",
127
+// G_CALLBACK (ui_tray_icon_style_set_cb), NULL);
131
ui_create_tray_icon_when_idle (gpointer data)
135
- _tray_icon = scim_tray_icon_new ("SCIM Tray Icon");
136
- g_signal_connect (G_OBJECT (_tray_icon), "realize",
137
- G_CALLBACK (ui_tray_icon_realize_cb), NULL);
139
- _tray_icon_destroy_signal_id =
140
- g_signal_connect (G_OBJECT (_tray_icon), "destroy",
141
- G_CALLBACK (ui_tray_icon_destroy_cb),
143
+ _tray_icon = gtk_status_icon_new_from_file (SCIM_KEYBOARD_ICON_FILE);
144
+ // g_signal_connect (G_OBJECT (_tray_icon), "realize",
145
+ // G_CALLBACK (ui_tray_icon_realize_cb), NULL);
147
+ // _tray_icon_destroy_signal_id =
148
+ // g_signal_connect (G_OBJECT (_tray_icon), "destroy",
149
+ // G_CALLBACK (ui_tray_icon_destroy_cb),
152
+ // image = ui_create_icon (SCIM_KEYBOARD_ICON_FILE,
158
+ // _tray_icon_factory_button = gtk_event_box_new ();
159
+ // g_signal_connect (G_OBJECT (_tray_icon_factory_button), "realize",
160
+ // G_CALLBACK (ui_tray_icon_realize_cb), NULL);
161
+ // gtk_container_add (GTK_CONTAINER (_tray_icon_factory_button), image);
162
+ // gtk_container_add (GTK_CONTAINER (_tray_icon), _tray_icon_factory_button);
164
- image = ui_create_icon (SCIM_KEYBOARD_ICON_FILE,
170
- _tray_icon_factory_button = gtk_event_box_new ();
171
- g_signal_connect (G_OBJECT (_tray_icon_factory_button), "realize",
172
- G_CALLBACK (ui_tray_icon_realize_cb), NULL);
173
- gtk_container_add (GTK_CONTAINER (_tray_icon_factory_button), image);
174
- gtk_container_add (GTK_CONTAINER (_tray_icon), _tray_icon_factory_button);
175
- g_signal_connect (G_OBJECT (_tray_icon_factory_button), "button-release-event",
176
- G_CALLBACK (ui_factory_button_click_cb),
178
+ // g_signal_connect (G_OBJECT (_tray_icon_factory_button), "button-release-event",
179
+ // G_CALLBACK (ui_factory_button_click_cb),
182
+ g_signal_connect (G_OBJECT (_tray_icon), "popup-menu",
183
+ G_CALLBACK (ui_tray_icon_popup_menu_cb),
186
+ g_signal_connect (G_OBJECT (_tray_icon), "activate",
187
+ G_CALLBACK (ui_tray_icon_activate_cb),
190
- gtk_widget_show_all (GTK_WIDGET (_tray_icon));
191
+ gtk_status_icon_set_visible (_tray_icon, TRUE);
195
@@ -1679,6 +1696,19 @@
199
+ui_tray_icon_popup_menu_cb (GtkStatusIcon *status_icon, guint button,
200
+ guint activate_time, gpointer user_data)
202
+ action_show_command_menu ();
206
+ui_tray_icon_activate_cb (GtkStatusIcon *status_icon, gpointer user_data)
208
+ _panel_agent->request_factory_menu ();
212
ui_factory_menu_activate_cb (GtkMenuItem *item,
215
@@ -2236,19 +2266,19 @@
220
-ui_tray_icon_destroy_cb (GtkObject *object,
221
- gpointer user_data)
223
- SCIM_DEBUG_MAIN (1) << "Tray Icon destroyed!\n";
225
- gtk_widget_destroy (GTK_WIDGET (object));
228
- _tray_icon_factory_button = 0;
230
- g_idle_add (ui_create_tray_icon_when_idle, NULL);
233
+// ui_tray_icon_destroy_cb (GtkObject *object,
234
+// gpointer user_data)
236
+// SCIM_DEBUG_MAIN (1) << "Tray Icon destroyed!\n";
238
+// gtk_widget_destroy (GTK_WIDGET (object));
241
+// _tray_icon_factory_button = 0;
243
+// g_idle_add (ui_create_tray_icon_when_idle, NULL);
248
@@ -2681,18 +2711,21 @@
252
- if (_tray_icon_factory_button) {
253
- GtkWidget *icon = gtk_bin_get_child (GTK_BIN (_tray_icon_factory_button));
254
+ // if (_tray_icon_factory_button) {
255
+ // GtkWidget *icon = gtk_bin_get_child (GTK_BIN (_tray_icon_factory_button));
258
- gtk_container_remove (GTK_CONTAINER (_tray_icon_factory_button), icon);
260
+ // gtk_container_remove (GTK_CONTAINER (_tray_icon_factory_button), icon);
262
- icon = ui_create_icon (info.icon, NULL, TRAY_ICON_SIZE, TRAY_ICON_SIZE, true);
263
+ // icon = ui_create_icon (info.icon, NULL, TRAY_ICON_SIZE, TRAY_ICON_SIZE, true);
265
- gtk_container_add (GTK_CONTAINER (_tray_icon_factory_button), icon);
266
+ // gtk_container_add (GTK_CONTAINER (_tray_icon_factory_button), icon);
269
- gtk_tooltips_set_tip (_tooltips, _tray_icon_factory_button, info.name.c_str (), NULL);
271
+ // gtk_tooltips_set_tip (_tooltips, _tray_icon_factory_button, info.name.c_str (), NULL);
274
+ gtk_status_icon_set_from_file (_tray_icon, info.icon.c_str());