mirror of
https://github.com/Ponce/slackbuilds
synced 2024-12-01 01:00:03 +01:00
101 lines
3 KiB
Diff
101 lines
3 KiB
Diff
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);
|