aboutsummaryrefslogtreecommitdiffstats
path: root/recipes/scim/files/53_scim-1.4.7-trayicon.dpatch
diff options
context:
space:
mode:
Diffstat (limited to 'recipes/scim/files/53_scim-1.4.7-trayicon.dpatch')
-rw-r--r--recipes/scim/files/53_scim-1.4.7-trayicon.dpatch279
1 files changed, 279 insertions, 0 deletions
diff --git a/recipes/scim/files/53_scim-1.4.7-trayicon.dpatch b/recipes/scim/files/53_scim-1.4.7-trayicon.dpatch
new file mode 100644
index 0000000000..666d39ef86
--- /dev/null
+++ b/recipes/scim/files/53_scim-1.4.7-trayicon.dpatch
@@ -0,0 +1,279 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## 53_scim-1.4.7-trayicon.dpatch by Ikuya Awashiro <ikuya@fruitsbasket.info>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Use better tray icon
+## DP: https://bugzilla.redhat.com/show_bug.cgi?id=447848
+
+@DPATCH@
+diff -urNad scim-1.4.9~/extras/panel/scim_panel_gtk.cpp scim-1.4.9/extras/panel/scim_panel_gtk.cpp
+--- scim-1.4.9~/extras/panel/scim_panel_gtk.cpp 2008-11-02 06:43:13.000000000 +0000
++++ scim-1.4.9/extras/panel/scim_panel_gtk.cpp 2009-07-20 11:54:40.000000000 +0000
+@@ -60,7 +60,7 @@
+ #include "scimstringview.h"
+
+ #if ENABLE_TRAY_ICON
+- #include "scimtrayicon.h"
++// #include "scimtrayicon.h"
+ #endif
+
+ using namespace scim;
+@@ -276,6 +276,13 @@
+ #if ENABLE_TRAY_ICON
+ static void ui_tray_icon_destroy_cb (GtkObject *object,
+ gpointer user_data);
++static void ui_tray_icon_popup_menu_cb (GtkStatusIcon *status_icon,
++ guint button,
++ guint activate_time,
++ gpointer user_data);
++
++static void ui_tray_icon_activate_cb (GtkStatusIcon *status_icon,
++ gpointer user_data);
+ #endif
+
+ // Client Property Callback
+@@ -399,9 +406,9 @@
+ static PangoFontDescription *_default_font_desc = 0;
+
+ #if ENABLE_TRAY_ICON
+-static ScimTrayIcon *_tray_icon = 0;
+-static GtkWidget *_tray_icon_factory_button = 0;
+-static gulong _tray_icon_destroy_signal_id = 0;
++static GtkStatusIcon *_tray_icon = 0;
++// static GtkWidget *_tray_icon_factory_button = 0;
++// static gulong _tray_icon_destroy_signal_id = 0;
+ #endif
+
+ static gboolean _input_window_draging = FALSE;
+@@ -647,9 +654,9 @@
+
+ #if ENABLE_TRAY_ICON
+ if (_tray_icon) {
+- g_signal_handler_disconnect (G_OBJECT (_tray_icon),
+- _tray_icon_destroy_signal_id);
+- gtk_widget_destroy (GTK_WIDGET (_tray_icon));
++ // g_signal_handler_disconnect (G_OBJECT (_tray_icon),
++ // _tray_icon_destroy_signal_id);
++ g_object_unref (_tray_icon);
+ }
+ _tray_icon = 0;
+ #endif
+@@ -1312,9 +1319,9 @@
+ }
+
+ #if ENABLE_TRAY_ICON
+- if (_tray_icon) {
+- gtk_window_set_screen (GTK_WINDOW (_tray_icon), screen);
+- }
++ // if (_tray_icon) {
++ // gtk_window_set_screen (GTK_WINDOW (_tray_icon), screen);
++ // }
+ #endif
+
+ if (_help_dialog) {
+@@ -1337,65 +1344,75 @@
+ #endif
+
+ #if ENABLE_TRAY_ICON
+-static gboolean
+-ui_tray_icon_expose_event_cb (GtkWidget *widget, GdkEventExpose *event)
+-{
+- gdk_window_clear_area (widget->window, event->area.x, event->area.y,
+- event->area.width, event->area.height);
+- return FALSE;
+-}
+-
+-static void
+-ui_tray_icon_style_set_cb (GtkWidget *widget, GtkStyle *previous_style)
+-{
+- gdk_window_set_back_pixmap (widget->window, NULL, TRUE);
+-}
+-
+-static void
+-ui_tray_icon_realize_cb (GtkWidget *widget)
+-{
+- if (GTK_WIDGET_NO_WINDOW (widget) || GTK_WIDGET_APP_PAINTABLE (widget))
+- return;
+-
+- gtk_widget_set_app_paintable (widget, TRUE);
+- gtk_widget_set_double_buffered (widget, FALSE);
+- gdk_window_set_back_pixmap (widget->window, NULL, TRUE);
+- g_signal_connect (widget, "expose_event",
+- G_CALLBACK (ui_tray_icon_expose_event_cb), NULL);
+- g_signal_connect_after (widget, "style_set",
+- G_CALLBACK (ui_tray_icon_style_set_cb), NULL);
+-}
++// static gboolean
++// ui_tray_icon_expose_event_cb (GtkWidget *widget, GdkEventExpose *event)
++// {
++// gdk_window_clear_area (widget->window, event->area.x, event->area.y,
++// event->area.width, event->area.height);
++// return FALSE;
++// }
++//
++// static void
++// ui_tray_icon_style_set_cb (GtkWidget *widget, GtkStyle *previous_style)
++// {
++// gdk_window_set_back_pixmap (widget->window, NULL, TRUE);
++// }
++//
++// static void
++// ui_tray_icon_realize_cb (GtkWidget *widget)
++// {
++// if (GTK_WIDGET_NO_WINDOW (widget) || GTK_WIDGET_APP_PAINTABLE (widget))
++// return;
++//
++// gtk_widget_set_app_paintable (widget, TRUE);
++// gtk_widget_set_double_buffered (widget, FALSE);
++// gdk_window_set_back_pixmap (widget->window, NULL, TRUE);
++// g_signal_connect (widget, "expose_event",
++// G_CALLBACK (ui_tray_icon_expose_event_cb), NULL);
++// g_signal_connect_after (widget, "style_set",
++// G_CALLBACK (ui_tray_icon_style_set_cb), NULL);
++// }
+
+ static gboolean
+ ui_create_tray_icon_when_idle (gpointer data)
+ {
+ GtkWidget *image;
+
+- _tray_icon = scim_tray_icon_new ("SCIM Tray Icon");
+- g_signal_connect (G_OBJECT (_tray_icon), "realize",
+- G_CALLBACK (ui_tray_icon_realize_cb), NULL);
++ _tray_icon = gtk_status_icon_new_from_file (SCIM_KEYBOARD_ICON_FILE);
++ // g_signal_connect (G_OBJECT (_tray_icon), "realize",
++ // G_CALLBACK (ui_tray_icon_realize_cb), NULL);
+
+- _tray_icon_destroy_signal_id =
+- g_signal_connect (G_OBJECT (_tray_icon), "destroy",
+- G_CALLBACK (ui_tray_icon_destroy_cb),
+- 0);
++ // _tray_icon_destroy_signal_id =
++ // g_signal_connect (G_OBJECT (_tray_icon), "destroy",
++ // G_CALLBACK (ui_tray_icon_destroy_cb),
++ // 0);
+
+- image = ui_create_icon (SCIM_KEYBOARD_ICON_FILE,
+- NULL,
+- TRAY_ICON_SIZE,
+- TRAY_ICON_SIZE,
+- true);
++ // image = ui_create_icon (SCIM_KEYBOARD_ICON_FILE,
++ // NULL,
++ // TRAY_ICON_SIZE,
++ // TRAY_ICON_SIZE,
++ // true);
+
+- _tray_icon_factory_button = gtk_event_box_new ();
+- g_signal_connect (G_OBJECT (_tray_icon_factory_button), "realize",
+- G_CALLBACK (ui_tray_icon_realize_cb), NULL);
+- gtk_container_add (GTK_CONTAINER (_tray_icon_factory_button), image);
+- gtk_container_add (GTK_CONTAINER (_tray_icon), _tray_icon_factory_button);
+- g_signal_connect (G_OBJECT (_tray_icon_factory_button), "button-release-event",
+- G_CALLBACK (ui_factory_button_click_cb),
++ // _tray_icon_factory_button = gtk_event_box_new ();
++ // g_signal_connect (G_OBJECT (_tray_icon_factory_button), "realize",
++ // G_CALLBACK (ui_tray_icon_realize_cb), NULL);
++ // gtk_container_add (GTK_CONTAINER (_tray_icon_factory_button), image);
++ // gtk_container_add (GTK_CONTAINER (_tray_icon), _tray_icon_factory_button);
++
++
++ // g_signal_connect (G_OBJECT (_tray_icon_factory_button), "button-release-event",
++ // G_CALLBACK (ui_factory_button_click_cb),
++ // 0);
++
++ g_signal_connect (G_OBJECT (_tray_icon), "popup-menu",
++ G_CALLBACK (ui_tray_icon_popup_menu_cb),
++ 0);
++
++ g_signal_connect (G_OBJECT (_tray_icon), "activate",
++ G_CALLBACK (ui_tray_icon_activate_cb),
+ 0);
+
+- gtk_widget_show_all (GTK_WIDGET (_tray_icon));
++ gtk_status_icon_set_visible (_tray_icon, TRUE);
+
+ return FALSE;
+ }
+@@ -1686,6 +1703,19 @@
+ }
+
+ static void
++ui_tray_icon_popup_menu_cb (GtkStatusIcon *status_icon, guint button,
++ guint activate_time, gpointer user_data)
++{
++ action_show_command_menu ();
++}
++
++static void
++ui_tray_icon_activate_cb (GtkStatusIcon *status_icon, gpointer user_data)
++{
++ _panel_agent->request_factory_menu ();
++}
++
++static void
+ ui_factory_menu_activate_cb (GtkMenuItem *item,
+ gpointer user_data)
+ {
+@@ -2243,19 +2273,19 @@
+ }
+
+ #if ENABLE_TRAY_ICON
+-static void
+-ui_tray_icon_destroy_cb (GtkObject *object,
+- gpointer user_data)
+-{
+- SCIM_DEBUG_MAIN (1) << "Tray Icon destroyed!\n";
+-
+- gtk_widget_destroy (GTK_WIDGET (object));
+-
+- _tray_icon = 0;
+- _tray_icon_factory_button = 0;
+-
+- g_idle_add (ui_create_tray_icon_when_idle, NULL);
+-}
++// static void
++// ui_tray_icon_destroy_cb (GtkObject *object,
++// gpointer user_data)
++// {
++// SCIM_DEBUG_MAIN (1) << "Tray Icon destroyed!\n";
++//
++// gtk_widget_destroy (GTK_WIDGET (object));
++//
++// _tray_icon = 0;
++// _tray_icon_factory_button = 0;
++//
++// g_idle_add (ui_create_tray_icon_when_idle, NULL);
++// }
+ #endif
+
+ static void
+@@ -2685,18 +2715,21 @@
+ }
+
+ #if ENABLE_TRAY_ICON
+- if (_tray_icon_factory_button) {
+- GtkWidget *icon = gtk_bin_get_child (GTK_BIN (_tray_icon_factory_button));
++ // if (_tray_icon_factory_button) {
++ // GtkWidget *icon = gtk_bin_get_child (GTK_BIN (_tray_icon_factory_button));
+
+- if (icon)
+- gtk_container_remove (GTK_CONTAINER (_tray_icon_factory_button), icon);
++ // if (icon)
++ // gtk_container_remove (GTK_CONTAINER (_tray_icon_factory_button), icon);
+
+- icon = ui_create_icon (info.icon, NULL, TRAY_ICON_SIZE, TRAY_ICON_SIZE, true);
++ // icon = ui_create_icon (info.icon, NULL, TRAY_ICON_SIZE, TRAY_ICON_SIZE, true);
+
+- gtk_container_add (GTK_CONTAINER (_tray_icon_factory_button), icon);
++ // gtk_container_add (GTK_CONTAINER (_tray_icon_factory_button), icon);
+
+- if (_tooltips)
+- gtk_tooltips_set_tip (_tooltips, _tray_icon_factory_button, info.name.c_str (), NULL);
++ // if (_tooltips)
++ // gtk_tooltips_set_tip (_tooltips, _tray_icon_factory_button, info.name.c_str (), NULL);
++ // }
++ if (_tray_icon) {
++ gtk_status_icon_set_from_file (_tray_icon, info.icon.c_str());
+ }
+ #endif