Package: gmpc
Followup-For: Bug #295492

Hi,

I would to propose a patch for this bug. All it does, is replace 
src/eggtrayicon.c
with one which comes with gajim, actually. I think this could be
reported upstream.

-- System Information:
Debian Release: 4.0
  APT prefers unstable
  APT policy: (500, 'unstable'), (500, 'testing'), (500, 'stable'), (1, 
'experimental')
Architecture: i386 (i686)
Shell:  /bin/sh linked to /bin/bash
Kernel: Linux 2.6.20.3-0-k7-swsusp2
Locale: LANG=ru_RU.UTF-8, LC_CTYPE=ru_RU.UTF-8 (charmap=UTF-8)

Versions of packages gmpc depends on:
ii  libatk1. 1.12.4-3                        The ATK accessibility toolkit
ii  libc6    2.5-0exp6                       GNU C Library: Shared libraries
ii  libcairo 1.2.6-1                         The Cairo 2D vector graphics libra
ii  libcomer 1.39+1.40-WIP-2006.11.14+dfsg-2 common error description library
ii  libcurl3 7.15.5-1                        Multi-protocol file transfer libra
ii  libfontc 2.4.2-1.2                       generic font configuration library
ii  libglade 1:2.6.0-4                       library to load .glade files at ru
ii  libglib2 2.12.6-2                        The GLib library of C routines
ii  libgtk2. 2.10.11-1                       The GTK+ graphical user interface 
ii  libice6  1:1.0.1-2                       X11 Inter-Client Exchange library
ii  libidn11 0.6.5-1                         GNU libidn library, implementation
ii  libkrb53 1.4.4-7                         MIT Kerberos runtime libraries
ii  libmpd0  0.13.0-1                        High-level client library for acce
ii  libpango 1.16.1-1                        Layout and rendering of internatio
ii  libsm6   1:1.0.1-3                       X11 Session Management library
ii  libssl0. 0.9.8e-4                        SSL shared libraries
ii  libx11-6 2:1.1.1-1                       X11 client-side library
ii  libxcurs 1:1.1.8-1                       X cursor management library
ii  libxext6 1:1.0.3-1                       X11 miscellaneous extension librar
ii  libxfixe 1:4.0.3-1                       X11 miscellaneous 'fixes' extensio
ii  libxi6   2:1.1.0-2                       X11 Input extension library
ii  libxiner 1:1.0.1-4.1                     X11 Xinerama extension library
ii  libxml2  2.6.27.dfsg-1                   GNOME XML library
ii  libxrand 2:1.2.0-4                       X11 RandR extension library
ii  libxrend 1:0.9.1-3                       X Rendering Extension client libra
ii  zlib1g   1:1.2.3-13                      compression library - runtime

gmpc recommends no packages.

-- no debconf information
diff -bwBurN gmpc-0.14.0.orig/src/eggtrayicon.c gmpc-0.14.0/src/eggtrayicon.c
--- gmpc-0.14.0.orig/src/eggtrayicon.c	2007-02-18 06:09:47.000000000 +0600
+++ gmpc-0.14.0/src/eggtrayicon.c	2007-03-31 00:11:48.000000000 +0700
@@ -1,4 +1,3 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
 /* eggtrayicon.c
  * Copyright (C) 2002 Anders Carlsson <[EMAIL PROTECTED]>
  *
@@ -20,6 +19,7 @@
 
 #include <config.h>
 #include <string.h>
+#include <glib/gi18n.h>
 #include <libintl.h>
 
 #include "eggtrayicon.h"
@@ -64,6 +64,8 @@
 					GValue     *value,
 					GParamSpec *pspec);
 
+static void egg_tray_icon_add (GtkContainer *container, GtkWidget *widget);
+
 static void egg_tray_icon_realize   (GtkWidget *widget);
 static void egg_tray_icon_unrealize (GtkWidget *widget);
 
@@ -113,6 +115,7 @@
 {
   GObjectClass *gobject_class = (GObjectClass *)klass;
   GtkWidgetClass *widget_class = (GtkWidgetClass *)klass;
+  GtkContainerClass *container_class = (GtkContainerClass *)klass;
 
   parent_class = g_type_class_peek_parent (klass);
 
@@ -121,6 +124,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",
@@ -348,6 +353,36 @@
     }
 }
 
+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)
 {
@@ -381,6 +416,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);
@@ -413,6 +450,14 @@
 #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)
 {

Reply via email to