3a55b21964
PR: ports/107402 Submitted by: Jason E. Hale <bsdkaffee@gmail.com> (maintainer)
90 lines
2.9 KiB
C
90 lines
2.9 KiB
C
--- src/eggtrayicon.c.orig Fri May 12 10:54:17 2006
|
|
+++ src/eggtrayicon.c Mon Jan 1 12:46:03 2007
|
|
@@ -61,6 +61,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);
|
|
+
|
|
static void egg_tray_icon_update_manager_window(EggTrayIcon * icon,
|
|
gboolean dock_if_realized);
|
|
static void egg_tray_icon_manager_window_destroyed(EggTrayIcon * icon);
|
|
@@ -101,6 +104,7 @@
|
|
{
|
|
GObjectClass *gobject_class = (GObjectClass *) klass;
|
|
GtkWidgetClass *widget_class = (GtkWidgetClass *) klass;
|
|
+ GtkContainerClass *container_class = (GtkContainerClass *)klass;
|
|
|
|
parent_class = g_type_class_peek_parent(klass);
|
|
|
|
@@ -109,6 +113,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",
|
|
@@ -298,6 +304,36 @@
|
|
}
|
|
}
|
|
|
|
+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_manager_window_destroyed(EggTrayIcon * icon)
|
|
{
|
|
GdkWindow *gdkwin;
|
|
@@ -327,6 +363,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);
|
|
@@ -352,6 +390,14 @@
|
|
|
|
/* Add a root window filter so that we get changes on MANAGER */
|
|
gdk_window_add_filter(root_window, egg_tray_icon_manager_filter, icon);
|
|
+}
|
|
+
|
|
+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 *egg_tray_icon_new_for_screen(GdkScreen * screen, const char *name)
|