Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 135327 | Differences between
and this patch

Collapse All | Expand All

(-)lib/gui/gmtray/eggtrayicon.c (+46 lines)
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 *

Return to bug 135327