diff options
Diffstat (limited to 'net-voip/ekiga/files/ekiga-eggtrayicon-transparency.diff')
-rw-r--r-- | net-voip/ekiga/files/ekiga-eggtrayicon-transparency.diff | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/net-voip/ekiga/files/ekiga-eggtrayicon-transparency.diff b/net-voip/ekiga/files/ekiga-eggtrayicon-transparency.diff new file mode 100644 index 000000000000..f165c63e36b2 --- /dev/null +++ b/net-voip/ekiga/files/ekiga-eggtrayicon-transparency.diff @@ -0,0 +1,95 @@ +Index: eggtrayicon.c +=================================================================== +RCS file: /cvs/gnome/libegg/libegg/tray/eggtrayicon.c,v +retrieving revision 1.8 +diff -u -r1.8 eggtrayicon.c +--- lib/gui/gmtray/eggtrayicon.c 16 Jun 2005 13:27:40 -0000 1.8 ++++ lib/gui/gmtray/eggtrayicon.c 22 Feb 2006 21:35:25 -0000 +@@ -67,6 +67,9 @@ + static void egg_tray_icon_realize (GtkWidget *widget); + static void egg_tray_icon_unrealize (GtkWidget *widget); + ++static void egg_tray_icon_add (GtkContainer *container, ++ GtkWidget *widget); ++ + #ifdef GDK_WINDOWING_X11 + static void egg_tray_icon_update_manager_window (EggTrayIcon *icon, + gboolean dock_if_realized); +@@ -113,6 +116,7 @@ + { + GObjectClass *gobject_class = (GObjectClass *)klass; + GtkWidgetClass *widget_class = (GtkWidgetClass *)klass; ++ GtkContainerClass *container_class = (GtkContainerClass *)klass; + + parent_class = g_type_class_peek_parent (klass); + +@@ -121,6 +125,8 @@ + widget_class->realize = egg_tray_icon_realize; + widget_class->unrealize = egg_tray_icon_unrealize; + ++ container_class->add = egg_tray_icon_add; ++ + g_object_class_install_property (gobject_class, + PROP_ORIENTATION, + g_param_spec_enum ("orientation", +@@ -367,6 +373,36 @@ + + #endif + ++static gboolean ++transparent_expose_event (GtkWidget *widget, GdkEventExpose *event, gpointer user_data) ++{ ++ gdk_window_clear_area (widget->window, event->area.x, event->area.y, ++ event->area.width, event->area.height); ++ return FALSE; ++} ++ ++static void ++make_transparent_again (GtkWidget *widget, GtkStyle *previous_style, ++ gpointer user_data) ++{ ++ gdk_window_set_back_pixmap (widget->window, NULL, TRUE); ++} ++ ++static void ++make_transparent (GtkWidget *widget, gpointer user_data) ++{ ++ 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 (transparent_expose_event), NULL); ++ g_signal_connect_after (widget, "style_set", ++ G_CALLBACK (make_transparent_again), NULL); ++} ++ + static void + egg_tray_icon_realize (GtkWidget *widget) + { +@@ -381,6 +417,8 @@ + if (GTK_WIDGET_CLASS (parent_class)->realize) + GTK_WIDGET_CLASS (parent_class)->realize (widget); + ++ make_transparent (widget, NULL); ++ + screen = gtk_widget_get_screen (widget); + display = gdk_screen_get_display (screen); + xdisplay = gdk_x11_display_get_xdisplay (display); +@@ -411,6 +449,14 @@ + gdk_window_add_filter (root_window, + egg_tray_icon_manager_filter, icon); + #endif ++} ++ ++static void ++egg_tray_icon_add (GtkContainer *container, GtkWidget *widget) ++{ ++ g_signal_connect (widget, "realize", ++ G_CALLBACK (make_transparent), NULL); ++ GTK_CONTAINER_CLASS (parent_class)->add (container, widget); + } + + EggTrayIcon * |