rpms/scim/devel scim-1.4.7-timeout.patch, NONE, 1.1 scim-1.4.7-trayicon.patch, NONE, 1.1 scim.spec, 1.122, 1.123

Huang Peng (phuang) fedora-extras-commits at redhat.com
Thu Jul 17 06:03:23 UTC 2008


Author: phuang

Update of /cvs/pkgs/rpms/scim/devel
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv30930

Modified Files:
	scim.spec 
Added Files:
	scim-1.4.7-timeout.patch scim-1.4.7-trayicon.patch 
Log Message:
Fix bug 447848 & bug 444150.


scim-1.4.7-timeout.patch:

--- NEW FILE scim-1.4.7-timeout.patch ---
diff -up scim-1.4.7/extras/panel/scim_panel_gtk.cpp.timeout scim-1.4.7/extras/panel/scim_panel_gtk.cpp
--- scim-1.4.7/extras/panel/scim_panel_gtk.cpp.timeout	2008-07-17 09:44:53.000000000 +0800
+++ scim-1.4.7/extras/panel/scim_panel_gtk.cpp	2008-07-17 10:47:57.000000000 +0800
@@ -638,6 +638,7 @@ ui_initialize (void)
     GtkWidget *input_window_vbox;
 
     ui_load_config ();
+    _toolbar_hidden = false;
 
     if (_lookup_table_window) gtk_widget_destroy (_lookup_table_window);
     if (_input_window) gtk_widget_destroy (_input_window);
@@ -1024,8 +1025,13 @@ ui_initialize (void)
     }
 
     //Init timeout callback
+    if (_toolbar_hide_timeout != 0) {
+        g_source_remove (_toolbar_hide_timeout);
+        _toolbar_hide_timeout = 0;
+
+    }
     if (_toolbar_always_show && _toolbar_hide_timeout_max > 0) {
-        _toolbar_hide_timeout = gtk_timeout_add (1000, ui_hide_window_timeout_cb, NULL);
+        _toolbar_hide_timeout = g_timeout_add (1000, ui_hide_window_timeout_cb, NULL);
         g_signal_connect (G_OBJECT (_toolbar_window), "enter-notify-event",
                           G_CALLBACK (ui_toolbar_window_crossing_cb),
                           GINT_TO_POINTER (0));
@@ -2492,11 +2498,14 @@ panel_agent_thread_func (gpointer data)
 
     if (!_panel_agent->run ())
         std::cerr << "Failed to run Panel.\n";
-
+/*
     G_LOCK (_global_resource_lock);
     _should_exit = true;
     G_UNLOCK (_global_resource_lock);
-
+*/
+    gdk_threads_enter ();
+    gtk_main_quit ();
+    gdk_threads_leave ();
     g_thread_exit (NULL);
     return ((gpointer) NULL);
 }
@@ -3703,7 +3712,7 @@ int main (int argc, char *argv [])
 
     start_auto_start_helpers ();
 
-    _check_exit_timeout = gtk_timeout_add (500, check_exit_timeout_cb, NULL);
+    // _check_exit_timeout = g_timeout_add (500, check_exit_timeout_cb, NULL);
 
     gdk_threads_enter ();
     gtk_main ();

scim-1.4.7-trayicon.patch:

--- NEW FILE scim-1.4.7-trayicon.patch ---
diff -up scim-1.4.7/extras/panel/scim_panel_gtk.cpp.trayicon scim-1.4.7/extras/panel/scim_panel_gtk.cpp
--- scim-1.4.7/extras/panel/scim_panel_gtk.cpp.trayicon	2008-07-17 10:57:23.000000000 +0800
+++ scim-1.4.7/extras/panel/scim_panel_gtk.cpp	2008-07-17 13:57:55.000000000 +0800
@@ -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 @@ static void       ui_command_menu_deacti
 #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 GtkTooltips       *_tooltips     
 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;
@@ -648,9 +655,9 @@ ui_initialize (void)
 
 #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
@@ -1305,9 +1312,9 @@ ui_switch_screen (GdkScreen *screen)
         }
 
 #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) {
@@ -1330,65 +1337,75 @@ ui_switch_screen (GdkScreen *screen)
 #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_destroy_signal_id = 
-    g_signal_connect (G_OBJECT (_tray_icon), "destroy",
-                      G_CALLBACK (ui_tray_icon_destroy_cb),
-                      0);
+    _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);
+
+    // 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);
 
-    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),
+    
+    // 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;
 }
@@ -1679,6 +1696,19 @@ ui_factory_button_click_cb (GtkWidget *b
 }
 
 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)
 {
@@ -2236,19 +2266,19 @@ ui_command_menu_deactivate_cb (GtkWidget
 }
 
 #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
@@ -2681,18 +2711,21 @@ slot_update_factory_info (const PanelFac
     }
 
 #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
 


Index: scim.spec
===================================================================
RCS file: /cvs/pkgs/rpms/scim/devel/scim.spec,v
retrieving revision 1.122
retrieving revision 1.123
diff -u -r1.122 -r1.123
--- scim.spec	1 Jul 2008 04:45:53 -0000	1.122
+++ scim.spec	17 Jul 2008 06:02:21 -0000	1.123
@@ -44,6 +44,8 @@
 Patch22:   scim-1.4.7-fix-gdm.patch
 Patch23:   scim-1.4.7-remove-help-frame.patch
 Patch24:   scim-1.4.7-translation-update-431995.patch
+Patch25:   scim-1.4.7-timeout.patch
+Patch26:   scim-1.4.7-trayicon.patch
 
 %description
 SCIM is a user friendly and full featured input method user interface and
@@ -171,6 +173,8 @@
 %patch22 -p1 -b .22-fix-gdm
 %patch23 -p1 -b .23-help-frame
 %patch24 -p1 -b .24-trans
+%patch25 -p1 -b .25-timeout
+%patch26 -p1 -b .26-trayicon
 
 
 %if %{snapshot}
@@ -303,6 +307,10 @@
 
 
 %changelog
+* Thu Jul 17 2008 Huang Peng <phuang at redhat.com> - 1.4.7-27.fc10
+- add patch scim-1.4.7-timeout.patch to fix bug 444150.
+- add patch scim-1.4.7-trayicon.patch to fix bug 447848.
+
 * Mon Jun 30 2008 Jens Petersen <petersen at redhat.com> - 1.4.7-26.fc10
 - make xinput script no longer require multilib immodules
   (Julian Sikorski, #448268)




More information about the fedora-extras-commits mailing list