rpms/rhythmbox/devel rhythmbox-0.9.5-transparent.patch, NONE, 1.1 rhythmbox.spec, 1.74, 1.75

fedora-cvs-commits at redhat.com fedora-cvs-commits at redhat.com
Fri Sep 8 01:58:31 UTC 2006


Author: mclasen

Update of /cvs/dist/rpms/rhythmbox/devel
In directory cvs.devel.redhat.com:/tmp/cvs-serv3561

Modified Files:
	rhythmbox.spec 
Added Files:
	rhythmbox-0.9.5-transparent.patch 
Log Message:
support transparent panels


rhythmbox-0.9.5-transparent.patch:
 eggtrayicon.c |   52 +++++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 49 insertions(+), 3 deletions(-)

--- NEW FILE rhythmbox-0.9.5-transparent.patch ---
===================================================================
RCS file: /cvs/gnome/rhythmbox/widgets/eggtrayicon.c,v
retrieving revision 1.15
retrieving revision 1.17
diff -u -r1.15 -r1.17
--- rhythmbox/widgets/eggtrayicon.c	2006/05/19 08:43:54	1.15
+++ rhythmbox/widgets/eggtrayicon.c	2006/07/24 13:28:41	1.17
@@ -85,6 +85,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);
+
 #ifdef GDK_WINDOWING_X11
 static void egg_tray_icon_update_manager_window    (EggTrayIcon *icon,
 						    gboolean     dock_if_realized);
@@ -133,6 +136,7 @@
 {
   GObjectClass *gobject_class = (GObjectClass *)klass;
   GtkWidgetClass *widget_class = (GtkWidgetClass *)klass;
+  GtkContainerClass *container_class = (GtkContainerClass *)klass;
 
   parent_class = g_type_class_peek_parent (klass);
 
@@ -141,6 +145,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",
@@ -381,16 +387,46 @@
     }
 }
 
+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;
-  
+
   g_return_if_fail (icon->manager_window != None);
 
   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;
@@ -425,6 +461,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);
@@ -450,13 +488,21 @@
   egg_tray_icon_send_dock_request (icon);
 
   root_window = gdk_screen_get_root_window (screen);
-  
+
   /* Add a root window filter so that we get changes on MANAGER */
   gdk_window_add_filter (root_window,
 			 egg_tray_icon_manager_filter, icon);
 #endif
 }
 
+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)
 {


Index: rhythmbox.spec
===================================================================
RCS file: /cvs/dist/rpms/rhythmbox/devel/rhythmbox.spec,v
retrieving revision 1.74
retrieving revision 1.75
diff -u -r1.74 -r1.75
--- rhythmbox.spec	19 Jul 2006 19:16:43 -0000	1.74
+++ rhythmbox.spec	8 Sep 2006 01:58:29 -0000	1.75
@@ -3,7 +3,7 @@
 Name: rhythmbox
 Summary: Music Management Application 
 Version: 0.9.5
-Release: 2 
+Release: 3%{?dist} 
 License: GPL
 Group: Applications/Multimedia
 Source: ftp://ftp.gnome.org/pub/GNOME/sources/rhythmbox/0.8/%{name}-%{version}.tar.bz2
@@ -40,6 +40,7 @@
 
 Patch2: rhythmbox-0.9.3.1-use-icon-name.patch
 Patch3: rhythmbox-0.9.5-dbus-deprecated.patch
+Patch4: rhythmbox-0.9.5-transparent.patch
 
 %description
 Rhythmbox is an integrated music management application based on the powerful
@@ -51,6 +52,7 @@
 %setup -q
 %patch2 -p1 -b .use-icon-name
 %patch3 -p1 -b .dbus-deprecated
+%patch4 -p1 -b .transparent
 
 %build
 
@@ -130,6 +132,9 @@
 %{_libexecdir}/rhythmbox-metadata
 
 %changelog
+* Thu Sep  7 2006 Matthias Clasen <mclasen at redhat.com> - 0.9.5-3
+- Make the statusicon support transparent panels
+
 * Wed Jul 19 2006 John (J5) Palmieri <johnp at redhat.com> - 0.9.5-2
 - Add BR for dbus-glib-devel 
 - Add patch to fix deprecated dbus function




More information about the fedora-cvs-commits mailing list