[Xfce4-commits] <xfce4-wmdock-plugin:0.6.x> Raise all dockapps in panel off if the panel icon is clicked. Fixed problem on startup.

Andre Ellguth noreply at xfce.org
Wed Aug 15 21:22:01 CEST 2012


Updating branch refs/heads/0.6.x
         to d66211cd85bef1987b619e78838a3148c3b794ec (commit)
       from 75271cfaf36dd3b8b6d9a92019b1129d581b47d7 (commit)

commit d66211cd85bef1987b619e78838a3148c3b794ec
Author: Andre Ellguth <andre at ellguth.com>
Date:   Wed Aug 15 21:19:17 2012 +0200

    Raise all dockapps in panel off if the panel icon is clicked.
    Fixed problem on startup.

 panel-plugin/catchwindow.c |    4 +---
 panel-plugin/dockapp.c     |    6 +++++-
 panel-plugin/dockapp.h     |    1 +
 panel-plugin/misc.c        |   26 ++++++++++++++++++++++++--
 4 files changed, 31 insertions(+), 6 deletions(-)

diff --git a/panel-plugin/catchwindow.c b/panel-plugin/catchwindow.c
index b9c6628..1266b66 100644
--- a/panel-plugin/catchwindow.c
+++ b/panel-plugin/catchwindow.c
@@ -238,9 +238,7 @@ void wmdock_window_open(WnckScreen *s, WnckWindow *w)
 						(DOCKAPP(g_list_first(wmdock->dapps)->data) != dapp && _dapps) ?
 								DOCKAPP(g_list_previous(_dapps)->data) : NULL);
 
-				/* Workaround to display the tile background. */
-				if(wmdock->propDispTile == TRUE)
-					wmdock_redraw_dockapp(dapp);
+				wmdock_order_dockapps(DOCKAPP(g_list_first(wmdock->dapps)->data));
 			}
 
 			/* Setup the event handler for the window. */
diff --git a/panel-plugin/dockapp.c b/panel-plugin/dockapp.c
index acefe6a..f81560d 100644
--- a/panel-plugin/dockapp.c
+++ b/panel-plugin/dockapp.c
@@ -123,7 +123,7 @@ static void wmdock_insert_dummy(DockappNode *dapp)
 
 	if(!dummy) {
 		dummy = g_new0(DockappNode, 1);
-		dummy->name = g_strdup("dummy");
+		dummy->name = g_strdup(DOCKAPP_DUMMY_TITLE);
 		dummy->tile = wmdock_create_dummy();
 	}
 
@@ -145,6 +145,10 @@ static void wmdock_destroy_dummy()
 	if(!dummy)
 		return;
 
+	/* Kick all dummy dockapps in list. */
+	if(g_list_find(wmdock->dapps, dummy))
+		wmdock->dapps = g_list_remove(wmdock->dapps, dummy);
+
 	gtk_widget_destroy(dummy->tile);
 	g_free(dummy->name);
 	g_free(dummy);
diff --git a/panel-plugin/dockapp.h b/panel-plugin/dockapp.h
index 73a75b5..a793e09 100644
--- a/panel-plugin/dockapp.h
+++ b/panel-plugin/dockapp.h
@@ -49,6 +49,7 @@ struct _dockapp {
  DockappNode     *glue[GLUE_MAX];
 };
 
+#define DOCKAPP_DUMMY_TITLE "_dummy_"
 #define DOCKAPP(__dapp) ((DockappNode *) __dapp)
 
 gboolean wmdock_startup_dockapp(const gchar *);
diff --git a/panel-plugin/misc.c b/panel-plugin/misc.c
index cf42b34..de23b88 100644
--- a/panel-plugin/misc.c
+++ b/panel-plugin/misc.c
@@ -34,6 +34,7 @@
 
 #include "extern.h"
 #include "wmdock.h"
+#include "dockapp.h"
 #include "misc.h"
 
 #include "xfce4-wmdock-plugin.xpm"
@@ -159,8 +160,22 @@ gboolean has_dockapp_hint(WnckWindow *w)
 }
 
 
+/**
+ * Function which interacts with the wmdock icon.
+ *
+ * @param icon The wmdock icon widget.
+ */
+static void wmdock_icon_pressed(GtkWidget *icon)
+{
+	if( IS_PANELOFF(wmdock) )
+		g_list_foreach(wmdock->dapps, (GFunc) wmdock_dockapp_tofront, NULL);
+}
+
+
 void wmdock_panel_draw_wmdock_icon (gboolean redraw)
 {
+	static GtkWidget *eventBox = NULL;
+
 	gdkPbIcon = get_icon_from_xpm_scaled((const char **) xfce4_wmdock_plugin_xpm,
 			xfce_panel_plugin_get_size (wmdock->plugin) - 2,
 			xfce_panel_plugin_get_size (wmdock->plugin) - 2);
@@ -168,12 +183,19 @@ void wmdock_panel_draw_wmdock_icon (gboolean redraw)
 		gtk_image_set_from_pixbuf (GTK_IMAGE(wmdockIcon), gdkPbIcon);
 	} else {
 		if(wmdockIcon) gtk_widget_destroy(wmdockIcon);
+		if(eventBox) gtk_widget_destroy(eventBox);
+		eventBox = gtk_event_box_new();
+
 		wmdockIcon = gtk_image_new_from_pixbuf (gdkPbIcon);
+		gtk_container_add(GTK_CONTAINER(eventBox), wmdockIcon);
 
-		gtk_box_pack_start(GTK_BOX(wmdock->box), GTK_WIDGET(wmdockIcon),
+		gtk_box_pack_start(GTK_BOX(wmdock->box), GTK_WIDGET(eventBox),
 				FALSE, FALSE, 0);
 	}
 	g_object_unref (G_OBJECT (gdkPbIcon));
 
-	gtk_widget_show(GTK_WIDGET(wmdockIcon));
+	if( IS_PANELOFF(wmdock) )
+		g_signal_connect (G_OBJECT(eventBox), "button_press_event", G_CALLBACK (wmdock_icon_pressed), NULL);
+
+	gtk_widget_show_all(GTK_WIDGET(eventBox));
 }


More information about the Xfce4-commits mailing list