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)
{