Lines 67-72
Link Here
|
67 |
static void egg_tray_icon_realize (GtkWidget *widget); |
67 |
static void egg_tray_icon_realize (GtkWidget *widget); |
68 |
static void egg_tray_icon_unrealize (GtkWidget *widget); |
68 |
static void egg_tray_icon_unrealize (GtkWidget *widget); |
69 |
|
69 |
|
|
|
70 |
static void egg_tray_icon_add (GtkContainer *container, |
71 |
GtkWidget *widget); |
72 |
|
70 |
#ifdef GDK_WINDOWING_X11 |
73 |
#ifdef GDK_WINDOWING_X11 |
71 |
static void egg_tray_icon_update_manager_window (EggTrayIcon *icon, |
74 |
static void egg_tray_icon_update_manager_window (EggTrayIcon *icon, |
72 |
gboolean dock_if_realized); |
75 |
gboolean dock_if_realized); |
Lines 113-118
Link Here
|
113 |
{ |
116 |
{ |
114 |
GObjectClass *gobject_class = (GObjectClass *)klass; |
117 |
GObjectClass *gobject_class = (GObjectClass *)klass; |
115 |
GtkWidgetClass *widget_class = (GtkWidgetClass *)klass; |
118 |
GtkWidgetClass *widget_class = (GtkWidgetClass *)klass; |
|
|
119 |
GtkContainerClass *container_class = (GtkContainerClass *)klass; |
116 |
|
120 |
|
117 |
parent_class = g_type_class_peek_parent (klass); |
121 |
parent_class = g_type_class_peek_parent (klass); |
118 |
|
122 |
|
Lines 121-126
Link Here
|
121 |
widget_class->realize = egg_tray_icon_realize; |
125 |
widget_class->realize = egg_tray_icon_realize; |
122 |
widget_class->unrealize = egg_tray_icon_unrealize; |
126 |
widget_class->unrealize = egg_tray_icon_unrealize; |
123 |
|
127 |
|
|
|
128 |
container_class->add = egg_tray_icon_add; |
129 |
|
124 |
g_object_class_install_property (gobject_class, |
130 |
g_object_class_install_property (gobject_class, |
125 |
PROP_ORIENTATION, |
131 |
PROP_ORIENTATION, |
126 |
g_param_spec_enum ("orientation", |
132 |
g_param_spec_enum ("orientation", |
Lines 367-372
Link Here
|
367 |
|
373 |
|
368 |
#endif |
374 |
#endif |
369 |
|
375 |
|
|
|
376 |
static gboolean |
377 |
transparent_expose_event (GtkWidget *widget, GdkEventExpose *event, gpointer user_data) |
378 |
{ |
379 |
gdk_window_clear_area (widget->window, event->area.x, event->area.y, |
380 |
event->area.width, event->area.height); |
381 |
return FALSE; |
382 |
} |
383 |
|
384 |
static void |
385 |
make_transparent_again (GtkWidget *widget, GtkStyle *previous_style, |
386 |
gpointer user_data) |
387 |
{ |
388 |
gdk_window_set_back_pixmap (widget->window, NULL, TRUE); |
389 |
} |
390 |
|
391 |
static void |
392 |
make_transparent (GtkWidget *widget, gpointer user_data) |
393 |
{ |
394 |
if (GTK_WIDGET_NO_WINDOW (widget) || GTK_WIDGET_APP_PAINTABLE (widget)) |
395 |
return; |
396 |
|
397 |
gtk_widget_set_app_paintable (widget, TRUE); |
398 |
gtk_widget_set_double_buffered (widget, FALSE); |
399 |
gdk_window_set_back_pixmap (widget->window, NULL, TRUE); |
400 |
g_signal_connect (widget, "expose_event", |
401 |
G_CALLBACK (transparent_expose_event), NULL); |
402 |
g_signal_connect_after (widget, "style_set", |
403 |
G_CALLBACK (make_transparent_again), NULL); |
404 |
} |
405 |
|
370 |
static void |
406 |
static void |
371 |
egg_tray_icon_realize (GtkWidget *widget) |
407 |
egg_tray_icon_realize (GtkWidget *widget) |
372 |
{ |
408 |
{ |
Lines 381-386
Link Here
|
381 |
if (GTK_WIDGET_CLASS (parent_class)->realize) |
417 |
if (GTK_WIDGET_CLASS (parent_class)->realize) |
382 |
GTK_WIDGET_CLASS (parent_class)->realize (widget); |
418 |
GTK_WIDGET_CLASS (parent_class)->realize (widget); |
383 |
|
419 |
|
|
|
420 |
make_transparent (widget, NULL); |
421 |
|
384 |
screen = gtk_widget_get_screen (widget); |
422 |
screen = gtk_widget_get_screen (widget); |
385 |
display = gdk_screen_get_display (screen); |
423 |
display = gdk_screen_get_display (screen); |
386 |
xdisplay = gdk_x11_display_get_xdisplay (display); |
424 |
xdisplay = gdk_x11_display_get_xdisplay (display); |
Lines 411-416
Link Here
|
411 |
gdk_window_add_filter (root_window, |
449 |
gdk_window_add_filter (root_window, |
412 |
egg_tray_icon_manager_filter, icon); |
450 |
egg_tray_icon_manager_filter, icon); |
413 |
#endif |
451 |
#endif |
|
|
452 |
} |
453 |
|
454 |
static void |
455 |
egg_tray_icon_add (GtkContainer *container, GtkWidget *widget) |
456 |
{ |
457 |
g_signal_connect (widget, "realize", |
458 |
G_CALLBACK (make_transparent), NULL); |
459 |
GTK_CONTAINER_CLASS (parent_class)->add (container, widget); |
414 |
} |
460 |
} |
415 |
|
461 |
|
416 |
EggTrayIcon * |
462 |
EggTrayIcon * |