diff options
Diffstat (limited to 'misc/stardict/patches/stardict-transparent.patch')
-rw-r--r-- | misc/stardict/patches/stardict-transparent.patch | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/misc/stardict/patches/stardict-transparent.patch b/misc/stardict/patches/stardict-transparent.patch new file mode 100644 index 0000000000..1f4c149d52 --- /dev/null +++ b/misc/stardict/patches/stardict-transparent.patch @@ -0,0 +1,101 @@ +Index: src/eggtrayicon.c +=================================================================== +--- src/eggtrayicon.c (revision 248) ++++ src/eggtrayicon.c (working copy) +@@ -66,6 +66,8 @@ + + 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, +@@ -113,6 +115,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 +124,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", +@@ -159,8 +164,37 @@ + } + + #ifdef GDK_WINDOWING_X11 ++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_get_orientation_property (EggTrayIcon *icon) + { + Display *xdisplay; +@@ -238,10 +272,22 @@ + } + return GDK_FILTER_CONTINUE; + } +- ++#else ++static void ++make_transparent (GtkWidget *widget, gpointer user_data) ++{ ++} + #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); ++} ++ ++static void + egg_tray_icon_unrealize (GtkWidget *widget) + { + #ifdef GDK_WINDOWING_X11 +@@ -381,6 +427,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); |