Login
[x]
Log in using an account from:
Fedora Account System
Red Hat Associate
Red Hat Customer
Or login using a Red Hat Bugzilla account
Forgot Password
Login:
Hide Forgot
Create an Account
Red Hat Bugzilla – Attachment 312937 Details for
Bug 457151
gnome-ppp status icon transparent background patch
[?]
New
Simple Search
Advanced Search
My Links
Browse
Requests
Reports
Current State
Search
Tabular reports
Graphical reports
Duplicates
Other Reports
User Changes
Plotly Reports
Bug Status
Bug Severity
Non-Defaults
|
Product Dashboard
Help
Page Help!
Bug Writing Guidelines
What's new
Browser Support Policy
5.0.4.rh83 Release notes
FAQ
Guides index
User guide
Web Services
Contact
Legal
This site requires JavaScript to be enabled to function correctly, please enable it.
[patch]
eggtrayicon code update
eggtrayicon-update.patch (text/plain), 13.87 KB, created by
Michal Ruzicka
on 2008-07-29 21:29:06 UTC
(
hide
)
Description:
eggtrayicon code update
Filename:
MIME Type:
Creator:
Michal Ruzicka
Created:
2008-07-29 21:29:06 UTC
Size:
13.87 KB
patch
obsolete
>diff -Naur gnome-ppp-0.3.23.orig/src/eggtrayicon.c gnome-ppp-0.3.23/src/eggtrayicon.c >--- gnome-ppp-0.3.23.orig/src/eggtrayicon.c 2004-07-08 10:43:18.000000000 +0200 >+++ gnome-ppp-0.3.23/src/eggtrayicon.c 2008-07-29 21:52:59.000000000 +0200 >@@ -20,19 +20,58 @@ > > #include <string.h> > #include <config.h> >-#include <gdk/gdkx.h> >+#include <libintl.h> >+ > #include "eggtrayicon.h" > >+#include <gdkconfig.h> >+#if defined (GDK_WINDOWING_X11) >+#include <gdk/gdkx.h> >+#include <X11/Xatom.h> >+#elif defined (GDK_WINDOWING_WIN32) >+#include <gdk/gdkwin32.h> >+#endif >+ >+#ifndef EGG_COMPILATION >+#ifndef _ >+#define _(x) dgettext (GETTEXT_PACKAGE, x) >+#define N_(x) x >+#endif >+#else >+#define _(x) x >+#define N_(x) x >+#endif >+ > #define SYSTEM_TRAY_REQUEST_DOCK 0 > #define SYSTEM_TRAY_BEGIN_MESSAGE 1 > #define SYSTEM_TRAY_CANCEL_MESSAGE 2 >+ >+#define SYSTEM_TRAY_ORIENTATION_HORZ 0 >+#define SYSTEM_TRAY_ORIENTATION_VERT 1 >+ >+enum { >+ PROP_0, >+ PROP_ORIENTATION >+}; > > static GtkPlugClass *parent_class = NULL; > > static void egg_tray_icon_init (EggTrayIcon *icon); > static void egg_tray_icon_class_init (EggTrayIconClass *klass); > >-static void egg_tray_icon_update_manager_window (EggTrayIcon *icon); >+static void egg_tray_icon_get_property (GObject *object, >+ guint prop_id, >+ GValue *value, >+ GParamSpec *pspec); >+ >+static void egg_tray_icon_realize (GtkWidget *widget); >+static void egg_tray_icon_unrealize (GtkWidget *widget); >+ >+#ifdef GDK_WINDOWING_X11 >+static void egg_tray_icon_update_manager_window (EggTrayIcon *icon, >+ gboolean dock_if_realized); >+static void egg_tray_icon_manager_window_destroyed (EggTrayIcon *icon); >+#endif > > GType > egg_tray_icon_get_type (void) >@@ -64,6 +103,7 @@ > egg_tray_icon_init (EggTrayIcon *icon) > { > icon->stamp = 1; >+ icon->orientation = GTK_ORIENTATION_HORIZONTAL; > > gtk_widget_add_events (GTK_WIDGET (icon), GDK_PROPERTY_CHANGE_MASK); > } >@@ -71,7 +111,105 @@ > static void > egg_tray_icon_class_init (EggTrayIconClass *klass) > { >+ GObjectClass *gobject_class = (GObjectClass *)klass; >+ GtkWidgetClass *widget_class = (GtkWidgetClass *)klass; >+ > parent_class = g_type_class_peek_parent (klass); >+ >+ gobject_class->get_property = egg_tray_icon_get_property; >+ >+ widget_class->realize = egg_tray_icon_realize; >+ widget_class->unrealize = egg_tray_icon_unrealize; >+ >+ g_object_class_install_property (gobject_class, >+ PROP_ORIENTATION, >+ g_param_spec_enum ("orientation", >+ _("Orientation"), >+ _("The orientation of the tray."), >+ GTK_TYPE_ORIENTATION, >+ GTK_ORIENTATION_HORIZONTAL, >+ G_PARAM_READABLE)); >+ >+#if defined (GDK_WINDOWING_X11) >+ /* Nothing */ >+#elif defined (GDK_WINDOWING_WIN32) >+ g_warning ("Port eggtrayicon to Win32"); >+#else >+ g_warning ("Port eggtrayicon to this GTK+ backend"); >+#endif >+} >+ >+static void >+egg_tray_icon_get_property (GObject *object, >+ guint prop_id, >+ GValue *value, >+ GParamSpec *pspec) >+{ >+ EggTrayIcon *icon = EGG_TRAY_ICON (object); >+ >+ switch (prop_id) >+ { >+ case PROP_ORIENTATION: >+ g_value_set_enum (value, icon->orientation); >+ break; >+ default: >+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); >+ break; >+ } >+} >+ >+#ifdef GDK_WINDOWING_X11 >+ >+static void >+egg_tray_icon_get_orientation_property (EggTrayIcon *icon) >+{ >+ Display *xdisplay; >+ Atom type; >+ int format; >+ union { >+ gulong *prop; >+ guchar *prop_ch; >+ } prop = { NULL }; >+ gulong nitems; >+ gulong bytes_after; >+ int error, result; >+ >+ g_assert (icon->manager_window != None); >+ >+ xdisplay = GDK_DISPLAY_XDISPLAY (gtk_widget_get_display (GTK_WIDGET (icon))); >+ >+ gdk_error_trap_push (); >+ type = None; >+ result = XGetWindowProperty (xdisplay, >+ icon->manager_window, >+ icon->orientation_atom, >+ 0, G_MAXLONG, FALSE, >+ XA_CARDINAL, >+ &type, &format, &nitems, >+ &bytes_after, &(prop.prop_ch)); >+ error = gdk_error_trap_pop (); >+ >+ if (error || result != Success) >+ return; >+ >+ if (type == XA_CARDINAL) >+ { >+ GtkOrientation orientation; >+ >+ orientation = (prop.prop [0] == SYSTEM_TRAY_ORIENTATION_HORZ) ? >+ GTK_ORIENTATION_HORIZONTAL : >+ GTK_ORIENTATION_VERTICAL; >+ >+ if (icon->orientation != orientation) >+ { >+ icon->orientation = orientation; >+ >+ g_object_notify (G_OBJECT (icon), "orientation"); >+ } >+ } >+ >+ if (prop.prop) >+ XFree (prop.prop); > } > > static GdkFilterReturn >@@ -84,19 +222,53 @@ > xev->xclient.message_type == icon->manager_atom && > xev->xclient.data.l[1] == icon->selection_atom) > { >- egg_tray_icon_update_manager_window (icon); >+ egg_tray_icon_update_manager_window (icon, TRUE); > } > else if (xev->xany.window == icon->manager_window) > { >+ if (xev->xany.type == PropertyNotify && >+ xev->xproperty.atom == icon->orientation_atom) >+ { >+ egg_tray_icon_get_orientation_property (icon); >+ } > if (xev->xany.type == DestroyNotify) > { >- egg_tray_icon_update_manager_window (icon); >+ egg_tray_icon_manager_window_destroyed (icon); > } > } >- > return GDK_FILTER_CONTINUE; > } > >+#endif >+ >+static void >+egg_tray_icon_unrealize (GtkWidget *widget) >+{ >+#ifdef GDK_WINDOWING_X11 >+ EggTrayIcon *icon = EGG_TRAY_ICON (widget); >+ GdkWindow *root_window; >+ >+ if (icon->manager_window != None) >+ { >+ GdkWindow *gdkwin; >+ >+ gdkwin = gdk_window_lookup_for_display (gtk_widget_get_display (widget), >+ icon->manager_window); >+ >+ gdk_window_remove_filter (gdkwin, egg_tray_icon_manager_filter, icon); >+ } >+ >+ root_window = gdk_screen_get_root_window (gtk_widget_get_screen (widget)); >+ >+ gdk_window_remove_filter (root_window, egg_tray_icon_manager_filter, icon); >+ >+ if (GTK_WIDGET_CLASS (parent_class)->unrealize) >+ (* GTK_WIDGET_CLASS (parent_class)->unrealize) (widget); >+#endif >+} >+ >+#ifdef GDK_WINDOWING_X11 >+ > static void > egg_tray_icon_send_manager_message (EggTrayIcon *icon, > long message, >@@ -118,11 +290,7 @@ > ev.data.l[3] = data2; > ev.data.l[4] = data3; > >-#if HAVE_GTK_MULTIHEAD > display = GDK_DISPLAY_XDISPLAY (gtk_widget_get_display (GTK_WIDGET (icon))); >-#else >- display = gdk_display; >-#endif > > gdk_error_trap_push (); > XSendEvent (display, >@@ -142,29 +310,15 @@ > } > > static void >-egg_tray_icon_update_manager_window (EggTrayIcon *icon) >+egg_tray_icon_update_manager_window (EggTrayIcon *icon, >+ gboolean dock_if_realized) > { > Display *xdisplay; > >-#if HAVE_GTK_MULTIHEAD >- xdisplay = GDK_DISPLAY_XDISPLAY (gtk_widget_get_display (GTK_WIDGET (icon))); >-#else >- xdisplay = gdk_display; >-#endif >- > if (icon->manager_window != None) >- { >- GdkWindow *gdkwin; >+ return; > >-#if HAVE_GTK_MULTIHEAD >- gdkwin = gdk_window_lookup_for_display (display, >- icon->manager_window); >-#else >- gdkwin = gdk_window_lookup (icon->manager_window); >-#endif >- >- gdk_window_remove_filter (gdkwin, egg_tray_icon_manager_filter, icon); >- } >+ xdisplay = GDK_DISPLAY_XDISPLAY (gtk_widget_get_display (GTK_WIDGET (icon))); > > XGrabServer (xdisplay); > >@@ -173,7 +327,7 @@ > > if (icon->manager_window != None) > XSelectInput (xdisplay, >- icon->manager_window, StructureNotifyMask); >+ icon->manager_window, StructureNotifyMask|PropertyChangeMask); > > XUngrabServer (xdisplay); > XFlush (xdisplay); >@@ -182,90 +336,95 @@ > { > GdkWindow *gdkwin; > >-#if HAVE_GTK_MULTIHEAD > gdkwin = gdk_window_lookup_for_display (gtk_widget_get_display (GTK_WIDGET (icon)), > icon->manager_window); >-#else >- gdkwin = gdk_window_lookup (icon->manager_window); >-#endif > > gdk_window_add_filter (gdkwin, egg_tray_icon_manager_filter, icon); > >- /* Send a request that we'd like to dock */ >- egg_tray_icon_send_dock_request (icon); >+ if (dock_if_realized && GTK_WIDGET_REALIZED (icon)) >+ egg_tray_icon_send_dock_request (icon); >+ >+ egg_tray_icon_get_orientation_property (icon); > } > } > >-EggTrayIcon * >-egg_tray_icon_new_for_xscreen (Screen *xscreen, const char *name); >+static void >+egg_tray_icon_manager_window_destroyed (EggTrayIcon *icon) >+{ >+ GdkWindow *gdkwin; >+ >+ g_return_if_fail (icon->manager_window != None); > >-EggTrayIcon * >-egg_tray_icon_new_for_xscreen (Screen *xscreen, const char *name) >+ gdkwin = gdk_window_lookup_for_display (gtk_widget_get_display (GTK_WIDGET (icon)), >+ icon->manager_window); >+ >+ gdk_window_remove_filter (gdkwin, egg_tray_icon_manager_filter, icon); >+ >+ icon->manager_window = None; >+ >+ egg_tray_icon_update_manager_window (icon, TRUE); >+} >+ >+#endif >+ >+static void >+egg_tray_icon_realize (GtkWidget *widget) > { >- EggTrayIcon *icon; >+#ifdef GDK_WINDOWING_X11 >+ EggTrayIcon *icon = EGG_TRAY_ICON (widget); >+ GdkScreen *screen; >+ GdkDisplay *display; >+ Display *xdisplay; > char buffer[256]; > GdkWindow *root_window; > >- g_return_val_if_fail (xscreen != NULL, NULL); >- >- icon = g_object_new (EGG_TYPE_TRAY_ICON, NULL); >- gtk_window_set_title (GTK_WINDOW (icon), name); >+ if (GTK_WIDGET_CLASS (parent_class)->realize) >+ GTK_WIDGET_CLASS (parent_class)->realize (widget); > >-#if HAVE_GTK_MULTIHEAD >- gtk_plug_construct_for_display (GTK_PLUG (icon), >- gdk_screen_get_display (screen), 0); >-#else >- gtk_plug_construct (GTK_PLUG (icon), 0); >-#endif >- >- gtk_widget_realize (GTK_WIDGET (icon)); >+ screen = gtk_widget_get_screen (widget); >+ display = gdk_screen_get_display (screen); >+ xdisplay = gdk_x11_display_get_xdisplay (display); > > /* Now see if there's a manager window around */ > g_snprintf (buffer, sizeof (buffer), > "_NET_SYSTEM_TRAY_S%d", >- XScreenNumberOfScreen (xscreen)); >- >- icon->selection_atom = XInternAtom (DisplayOfScreen (xscreen), >- buffer, False); >+ gdk_screen_get_number (screen)); >+ >+ icon->selection_atom = XInternAtom (xdisplay, buffer, False); > >- icon->manager_atom = XInternAtom (DisplayOfScreen (xscreen), >- "MANAGER", False); >+ icon->manager_atom = XInternAtom (xdisplay, "MANAGER", False); > >- icon->system_tray_opcode_atom = XInternAtom (DisplayOfScreen (xscreen), >- "_NET_SYSTEM_TRAY_OPCODE", False); >+ icon->system_tray_opcode_atom = XInternAtom (xdisplay, >+ "_NET_SYSTEM_TRAY_OPCODE", >+ False); >+ >+ icon->orientation_atom = XInternAtom (xdisplay, >+ "_NET_SYSTEM_TRAY_ORIENTATION", >+ False); > >- egg_tray_icon_update_manager_window (icon); >+ egg_tray_icon_update_manager_window (icon, FALSE); >+ egg_tray_icon_send_dock_request (icon); > >-#if HAVE_GTK_MULTIHEAD > root_window = gdk_screen_get_root_window (screen); >-#else >- root_window = gdk_window_lookup (gdk_x11_get_default_root_xwindow ()); >-#endif > > /* Add a root window filter so that we get changes on MANAGER */ > gdk_window_add_filter (root_window, > egg_tray_icon_manager_filter, icon); >- >- return icon; >+#endif > } > >-#if HAVE_GTK_MULTIHEAD > EggTrayIcon * > egg_tray_icon_new_for_screen (GdkScreen *screen, const char *name) > { >- EggTrayIcon *icon; >- char buffer[256]; >- > g_return_val_if_fail (GDK_IS_SCREEN (screen), NULL); > >- return egg_tray_icon_new_for_xscreen (GDK_SCREEN_XSCREEN (screen), name); >+ return g_object_new (EGG_TYPE_TRAY_ICON, "screen", screen, "title", name, NULL); > } >-#endif > > EggTrayIcon* > egg_tray_icon_new (const gchar *name) > { >- return egg_tray_icon_new_for_xscreen (DefaultScreenOfDisplay (gdk_display), name); >+ return g_object_new (EGG_TYPE_TRAY_ICON, "title", name, NULL); > } > > guint >@@ -280,14 +439,17 @@ > g_return_val_if_fail (timeout >= 0, 0); > g_return_val_if_fail (message != NULL, 0); > >+#ifdef GDK_WINDOWING_X11 > if (icon->manager_window == None) > return 0; >+#endif > > if (len < 0) > len = strlen (message); > > stamp = icon->stamp++; > >+#ifdef GDK_WINDOWING_X11 > /* Get ready to send the message */ > egg_tray_icon_send_manager_message (icon, SYSTEM_TRAY_BEGIN_MESSAGE, > (Window)gtk_plug_get_id (GTK_PLUG (icon)), >@@ -300,11 +462,7 @@ > XClientMessageEvent ev; > Display *xdisplay; > >-#if HAVE_GTK_MULTIHEAD > xdisplay = GDK_DISPLAY_XDISPLAY (gtk_widget_get_display (GTK_WIDGET (icon))); >-#else >- xdisplay = gdk_display; >-#endif > > ev.type = ClientMessage; > ev.window = (Window)gtk_plug_get_id (GTK_PLUG (icon)); >@@ -328,6 +486,7 @@ > XSync (xdisplay, False); > } > gdk_error_trap_pop (); >+#endif > > return stamp; > } >@@ -338,8 +497,17 @@ > { > g_return_if_fail (EGG_IS_TRAY_ICON (icon)); > g_return_if_fail (id > 0); >- >+#ifdef GDK_WINDOWING_X11 > egg_tray_icon_send_manager_message (icon, SYSTEM_TRAY_CANCEL_MESSAGE, > (Window)gtk_plug_get_id (GTK_PLUG (icon)), > id, 0, 0); >+#endif >+} >+ >+GtkOrientation >+egg_tray_icon_get_orientation (EggTrayIcon *icon) >+{ >+ g_return_val_if_fail (EGG_IS_TRAY_ICON (icon), GTK_ORIENTATION_HORIZONTAL); >+ >+ return icon->orientation; > } >diff -Naur gnome-ppp-0.3.23.orig/src/eggtrayicon.h gnome-ppp-0.3.23/src/eggtrayicon.h >--- gnome-ppp-0.3.23.orig/src/eggtrayicon.h 2004-07-08 11:01:53.000000000 +0200 >+++ gnome-ppp-0.3.23/src/eggtrayicon.h 2008-07-29 21:52:59.000000000 +0200 >@@ -22,7 +22,9 @@ > #define __EGG_TRAY_ICON_H__ > > #include <gtk/gtkplug.h> >+#ifdef GDK_WINDOWING_X11 > #include <gdk/gdkx.h> >+#endif > > G_BEGIN_DECLS > >@@ -42,10 +44,14 @@ > > guint stamp; > >+#ifdef GDK_WINDOWING_X11 > Atom selection_atom; > Atom manager_atom; > Atom system_tray_opcode_atom; >+ Atom orientation_atom; > Window manager_window; >+#endif >+ GtkOrientation orientation; > }; > > struct _EggTrayIconClass >@@ -55,10 +61,8 @@ > > GType egg_tray_icon_get_type (void); > >-#if EGG_TRAY_ENABLE_MULTIHEAD > EggTrayIcon *egg_tray_icon_new_for_screen (GdkScreen *screen, > const gchar *name); >-#endif > > EggTrayIcon *egg_tray_icon_new (const gchar *name); > >@@ -69,7 +73,7 @@ > void egg_tray_icon_cancel_message (EggTrayIcon *icon, > guint id); > >- >+GtkOrientation egg_tray_icon_get_orientation (EggTrayIcon *icon); > > G_END_DECLS >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 457151
:
312937
|
312938
|
313052
|
313053
|
313054
|
313081
|
313082