Gentoo Archives: gentoo-commits

From: "Mounir Lamouri (volkmar)" <volkmar@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] gentoo-x86 commit in net-voip/ekiga/files: ekiga-eggtrayicon-transparency.diff ekiga-2.0.12-gdu.patch ekiga-1.99.0-configure.patch not-gnome.patch ekiga-eggtrayicon-update.diff
Date: Tue, 28 Apr 2009 16:14:41
Message-Id: E1Lypx8-0004hI-NB@stork.gentoo.org
1 volkmar 09/04/28 16:14:38
2
3 Added: ekiga-eggtrayicon-transparency.diff
4 ekiga-2.0.12-gdu.patch ekiga-1.99.0-configure.patch
5 not-gnome.patch ekiga-eggtrayicon-update.diff
6 Log:
7 moving from net-im to net-voip
8 (Portage version: 2.1.6.7/cvs/Linux ppc, RepoMan options: --force)
9
10 Revision Changes Path
11 1.1 net-voip/ekiga/files/ekiga-eggtrayicon-transparency.diff
12
13 file : http://sources.gentoo.org/viewcvs.py/gentoo-x86/net-voip/ekiga/files/ekiga-eggtrayicon-transparency.diff?rev=1.1&view=markup
14 plain: http://sources.gentoo.org/viewcvs.py/gentoo-x86/net-voip/ekiga/files/ekiga-eggtrayicon-transparency.diff?rev=1.1&content-type=text/plain
15
16 Index: ekiga-eggtrayicon-transparency.diff
17 ===================================================================
18 Index: eggtrayicon.c
19 ===================================================================
20 RCS file: /cvs/gnome/libegg/libegg/tray/eggtrayicon.c,v
21 retrieving revision 1.8
22 diff -u -r1.8 eggtrayicon.c
23 --- lib/gui/gmtray/eggtrayicon.c 16 Jun 2005 13:27:40 -0000 1.8
24 +++ lib/gui/gmtray/eggtrayicon.c 22 Feb 2006 21:35:25 -0000
25 @@ -67,6 +67,9 @@
26 static void egg_tray_icon_realize (GtkWidget *widget);
27 static void egg_tray_icon_unrealize (GtkWidget *widget);
28
29 +static void egg_tray_icon_add (GtkContainer *container,
30 + GtkWidget *widget);
31 +
32 #ifdef GDK_WINDOWING_X11
33 static void egg_tray_icon_update_manager_window (EggTrayIcon *icon,
34 gboolean dock_if_realized);
35 @@ -113,6 +116,7 @@
36 {
37 GObjectClass *gobject_class = (GObjectClass *)klass;
38 GtkWidgetClass *widget_class = (GtkWidgetClass *)klass;
39 + GtkContainerClass *container_class = (GtkContainerClass *)klass;
40
41 parent_class = g_type_class_peek_parent (klass);
42
43 @@ -121,6 +125,8 @@
44 widget_class->realize = egg_tray_icon_realize;
45 widget_class->unrealize = egg_tray_icon_unrealize;
46
47 + container_class->add = egg_tray_icon_add;
48 +
49 g_object_class_install_property (gobject_class,
50 PROP_ORIENTATION,
51 g_param_spec_enum ("orientation",
52 @@ -367,6 +373,36 @@
53
54 #endif
55
56 +static gboolean
57 +transparent_expose_event (GtkWidget *widget, GdkEventExpose *event, gpointer user_data)
58 +{
59 + gdk_window_clear_area (widget->window, event->area.x, event->area.y,
60 + event->area.width, event->area.height);
61 + return FALSE;
62 +}
63 +
64 +static void
65 +make_transparent_again (GtkWidget *widget, GtkStyle *previous_style,
66 + gpointer user_data)
67 +{
68 + gdk_window_set_back_pixmap (widget->window, NULL, TRUE);
69 +}
70 +
71 +static void
72 +make_transparent (GtkWidget *widget, gpointer user_data)
73 +{
74 + if (GTK_WIDGET_NO_WINDOW (widget) || GTK_WIDGET_APP_PAINTABLE (widget))
75 + return;
76 +
77 + gtk_widget_set_app_paintable (widget, TRUE);
78 + gtk_widget_set_double_buffered (widget, FALSE);
79 + gdk_window_set_back_pixmap (widget->window, NULL, TRUE);
80 + g_signal_connect (widget, "expose_event",
81 + G_CALLBACK (transparent_expose_event), NULL);
82 + g_signal_connect_after (widget, "style_set",
83 + G_CALLBACK (make_transparent_again), NULL);
84 +}
85 +
86 static void
87 egg_tray_icon_realize (GtkWidget *widget)
88 {
89 @@ -381,6 +417,8 @@
90 if (GTK_WIDGET_CLASS (parent_class)->realize)
91 GTK_WIDGET_CLASS (parent_class)->realize (widget);
92
93 + make_transparent (widget, NULL);
94 +
95 screen = gtk_widget_get_screen (widget);
96 display = gdk_screen_get_display (screen);
97 xdisplay = gdk_x11_display_get_xdisplay (display);
98 @@ -411,6 +449,14 @@
99 gdk_window_add_filter (root_window,
100 egg_tray_icon_manager_filter, icon);
101 #endif
102 +}
103 +
104 +static void
105 +egg_tray_icon_add (GtkContainer *container, GtkWidget *widget)
106 +{
107 + g_signal_connect (widget, "realize",
108 + G_CALLBACK (make_transparent), NULL);
109 + GTK_CONTAINER_CLASS (parent_class)->add (container, widget);
110 }
111
112 EggTrayIcon *
113
114
115
116 1.1 net-voip/ekiga/files/ekiga-2.0.12-gdu.patch
117
118 file : http://sources.gentoo.org/viewcvs.py/gentoo-x86/net-voip/ekiga/files/ekiga-2.0.12-gdu.patch?rev=1.1&view=markup
119 plain: http://sources.gentoo.org/viewcvs.py/gentoo-x86/net-voip/ekiga/files/ekiga-2.0.12-gdu.patch?rev=1.1&content-type=text/plain
120
121 Index: ekiga-2.0.12-gdu.patch
122 ===================================================================
123 --- configure.in 2008-03-12 21:20:29.925476633 +0000
124 +++ configure.in 2008-03-12 21:22:29.000000000 +0000
125 @@ -60,8 +60,8 @@
126 if test ${enable_gnome} = yes && test ${enable_doc} = yes; then
127 GNOME_DOC_INIT
128 else
129 -ENABLE_SK_TRUE="#"
130 -ENABLE_SK_FALSE=""
131 +dnl Do not care if GDU is not found
132 +GNOME_DOC_INIT(,,[:])
133 fi
134
135 AM_CONDITIONAL(DISABLE_DOC, test ${enable_doc} = no)
136 --- configure 2008-03-21 00:47:35.000000000 +0100
137 +++ configure 2008-03-21 00:47:48.000000000 +0100
138 @@ -2968,8 +2966,93 @@
139
140
141 else
142 -ENABLE_SK_TRUE="#"
143 -ENABLE_SK_FALSE=""
144 +
145 +gdu_cv_version_required=0.3.2
146 +
147 +if test -n "$PKG_CONFIG" && \
148 + { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"gnome-doc-utils >= \$gdu_cv_version_required\"") >&5
149 + ($PKG_CONFIG --exists --print-errors "gnome-doc-utils >= $gdu_cv_version_required") 2>&5
150 + ac_status=$?
151 + echo "$as_me:$LINENO: \$? = $ac_status" >&5
152 + (exit $ac_status); }; then
153 + gdu_cv_have_gdu=yes
154 +else
155 + gdu_cv_have_gdu=no
156 +fi
157 +
158 +if test "$gdu_cv_have_gdu" = "yes"; then
159 + :
160 +else
161 + :
162 +fi
163 +
164 +
165 +
166 +# Check whether --with-help-dir was given.
167 +if test "${with_help_dir+set}" = set; then
168 + withval=$with_help_dir;
169 +else
170 + with_help_dir='${datadir}/gnome/help'
171 +fi
172 +
173 +HELP_DIR="$with_help_dir"
174 +
175 +
176 +
177 +# Check whether --with-omf-dir was given.
178 +if test "${with_omf_dir+set}" = set; then
179 + withval=$with_omf_dir;
180 +else
181 + with_omf_dir='${datadir}/omf'
182 +fi
183 +
184 +OMF_DIR="$with_omf_dir"
185 +
186 +
187 +
188 +# Check whether --with-help-formats was given.
189 +if test "${with_help_formats+set}" = set; then
190 + withval=$with_help_formats;
191 +else
192 + with_help_formats=''
193 +fi
194 +
195 +DOC_USER_FORMATS="$with_help_formats"
196 +
197 +
198 +# Check whether --enable-scrollkeeper was given.
199 +if test "${enable_scrollkeeper+set}" = set; then
200 + enableval=$enable_scrollkeeper;
201 +else
202 + enable_scrollkeeper=yes
203 +fi
204 +
205 +
206 +
207 +if test "$gdu_cv_have_gdu" = "yes" -a "$enable_scrollkeeper" = "yes"; then
208 + ENABLE_SK_TRUE=
209 + ENABLE_SK_FALSE='#'
210 +else
211 + ENABLE_SK_TRUE='#'
212 + ENABLE_SK_FALSE=
213 +fi
214 +
215 +
216 +DISTCHECK_CONFIGURE_FLAGS="--disable-scrollkeeper $DISTCHECK_CONFIGURE_FLAGS"
217 +
218 +
219 +
220 +
221 +if test "$gdu_cv_have_gdu" = "yes"; then
222 + HAVE_GNOME_DOC_UTILS_TRUE=
223 + HAVE_GNOME_DOC_UTILS_FALSE='#'
224 +else
225 + HAVE_GNOME_DOC_UTILS_TRUE='#'
226 + HAVE_GNOME_DOC_UTILS_FALSE=
227 +fi
228 +
229 +
230 +
231 fi
232
233
234
235
236
237 1.1 net-voip/ekiga/files/ekiga-1.99.0-configure.patch
238
239 file : http://sources.gentoo.org/viewcvs.py/gentoo-x86/net-voip/ekiga/files/ekiga-1.99.0-configure.patch?rev=1.1&view=markup
240 plain: http://sources.gentoo.org/viewcvs.py/gentoo-x86/net-voip/ekiga/files/ekiga-1.99.0-configure.patch?rev=1.1&content-type=text/plain
241
242 Index: ekiga-1.99.0-configure.patch
243 ===================================================================
244 --- gnomemeeting-1.2.1/configure.orig 2005-04-11 17:24:31.000000000 +0000
245 +++ gnomemeeting-1.2.1/configure 2005-04-11 17:25:34.000000000 +0000
246 @@ -20815,15 +20815,17 @@
247 if test x"${disable_gnome}" = xyes ; then
248
249
250 -if false; then
251 - GCONF_SCHEMAS_INSTALL_TRUE=
252 - GCONF_SCHEMAS_INSTALL_FALSE='#'
253 -else
254 +#if false; then
255 +# GCONF_SCHEMAS_INSTALL_TRUE=
256 +# GCONF_SCHEMAS_INSTALL_FALSE='#'
257 +#else
258 GCONF_SCHEMAS_INSTALL_TRUE='#'
259 GCONF_SCHEMAS_INSTALL_FALSE=
260 -fi
261 +#fi
262
263 else
264 + GCONF_SCHEMAS_INSTALL_TRUE=
265 + GCONF_SCHEMAS_INSTALL_FALSE='#'
266
267 if test "x$GCONF_SCHEMA_INSTALL_SOURCE" = "x"; then
268 GCONF_SCHEMA_CONFIG_SOURCE=`gconftool-2 --get-default-source`
269
270
271
272 1.1 net-voip/ekiga/files/not-gnome.patch
273
274 file : http://sources.gentoo.org/viewcvs.py/gentoo-x86/net-voip/ekiga/files/not-gnome.patch?rev=1.1&view=markup
275 plain: http://sources.gentoo.org/viewcvs.py/gentoo-x86/net-voip/ekiga/files/not-gnome.patch?rev=1.1&content-type=text/plain
276
277 Index: not-gnome.patch
278 ===================================================================
279 Index: ekiga-2.0.11/lib/gmconf/gmconf-glib.c
280 ===================================================================
281 --- ekiga-2.0.11.orig/lib/gmconf/gmconf-glib.c
282 +++ ekiga-2.0.11/lib/gmconf/gmconf-glib.c
283 @@ -1473,7 +1473,7 @@ gm_conf_destroy (const gchar *namespac)
284 }
285
286 gboolean
287 -gm_conf_is_key_writable (gchar *key)
288 +gm_conf_is_key_writable (const gchar *key)
289 {
290 g_return_val_if_fail (key != NULL, FALSE);
291
292
293
294
295 1.1 net-voip/ekiga/files/ekiga-eggtrayicon-update.diff
296
297 file : http://sources.gentoo.org/viewcvs.py/gentoo-x86/net-voip/ekiga/files/ekiga-eggtrayicon-update.diff?rev=1.1&view=markup
298 plain: http://sources.gentoo.org/viewcvs.py/gentoo-x86/net-voip/ekiga/files/ekiga-eggtrayicon-update.diff?rev=1.1&content-type=text/plain
299
300 Index: ekiga-eggtrayicon-update.diff
301 ===================================================================
302 --- lib/gui/gmtray/eggtrayicon.c 2006-01-07 09:25:47.000000000 +0100
303 +++ lib/gui/gmtray/eggtrayicon.c 2006-06-03 01:00:21.000000000 +0200
304 @@ -18,22 +18,60 @@
305 * Boston, MA 02111-1307, USA.
306 */
307
308 +#include <config.h>
309 #include <string.h>
310 -#ifndef WIN32
311 +#include <libintl.h>
312 +
313 +#include "eggtrayicon.h"
314 +
315 +#include <gdkconfig.h>
316 +#if defined (GDK_WINDOWING_X11)
317 #include <gdk/gdkx.h>
318 +#include <X11/Xatom.h>
319 +#elif defined (GDK_WINDOWING_WIN32)
320 +#include <gdk/gdkwin32.h>
321 +#endif
322 +
323 +#ifndef EGG_COMPILATION
324 +#ifndef _
325 +#define _(x) dgettext (GETTEXT_PACKAGE, x)
326 +#define N_(x) x
327 +#endif
328 +#else
329 +#define _(x) x
330 +#define N_(x) x
331 #endif
332 -#include "eggtrayicon.h"
333
334 #define SYSTEM_TRAY_REQUEST_DOCK 0
335 #define SYSTEM_TRAY_BEGIN_MESSAGE 1
336 #define SYSTEM_TRAY_CANCEL_MESSAGE 2
337 +
338 +#define SYSTEM_TRAY_ORIENTATION_HORZ 0
339 +#define SYSTEM_TRAY_ORIENTATION_VERT 1
340 +
341 +enum {
342 + PROP_0,
343 + PROP_ORIENTATION
344 +};
345
346 static GtkPlugClass *parent_class = NULL;
347
348 static void egg_tray_icon_init (EggTrayIcon *icon);
349 static void egg_tray_icon_class_init (EggTrayIconClass *klass);
350
351 -static void egg_tray_icon_update_manager_window (EggTrayIcon *icon);
352 +static void egg_tray_icon_get_property (GObject *object,
353 + guint prop_id,
354 + GValue *value,
355 + GParamSpec *pspec);
356 +
357 +static void egg_tray_icon_realize (GtkWidget *widget);
358 +static void egg_tray_icon_unrealize (GtkWidget *widget);
359 +
360 +#ifdef GDK_WINDOWING_X11
361 +static void egg_tray_icon_update_manager_window (EggTrayIcon *icon,
362 + gboolean dock_if_realized);
363 +static void egg_tray_icon_manager_window_destroyed (EggTrayIcon *icon);
364 +#endif
365
366 GType
367 egg_tray_icon_get_type (void)
368 @@ -65,6 +103,7 @@
369 egg_tray_icon_init (EggTrayIcon *icon)
370 {
371 icon->stamp = 1;
372 + icon->orientation = GTK_ORIENTATION_HORIZONTAL;
373
374 gtk_widget_add_events (GTK_WIDGET (icon), GDK_PROPERTY_CHANGE_MASK);
375 }
376 @@ -72,7 +111,105 @@
377 static void
378 egg_tray_icon_class_init (EggTrayIconClass *klass)
379 {
380 + GObjectClass *gobject_class = (GObjectClass *)klass;
381 + GtkWidgetClass *widget_class = (GtkWidgetClass *)klass;
382 +
383 parent_class = g_type_class_peek_parent (klass);
384 +
385 + gobject_class->get_property = egg_tray_icon_get_property;
386 +
387 + widget_class->realize = egg_tray_icon_realize;
388 + widget_class->unrealize = egg_tray_icon_unrealize;
389 +
390 + g_object_class_install_property (gobject_class,
391 + PROP_ORIENTATION,
392 + g_param_spec_enum ("orientation",
393 + _("Orientation"),
394 + _("The orientation of the tray."),
395 + GTK_TYPE_ORIENTATION,
396 + GTK_ORIENTATION_HORIZONTAL,
397 + G_PARAM_READABLE));
398 +
399 +#if defined (GDK_WINDOWING_X11)
400 + /* Nothing */
401 +#elif defined (GDK_WINDOWING_WIN32)
402 + g_warning ("Port eggtrayicon to Win32");
403 +#else
404 + g_warning ("Port eggtrayicon to this GTK+ backend");
405 +#endif
406 +}
407 +
408 +static void
409 +egg_tray_icon_get_property (GObject *object,
410 + guint prop_id,
411 + GValue *value,
412 + GParamSpec *pspec)
413 +{
414 + EggTrayIcon *icon = EGG_TRAY_ICON (object);
415 +
416 + switch (prop_id)
417 + {
418 + case PROP_ORIENTATION:
419 + g_value_set_enum (value, icon->orientation);
420 + break;
421 + default:
422 + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
423 + break;
424 + }
425 +}
426 +
427 +#ifdef GDK_WINDOWING_X11
428 +
429 +static void
430 +egg_tray_icon_get_orientation_property (EggTrayIcon *icon)
431 +{
432 + Display *xdisplay;
433 + Atom type;
434 + int format;
435 + union {
436 + gulong *prop;
437 + guchar *prop_ch;
438 + } prop = { NULL };
439 + gulong nitems;
440 + gulong bytes_after;
441 + int error, result;
442 +
443 + g_assert (icon->manager_window != None);
444 +
445 + xdisplay = GDK_DISPLAY_XDISPLAY (gtk_widget_get_display (GTK_WIDGET (icon)));
446 +
447 + gdk_error_trap_push ();
448 + type = None;
449 + result = XGetWindowProperty (xdisplay,
450 + icon->manager_window,
451 + icon->orientation_atom,
452 + 0, G_MAXLONG, FALSE,
453 + XA_CARDINAL,
454 + &type, &format, &nitems,
455 + &bytes_after, &(prop.prop_ch));
456 + error = gdk_error_trap_pop ();
457 +
458 + if (error || result != Success)
459 + return;
460 +
461 + if (type == XA_CARDINAL)
462 + {
463 + GtkOrientation orientation;
464 +
465 + orientation = (prop.prop [0] == SYSTEM_TRAY_ORIENTATION_HORZ) ?
466 + GTK_ORIENTATION_HORIZONTAL :
467 + GTK_ORIENTATION_VERTICAL;
468 +
469 + if (icon->orientation != orientation)
470 + {
471 + icon->orientation = orientation;
472 +
473 + g_object_notify (G_OBJECT (icon), "orientation");
474 + }
475 + }
476 +
477 + if (prop.prop)
478 + XFree (prop.prop);
479 }
480
481 static GdkFilterReturn
482 @@ -85,19 +222,53 @@
483 xev->xclient.message_type == icon->manager_atom &&
484 xev->xclient.data.l[1] == icon->selection_atom)
485 {
486 - egg_tray_icon_update_manager_window (icon);
487 + egg_tray_icon_update_manager_window (icon, TRUE);
488 }
489 else if (xev->xany.window == icon->manager_window)
490 {
491 + if (xev->xany.type == PropertyNotify &&
492 + xev->xproperty.atom == icon->orientation_atom)
493 + {
494 + egg_tray_icon_get_orientation_property (icon);
495 + }
496 if (xev->xany.type == DestroyNotify)
497 {
498 - egg_tray_icon_update_manager_window (icon);
499 + egg_tray_icon_manager_window_destroyed (icon);
500 }
501 }
502 -
503 return GDK_FILTER_CONTINUE;
504 }
505
506 +#endif
507 +
508 +static void
509 +egg_tray_icon_unrealize (GtkWidget *widget)
510 +{
511 +#ifdef GDK_WINDOWING_X11
512 + EggTrayIcon *icon = EGG_TRAY_ICON (widget);
513 + GdkWindow *root_window;
514 +
515 + if (icon->manager_window != None)
516 + {
517 + GdkWindow *gdkwin;
518 +
519 + gdkwin = gdk_window_lookup_for_display (gtk_widget_get_display (widget),
520 + icon->manager_window);
521 +
522 + gdk_window_remove_filter (gdkwin, egg_tray_icon_manager_filter, icon);
523 + }
524 +
525 + root_window = gdk_screen_get_root_window (gtk_widget_get_screen (widget));
526 +
527 + gdk_window_remove_filter (root_window, egg_tray_icon_manager_filter, icon);
528 +
529 + if (GTK_WIDGET_CLASS (parent_class)->unrealize)
530 + (* GTK_WIDGET_CLASS (parent_class)->unrealize) (widget);
531 +#endif
532 +}
533 +
534 +#ifdef GDK_WINDOWING_X11
535 +
536 static void
537 egg_tray_icon_send_manager_message (EggTrayIcon *icon,
538 long message,
539 @@ -119,11 +290,7 @@
540 ev.data.l[3] = data2;
541 ev.data.l[4] = data3;
542
543 -#if HAVE_GTK_MULTIHEAD
544 display = GDK_DISPLAY_XDISPLAY (gtk_widget_get_display (GTK_WIDGET (icon)));
545 -#else
546 - display = gdk_display;
547 -#endif
548
549 gdk_error_trap_push ();
550 XSendEvent (display,
551 @@ -143,29 +310,15 @@
552 }
553
554 static void
555 -egg_tray_icon_update_manager_window (EggTrayIcon *icon)
556 +egg_tray_icon_update_manager_window (EggTrayIcon *icon,
557 + gboolean dock_if_realized)
558 {
559 Display *xdisplay;
560
561 -#if HAVE_GTK_MULTIHEAD
562 - xdisplay = GDK_DISPLAY_XDISPLAY (gtk_widget_get_display (GTK_WIDGET (icon)));
563 -#else
564 - xdisplay = gdk_display;
565 -#endif
566 -
567 if (icon->manager_window != None)
568 - {
569 - GdkWindow *gdkwin;
570 + return;
571
572 -#if HAVE_GTK_MULTIHEAD
573 - gdkwin = gdk_window_lookup_for_display (display,
574 - icon->manager_window);
575 -#else
576 - gdkwin = gdk_window_lookup (icon->manager_window);
577 -#endif
578 -
579 - gdk_window_remove_filter (gdkwin, egg_tray_icon_manager_filter, icon);
580 - }
581 + xdisplay = GDK_DISPLAY_XDISPLAY (gtk_widget_get_display (GTK_WIDGET (icon)));
582
583 XGrabServer (xdisplay);
584
585 @@ -174,7 +327,7 @@
586
587 if (icon->manager_window != None)
588 XSelectInput (xdisplay,
589 - icon->manager_window, StructureNotifyMask);
590 + icon->manager_window, StructureNotifyMask|PropertyChangeMask);
591
592 XUngrabServer (xdisplay);
593 XFlush (xdisplay);
594 @@ -183,87 +336,95 @@
595 {
596 GdkWindow *gdkwin;
597
598 -#if HAVE_GTK_MULTIHEAD
599 gdkwin = gdk_window_lookup_for_display (gtk_widget_get_display (GTK_WIDGET (icon)),
600 icon->manager_window);
601 -#else
602 - gdkwin = gdk_window_lookup (icon->manager_window);
603 -#endif
604
605 gdk_window_add_filter (gdkwin, egg_tray_icon_manager_filter, icon);
606
607 - /* Send a request that we'd like to dock */
608 - egg_tray_icon_send_dock_request (icon);
609 + if (dock_if_realized && GTK_WIDGET_REALIZED (icon))
610 + egg_tray_icon_send_dock_request (icon);
611 +
612 + egg_tray_icon_get_orientation_property (icon);
613 }
614 }
615
616 -EggTrayIcon *
617 -egg_tray_icon_new_for_xscreen (Screen *xscreen, const char *name)
618 +static void
619 +egg_tray_icon_manager_window_destroyed (EggTrayIcon *icon)
620 {
621 - EggTrayIcon *icon;
622 + GdkWindow *gdkwin;
623 +
624 + g_return_if_fail (icon->manager_window != None);
625 +
626 + gdkwin = gdk_window_lookup_for_display (gtk_widget_get_display (GTK_WIDGET (icon)),
627 + icon->manager_window);
628 +
629 + gdk_window_remove_filter (gdkwin, egg_tray_icon_manager_filter, icon);
630 +
631 + icon->manager_window = None;
632 +
633 + egg_tray_icon_update_manager_window (icon, TRUE);
634 +}
635 +
636 +#endif
637 +
638 +static void
639 +egg_tray_icon_realize (GtkWidget *widget)
640 +{
641 +#ifdef GDK_WINDOWING_X11
642 + EggTrayIcon *icon = EGG_TRAY_ICON (widget);
643 + GdkScreen *screen;
644 + GdkDisplay *display;
645 + Display *xdisplay;
646 char buffer[256];
647 GdkWindow *root_window;
648
649 - g_return_val_if_fail (xscreen != NULL, NULL);
650 -
651 - icon = g_object_new (EGG_TYPE_TRAY_ICON, NULL);
652 - gtk_window_set_title (GTK_WINDOW (icon), name);
653 + if (GTK_WIDGET_CLASS (parent_class)->realize)
654 + GTK_WIDGET_CLASS (parent_class)->realize (widget);
655
656 -#if HAVE_GTK_MULTIHEAD
657 - gtk_plug_construct_for_display (GTK_PLUG (icon),
658 - gdk_screen_get_display (screen), 0);
659 -#else
660 - gtk_plug_construct (GTK_PLUG (icon), 0);
661 -#endif
662 -
663 - gtk_widget_realize (GTK_WIDGET (icon));
664 + screen = gtk_widget_get_screen (widget);
665 + display = gdk_screen_get_display (screen);
666 + xdisplay = gdk_x11_display_get_xdisplay (display);
667
668 /* Now see if there's a manager window around */
669 g_snprintf (buffer, sizeof (buffer),
670 "_NET_SYSTEM_TRAY_S%d",
671 - XScreenNumberOfScreen (xscreen));
672 -
673 - icon->selection_atom = XInternAtom (DisplayOfScreen (xscreen),
674 - buffer, False);
675 + gdk_screen_get_number (screen));
676 +
677 + icon->selection_atom = XInternAtom (xdisplay, buffer, False);
678
679 - icon->manager_atom = XInternAtom (DisplayOfScreen (xscreen),
680 - "MANAGER", False);
681 + icon->manager_atom = XInternAtom (xdisplay, "MANAGER", False);
682
683 - icon->system_tray_opcode_atom = XInternAtom (DisplayOfScreen (xscreen),
684 - "_NET_SYSTEM_TRAY_OPCODE", False);
685 + icon->system_tray_opcode_atom = XInternAtom (xdisplay,
686 + "_NET_SYSTEM_TRAY_OPCODE",
687 + False);
688 +
689 + icon->orientation_atom = XInternAtom (xdisplay,
690 + "_NET_SYSTEM_TRAY_ORIENTATION",
691 + False);
692
693 - egg_tray_icon_update_manager_window (icon);
694 + egg_tray_icon_update_manager_window (icon, FALSE);
695 + egg_tray_icon_send_dock_request (icon);
696
697 -#if HAVE_GTK_MULTIHEAD
698 root_window = gdk_screen_get_root_window (screen);
699 -#else
700 - root_window = gdk_window_lookup (gdk_x11_get_default_root_xwindow ());
701 -#endif
702
703 /* Add a root window filter so that we get changes on MANAGER */
704 gdk_window_add_filter (root_window,
705 egg_tray_icon_manager_filter, icon);
706 -
707 - return icon;
708 +#endif
709 }
710
711 -#if HAVE_GTK_MULTIHEAD
712 EggTrayIcon *
713 egg_tray_icon_new_for_screen (GdkScreen *screen, const char *name)
714 {
715 - EggTrayIcon *icon;
716 - char buffer[256];
717 -
718 g_return_val_if_fail (GDK_IS_SCREEN (screen), NULL);
719
720 - return egg_tray_icon_new_for_xscreen (GDK_SCREEN_XSCREEN (screen), name);
721 + return g_object_new (EGG_TYPE_TRAY_ICON, "screen", screen, "title", name, NULL);
722 }
723 -#endif
724
725 EggTrayIcon*
726 egg_tray_icon_new (const gchar *name)
727 {
728 - return egg_tray_icon_new_for_xscreen (DefaultScreenOfDisplay (gdk_display), name);
729 + return g_object_new (EGG_TYPE_TRAY_ICON, "title", name, NULL);
730 }
731
732 guint
733 @@ -278,14 +439,17 @@
734 g_return_val_if_fail (timeout >= 0, 0);
735 g_return_val_if_fail (message != NULL, 0);
736
737 +#ifdef GDK_WINDOWING_X11
738 if (icon->manager_window == None)
739 return 0;
740 +#endif
741
742 if (len < 0)
743 len = strlen (message);
744
745 stamp = icon->stamp++;
746
747 +#ifdef GDK_WINDOWING_X11
748 /* Get ready to send the message */
749 egg_tray_icon_send_manager_message (icon, SYSTEM_TRAY_BEGIN_MESSAGE,
750 (Window)gtk_plug_get_id (GTK_PLUG (icon)),
751 @@ -298,11 +462,7 @@
752 XClientMessageEvent ev;
753 Display *xdisplay;
754
755 -#if HAVE_GTK_MULTIHEAD
756 xdisplay = GDK_DISPLAY_XDISPLAY (gtk_widget_get_display (GTK_WIDGET (icon)));
757 -#else
758 - xdisplay = gdk_display;
759 -#endif
760
761 ev.type = ClientMessage;
762 ev.window = (Window)gtk_plug_get_id (GTK_PLUG (icon));
763 @@ -326,6 +486,7 @@
764 XSync (xdisplay, False);
765 }
766 gdk_error_trap_pop ();
767 +#endif
768
769 return stamp;
770 }
771 @@ -336,8 +497,17 @@
772 {
773 g_return_if_fail (EGG_IS_TRAY_ICON (icon));
774 g_return_if_fail (id > 0);
775 -
776 +#ifdef GDK_WINDOWING_X11
777 egg_tray_icon_send_manager_message (icon, SYSTEM_TRAY_CANCEL_MESSAGE,
778 (Window)gtk_plug_get_id (GTK_PLUG (icon)),
779 id, 0, 0);
780 +#endif
781 +}
782 +
783 +GtkOrientation
784 +egg_tray_icon_get_orientation (EggTrayIcon *icon)
785 +{
786 + g_return_val_if_fail (EGG_IS_TRAY_ICON (icon), GTK_ORIENTATION_HORIZONTAL);
787 +
788 + return icon->orientation;
789 }
790 --- lib/gui/gmtray/eggtrayicon.h 2006-01-07 09:25:47.000000000 +0100
791 +++ lib/gui/gmtray/eggtrayicon.h 2006-06-03 01:00:42.000000000 +0200
792 @@ -22,7 +22,9 @@
793 #define __EGG_TRAY_ICON_H__
794
795 #include <gtk/gtkplug.h>
796 +#ifdef GDK_WINDOWING_X11
797 #include <gdk/gdkx.h>
798 +#endif
799
800 G_BEGIN_DECLS
801
802 @@ -42,10 +44,14 @@
803
804 guint stamp;
805
806 +#ifdef GDK_WINDOWING_X11
807 Atom selection_atom;
808 Atom manager_atom;
809 Atom system_tray_opcode_atom;
810 + Atom orientation_atom;
811 Window manager_window;
812 +#endif
813 + GtkOrientation orientation;
814 };
815
816 struct _EggTrayIconClass
817 @@ -55,10 +61,8 @@
818
819 GType egg_tray_icon_get_type (void);
820
821 -#if EGG_TRAY_ENABLE_MULTIHEAD
822 EggTrayIcon *egg_tray_icon_new_for_screen (GdkScreen *screen,
823 const gchar *name);
824 -#endif
825
826 EggTrayIcon *egg_tray_icon_new (const gchar *name);
827
828 @@ -69,7 +73,7 @@
829 void egg_tray_icon_cancel_message (EggTrayIcon *icon,
830 guint id);
831
832 -
833 +GtkOrientation egg_tray_icon_get_orientation (EggTrayIcon *icon);
834
835 G_END_DECLS