diff options
author | jylefort <jylefort@FreeBSD.org> | 2006-05-15 08:00:07 +0800 |
---|---|---|
committer | jylefort <jylefort@FreeBSD.org> | 2006-05-15 08:00:07 +0800 |
commit | ec89c673d4903c91cd8b891b8b90aba4fc00b8b9 (patch) | |
tree | 9b41e591648c4ecdf2aa17b2bba23f25c90beb28 | |
parent | 8008431cb8fd41f8395feb5d60ecce5cee607880 (diff) | |
download | freebsd-ports-gnome-ec89c673d4903c91cd8b891b8b90aba4fc00b8b9.tar.gz freebsd-ports-gnome-ec89c673d4903c91cd8b891b8b90aba4fc00b8b9.tar.zst freebsd-ports-gnome-ec89c673d4903c91cd8b891b8b90aba4fc00b8b9.zip |
Allow notification icons which use a hacked eggtrayicon.c to have a
transparent background.
Obtained from: Debian package via Bernat Tallaferro
6 files changed, 244 insertions, 2 deletions
diff --git a/x11/gnome-panel/Makefile b/x11/gnome-panel/Makefile index 34a93db968ca..f0448528cd25 100644 --- a/x11/gnome-panel/Makefile +++ b/x11/gnome-panel/Makefile @@ -22,7 +22,7 @@ PREFIX?= ${X11BASE} .if !defined(REFERENCE_PORT) -PORTREVISION= 1 +PORTREVISION= 2 RUN_DEPENDS= gnome-menu-editor:${PORTSDIR}/deskutils/gnome-menu-editor diff --git a/x11/gnome-panel/files/patch-applets_notification__area_eggtraymanager.c b/x11/gnome-panel/files/patch-applets_notification__area_eggtraymanager.c new file mode 100644 index 000000000000..727a47b99ca4 --- /dev/null +++ b/x11/gnome-panel/files/patch-applets_notification__area_eggtraymanager.c @@ -0,0 +1,48 @@ +--- applets/notification_area/eggtraymanager.c.orig Sat Dec 31 14:39:09 2005 ++++ applets/notification_area/eggtraymanager.c Mon May 15 01:36:18 2006 +@@ -291,6 +291,36 @@ + return FALSE; + } + ++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_manager_handle_dock_request (EggTrayManager *manager, + XClientMessageEvent *xevent) +@@ -306,6 +336,8 @@ + } + + socket = gtk_socket_new (); ++ g_signal_connect (socket, "realize", ++ G_CALLBACK (make_transparent), NULL); + + /* We need to set the child window here + * so that the client can call _get functions diff --git a/x11/gnome-panel/files/patch-applets_notification__area_main.c b/x11/gnome-panel/files/patch-applets_notification__area_main.c new file mode 100644 index 000000000000..22802096cf28 --- /dev/null +++ b/x11/gnome-panel/files/patch-applets_notification__area_main.c @@ -0,0 +1,73 @@ +--- applets/notification_area/main.c.orig Wed Dec 28 22:15:27 2005 ++++ applets/notification_area/main.c Mon May 15 01:36:01 2006 +@@ -159,14 +159,24 @@ + tray = all_trays->data; + + gtk_box_pack_end (GTK_BOX (tray->box), icon, FALSE, FALSE, 0); +- ++ ++ gtk_widget_hide (tray->box); + gtk_widget_show (icon); ++ gtk_widget_show (tray->box); + } + + static void + tray_removed (EggTrayManager *manager, GtkWidget *icon, void *data) + { ++ SystemTray *tray; ++ ++ if (all_trays == NULL) ++ return; ++ ++ tray = all_trays->data; + ++ gtk_widget_hide (tray->box); ++ gtk_widget_show (tray->box); + } + + static void +@@ -207,9 +217,32 @@ + gtk_widget_set_size_request (tray->box, -1, MIN_BOX_SIZE); + break; + } ++ ++ /* Force the icons to redraw their backgrounds. ++ * gtk_widget_queue_draw() doesn't work across process boundaries, ++ * so we do this instead. ++ */ ++ gtk_widget_hide (tray->box); ++ gtk_widget_show (tray->box); + } + + static void ++applet_change_background (PanelApplet *applet, ++ PanelAppletBackgroundType type, ++ GdkColor *color, ++ GdkPixmap *pixmap, ++ SystemTray *tray) ++{ ++ /* Force the icons to redraw their backgrounds. ++ * gtk_widget_queue_draw() doesn't work across process boundaries, ++ * so we do this instead. ++ */ ++ gtk_widget_hide (tray->box); ++ gtk_widget_show (tray->box); ++} ++ ++ ++static void + applet_change_orientation (PanelApplet *applet, + PanelAppletOrient orient, + SystemTray *tray) +@@ -332,6 +365,11 @@ + g_signal_connect (G_OBJECT (tray->applet), + "change_orient", + G_CALLBACK (applet_change_orientation), ++ tray); ++ ++ g_signal_connect (G_OBJECT (tray->applet), ++ "change_background", ++ G_CALLBACK (applet_change_background), + tray); + + g_signal_connect (tray->applet, diff --git a/x11/gnomepanel/Makefile b/x11/gnomepanel/Makefile index 34a93db968ca..f0448528cd25 100644 --- a/x11/gnomepanel/Makefile +++ b/x11/gnomepanel/Makefile @@ -22,7 +22,7 @@ PREFIX?= ${X11BASE} .if !defined(REFERENCE_PORT) -PORTREVISION= 1 +PORTREVISION= 2 RUN_DEPENDS= gnome-menu-editor:${PORTSDIR}/deskutils/gnome-menu-editor diff --git a/x11/gnomepanel/files/patch-applets_notification__area_eggtraymanager.c b/x11/gnomepanel/files/patch-applets_notification__area_eggtraymanager.c new file mode 100644 index 000000000000..727a47b99ca4 --- /dev/null +++ b/x11/gnomepanel/files/patch-applets_notification__area_eggtraymanager.c @@ -0,0 +1,48 @@ +--- applets/notification_area/eggtraymanager.c.orig Sat Dec 31 14:39:09 2005 ++++ applets/notification_area/eggtraymanager.c Mon May 15 01:36:18 2006 +@@ -291,6 +291,36 @@ + return FALSE; + } + ++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_manager_handle_dock_request (EggTrayManager *manager, + XClientMessageEvent *xevent) +@@ -306,6 +336,8 @@ + } + + socket = gtk_socket_new (); ++ g_signal_connect (socket, "realize", ++ G_CALLBACK (make_transparent), NULL); + + /* We need to set the child window here + * so that the client can call _get functions diff --git a/x11/gnomepanel/files/patch-applets_notification__area_main.c b/x11/gnomepanel/files/patch-applets_notification__area_main.c new file mode 100644 index 000000000000..22802096cf28 --- /dev/null +++ b/x11/gnomepanel/files/patch-applets_notification__area_main.c @@ -0,0 +1,73 @@ +--- applets/notification_area/main.c.orig Wed Dec 28 22:15:27 2005 ++++ applets/notification_area/main.c Mon May 15 01:36:01 2006 +@@ -159,14 +159,24 @@ + tray = all_trays->data; + + gtk_box_pack_end (GTK_BOX (tray->box), icon, FALSE, FALSE, 0); +- ++ ++ gtk_widget_hide (tray->box); + gtk_widget_show (icon); ++ gtk_widget_show (tray->box); + } + + static void + tray_removed (EggTrayManager *manager, GtkWidget *icon, void *data) + { ++ SystemTray *tray; ++ ++ if (all_trays == NULL) ++ return; ++ ++ tray = all_trays->data; + ++ gtk_widget_hide (tray->box); ++ gtk_widget_show (tray->box); + } + + static void +@@ -207,9 +217,32 @@ + gtk_widget_set_size_request (tray->box, -1, MIN_BOX_SIZE); + break; + } ++ ++ /* Force the icons to redraw their backgrounds. ++ * gtk_widget_queue_draw() doesn't work across process boundaries, ++ * so we do this instead. ++ */ ++ gtk_widget_hide (tray->box); ++ gtk_widget_show (tray->box); + } + + static void ++applet_change_background (PanelApplet *applet, ++ PanelAppletBackgroundType type, ++ GdkColor *color, ++ GdkPixmap *pixmap, ++ SystemTray *tray) ++{ ++ /* Force the icons to redraw their backgrounds. ++ * gtk_widget_queue_draw() doesn't work across process boundaries, ++ * so we do this instead. ++ */ ++ gtk_widget_hide (tray->box); ++ gtk_widget_show (tray->box); ++} ++ ++ ++static void + applet_change_orientation (PanelApplet *applet, + PanelAppletOrient orient, + SystemTray *tray) +@@ -332,6 +365,11 @@ + g_signal_connect (G_OBJECT (tray->applet), + "change_orient", + G_CALLBACK (applet_change_orientation), ++ tray); ++ ++ g_signal_connect (G_OBJECT (tray->applet), ++ "change_background", ++ G_CALLBACK (applet_change_background), + tray); + + g_signal_connect (tray->applet, |