[Goodies-commits] r3730 - in xfce4-wmdock-plugin/trunk: . panel-plugin

Andre Ellguth ellguth at xfce.org
Wed Dec 19 21:06:29 CET 2007


Author: ellguth
Date: 2007-12-19 20:06:29 +0000 (Wed, 19 Dec 2007)
New Revision: 3730

Modified:
   xfce4-wmdock-plugin/trunk/ChangeLog
   xfce4-wmdock-plugin/trunk/configure.in.in
   xfce4-wmdock-plugin/trunk/panel-plugin/wmdock.c
   xfce4-wmdock-plugin/trunk/panel-plugin/wmdock.h
Log:
Code cleanup

Modified: xfce4-wmdock-plugin/trunk/ChangeLog
===================================================================
--- xfce4-wmdock-plugin/trunk/ChangeLog	2007-12-18 22:28:46 UTC (rev 3729)
+++ xfce4-wmdock-plugin/trunk/ChangeLog	2007-12-19 20:06:29 UTC (rev 3730)
@@ -1,3 +1,9 @@
+2007-12-19	Andre Ellguth <ellguth at ibh dot de>
+	* The "Display tile in the background" switchs works now correctly
+	* Added missing xfce header files in wmdock.c for hvbox and xfce-arrow
+	* The wmdock startup icon will now be scaled
+	* Code cleanup
+
 2007-08-29	Andre Ellguth <ellguth at ibh dot de>
 	* No X applications with size greater than 64 pixels will be swallowed.
 

Modified: xfce4-wmdock-plugin/trunk/configure.in.in
===================================================================
--- xfce4-wmdock-plugin/trunk/configure.in.in	2007-12-18 22:28:46 UTC (rev 3729)
+++ xfce4-wmdock-plugin/trunk/configure.in.in	2007-12-19 20:06:29 UTC (rev 3730)
@@ -5,7 +5,7 @@
 dnl
 
 dnl version info
-m4_define([wmdock_version], [0.1.6])
+m4_define([wmdock_version], [0.1.8])
 
 dnl init autoconf
 AC_INIT([xfce4-wmdock-plugin], [wmdock_version])

Modified: xfce4-wmdock-plugin/trunk/panel-plugin/wmdock.c
===================================================================
--- xfce4-wmdock-plugin/trunk/panel-plugin/wmdock.c	2007-12-18 22:28:46 UTC (rev 3729)
+++ xfce4-wmdock-plugin/trunk/panel-plugin/wmdock.c	2007-12-19 20:06:29 UTC (rev 3730)
@@ -1,8 +1,14 @@
-/* $Id: wmdock.c,v 1.4 2007/09/03 18:36:52 ellguth Exp ellguth $
+/* $Id: wmdock.c,v 1.5 2007/12/19 19:31:08 ellguth Exp ellguth $
  *
  * wmdock xfce4 plugin by Andre Ellguth
  *
  * $Log: wmdock.c,v $
+ * Revision 1.5  2007/12/19 19:31:08  ellguth
+ * The "Display tile in the background" switchs works now correctly.
+ * Added missing xfce header files in wmdock.c for hvbox and xfce-arrow.
+ * The wmdock startup icon will now be scaled.
+ * Code cleanup.
+ *
  * Revision 1.4  2007/09/03 18:36:52  ellguth
  * Removed the use of function wnck_window_has_name().
  * Replace function XKillClient back to XDestroyWindow.
@@ -34,7 +40,11 @@
 #include <libxfce4util/libxfce4util.h>
 #include <libxfcegui4/libxfcegui4.h>
 #include <libxfce4panel/xfce-panel-plugin.h>
+#include <libxfce4panel/xfce-panel-window.h>
+#include <libxfce4panel/xfce-hvbox.h>
+#include <libxfce4panel/xfce-arrow-button.h>
 
+
 #include "wmdock.h"
 #include "xfce4-wmdock-plugin.xpm"
 #include "tile.xpm"
@@ -45,17 +55,17 @@
 
 Atom           DockAppAtom;
 GtkWidget      *wmdockIcon = NULL;
-GdkBitmap  	   *gdkBmIcon;
-GdkBitmap  	   *gdkBmTile;
-GtkStyle   	   *gtkStyIcon;
+GdkBitmap  	   *gdkBmTile = NULL;
 GtkStyle   	   *gtkStyTile;
-GdkPixmap  	   *gdkPmIcon;
-GdkPixmap  	   *gdkPmTile;
-WmdockPlugin   *wmdock;
+GdkPixmap  	   *gdkPmTile = NULL;
+GdkPixbuf      *gdkPbIcon = NULL;
+WmdockPlugin   *wmdock = NULL;
+
+#ifdef DEBUG
 /* fp needed for debug */
 FILE           *fp;
+#endif
 
-
 gboolean has_dockapp_hint(WnckWindow * w)
 {
 	Atom atype;
@@ -89,6 +99,21 @@
 }
 
 
+GdkPixbuf *get_icon_from_xpm_scaled(const char **xpmData, gint width, gint height)
+{
+	GdkPixbuf *gdkPb = NULL;
+	GdkPixbuf *gdkPbScaled = NULL;
+	
+	gdkPb = gdk_pixbuf_new_from_xpm_data (xpmData);
+	
+	gdkPbScaled = gdk_pixbuf_scale_simple(gdkPb, width, height, GDK_INTERP_BILINEAR);
+	
+	g_object_unref (G_OBJECT (gdkPb));
+	
+	return(gdkPbScaled);
+}
+
+
 void wmdock_destroy_dockapp(DockappNode *dapp)
 {
 	XDestroyWindow(GDK_DISPLAY_XDISPLAY(gdk_display_get_default()), dapp->i);XDestroyWindow(GDK_DISPLAY_XDISPLAY(gdk_display_get_default()), dapp->i);
@@ -97,34 +122,49 @@
 	*/
 }
 
-
 void wmdock_redraw_dockapp(DockappNode *dapp)
 {
+	gtk_widget_unmap (GTK_WIDGET(dapp->s));
+
 	/* Tile in the background */
 	if(wmdock->propDispTile == TRUE) {
 		gtk_widget_set_app_paintable(GTK_WIDGET(dapp->s), TRUE);
 		gdk_window_set_back_pixmap(GTK_WIDGET(dapp->s)->window, gdkPmTile, FALSE);
         if (GTK_WIDGET_FLAGS(GTK_WIDGET(dapp->s)) & GTK_MAPPED)
         	gtk_widget_queue_draw(GTK_WIDGET(dapp->s));
+	} else {
+		gdk_window_set_back_pixmap(GTK_WIDGET(dapp->s)->window, NULL, TRUE);
 	}
 	
+#ifdef DEBUG
+	fprintf(fp, "Dockapp %s redrawed with tile %d\n", dapp->name, 
+		wmdock->propDispTile);
+#endif
+
+	gtk_widget_map (GTK_WIDGET(dapp->s));
+	
 	gtk_widget_show(GTK_WIDGET(dapp->s));
 }
 
 
 void wmdock_dapp_closed(GtkSocket *socket, DockappNode *dapp)
 {
-	/* Debug 	
+#ifdef DEBUG 	
  	fprintf(fp, "- wmdock: closed window signal ! (xid: %u)\n", dapp->i);
-	*/
+#endif
 
-	wmdock->dapps = g_slist_remove_all(wmdock->dapps, dapp); 
+	wmdock->dapps = g_slist_remove_all(wmdock->dapps, dapp);
 	gtk_widget_destroy(GTK_WIDGET(dapp->s));
 
 	g_free(dapp);
 
 	if(g_slist_length (wmdock->dapps) == 0) {
-		wmdockIcon = gtk_image_new_from_pixmap(gdkPmIcon, gdkBmIcon);
+		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);
+		if(wmdockIcon) gtk_widget_destroy(wmdockIcon);
+    	wmdockIcon = gtk_image_new_from_pixbuf (gdkPbIcon);
+    	g_object_unref (G_OBJECT (gdkPbIcon));
 		
  		gtk_box_pack_start(GTK_BOX(wmdock->box), GTK_WIDGET(wmdockIcon), FALSE, FALSE, 0);
  		gtk_widget_show(GTK_WIDGET(wmdockIcon)); 	
@@ -146,16 +186,16 @@
 
 	h = XGetWMHints(GDK_DISPLAY_XDISPLAY(gdk_display_get_default()), 
 					wnck_window_get_xid(w));
-
+					
 	if((h && h->initial_state==WithdrawnState) || has_dockapp_hint(w)) {
-		/* Debug	
+#ifdef DEBUG	
 		fprintf(fp, "- wmdock: new wmapp open\n");
-		*/	
+#endif
 
 		wnck_window_get_geometry(w,&xp,&yp,&wi,&he);
-  		/* Debug
+#ifdef DEBUG
   		fprintf(fp, "New dockapp %s with xid: %u pid: %u arrived\n", wnck_window_get_name(w), wnck_window_get_xid(w), wnck_window_get_pid(w));
-  		*/
+#endif
   		
   		if(wi > DEFAULT_DOCKAPP_WIDTH || he > DEFAULT_DOCKAPP_HEIGHT) {
   			/* It seems to be no dockapp, because the width or the height of the 
@@ -173,6 +213,9 @@
 		
 		gtk_widget_set_size_request(GTK_WIDGET(dapp->s), wi, he);
 
+		wnck_window_set_skip_tasklist (w, TRUE);
+		wnck_window_set_skip_pager (w, TRUE);
+
 		dapp->name = g_strdup(wnck_window_get_name(w));
 
 		XGetCommand(GDK_DISPLAY_XDISPLAY(gdk_display_get_default()), dapp->i, &argv, &argc);
@@ -188,7 +231,7 @@
 			gtk_widget_destroy(wmdockIcon);
 			wmdockIcon = NULL;
 		}
-		
+
 		gtk_box_pack_start(GTK_BOX(wmdock->box), GTK_WIDGET(dapp->s), FALSE, FALSE, 0);
 
 		gtk_socket_add_id(dapp->s, dapp->i);
@@ -201,12 +244,10 @@
         		gtk_widget_queue_draw(GTK_WIDGET(dapp->s));
 		}
         			
-
 		gtk_widget_show(GTK_WIDGET(dapp->s));
 
 		g_signal_connect(dapp->s, "plug-removed", G_CALLBACK(wmdock_dapp_closed), dapp);  
 		wmdock->dapps=g_slist_append(wmdock->dapps, dapp);
-
 	}
 
 	XFree(h);
@@ -221,7 +262,7 @@
 		else
 			gtk_alignment_set (GTK_ALIGNMENT (wmdock->box), 0.5, 0.5, 1.0, 0.0);
 	*/
-	xfce_hvbox_set_orientation (wmdock->box, orientation);
+	xfce_hvbox_set_orientation ((XfceHVBox *) wmdock->box, orientation);
 	gtk_widget_show(GTK_WIDGET(wmdock->box));	
 }
 
@@ -234,6 +275,15 @@
 	} else {
 		gtk_widget_set_size_request (GTK_WIDGET (plugin), size, -1);
 	}
+	
+	if(wmdockIcon) { 
+    	gdkPbIcon = get_icon_from_xpm_scaled((const char **) xfce4_wmdock_plugin_xpm, 
+    		xfce_panel_plugin_get_size (plugin) - 2,
+    		xfce_panel_plugin_get_size (plugin) - 2);
+		gtk_image_set_from_pixbuf (GTK_IMAGE(wmdockIcon), gdkPbIcon);
+    	g_object_unref (G_OBJECT (gdkPbIcon));
+    	gtk_widget_show(GTK_WIDGET(wmdockIcon));
+	}
 
 	return TRUE;
 }
@@ -261,7 +311,7 @@
 
 static void wmdock_read_rc_file (XfcePanelPlugin *plugin)
 {
-	gchar  	 *file;
+	gchar  	 *file = NULL;
 	XfceRc 	 *rc;
 	gint   	 i;
 	gchar  	 **cmds = NULL;
@@ -281,9 +331,9 @@
 
 	if(G_LIKELY(cmds != NULL)) {
 		for (i = cmdcnt; i >= 0; i--) {
-			/* Debug
+#ifdef DEBUG
  			fprintf(fp, "config will start: %s\n", cmds[i]);
- 			*/	
+#endif
 			if(!cmds[i]) continue;
 			if(wmdock_startup_dockapp(cmds[i]) != TRUE) {
 				gtkDlg = gtk_message_dialog_new(GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (plugin))), 
@@ -296,7 +346,7 @@
  				gtk_widget_show_all (gtkDlg);
 			}
 			/* Sleep for n microseconds to startup dockapps in the right order. */ 
-			g_usleep(200000);
+			g_usleep(250000);
 
 			g_free(cmds[i]);
 		}
@@ -353,9 +403,11 @@
 	gtk_widget_destroy(GTK_WIDGET(wmdock->box));	
 	g_slist_free(wmdock->dapps);
 	g_free(wmdock);
-	/* Debug
+	
+	g_free(wmdock); 
+#ifdef DEBUG
  	fclose(fp);
- 	*/	
+#endif
 }
 
 
@@ -363,10 +415,10 @@
 {
 
 	if(gtkComboBox) {
- 		/* Debug
+#ifdef DEBUG
 		fprintf(fp, "%s append to list\n", dapp->name);
-		*/
-		gtk_combo_box_append_text ((GtkComboBox *) gtkComboBox, dapp->name); 
+#endif
+		gtk_combo_box_append_text (GTK_COMBO_BOX(gtkComboBox), dapp->name); 
  	}
 }
 
@@ -393,7 +445,7 @@
 	DockappNode *dapp = NULL;
 	gint pos;
  
-	pos = gtk_combo_box_get_active((GtkComboBox *) gtkComboBox);
+	pos = gtk_combo_box_get_active(GTK_COMBO_BOX(gtkComboBox));
 
 	if(g_slist_length(wmdock->dapps) > 1 && pos > 0) {
 		dapp = (DockappNode *) g_slist_nth_data(wmdock->dapps, pos);
@@ -401,9 +453,9 @@
 		if(dapp) {
 			wmdock->dapps = g_slist_remove_all(wmdock->dapps, dapp);
 			wmdock->dapps = g_slist_insert(wmdock->dapps, dapp, pos - 1);
-			gtk_combo_box_remove_text((GtkComboBox *) gtkComboBox, pos);
-			gtk_combo_box_insert_text((GtkComboBox *) gtkComboBox, pos - 1, dapp->name);
-			gtk_combo_box_set_active((GtkComboBox *) gtkComboBox, pos - 1);  
+			gtk_combo_box_remove_text(GTK_COMBO_BOX(gtkComboBox), pos);
+			gtk_combo_box_insert_text(GTK_COMBO_BOX(gtkComboBox), pos - 1, dapp->name);
+			gtk_combo_box_set_active(GTK_COMBO_BOX(gtkComboBox), pos - 1);  
 			gtk_box_reorder_child(GTK_BOX(wmdock->box), GTK_WIDGET(dapp->s), pos - 1);
 			
 			g_slist_foreach(wmdock->dapps, (GFunc)wmdock_redraw_dockapp, NULL);
@@ -417,7 +469,7 @@
 	DockappNode *dapp = NULL;
 	gint pos;
 	
-	pos = gtk_combo_box_get_active((GtkComboBox *) gtkComboBox);
+	pos = gtk_combo_box_get_active(GTK_COMBO_BOX(gtkComboBox));
 	
 	if(g_slist_length(wmdock->dapps) > 1 && pos < g_slist_length(wmdock->dapps) - 1) {
 		dapp = (DockappNode *) g_slist_nth_data(wmdock->dapps, pos);
@@ -425,9 +477,9 @@
 		if(dapp) {
 			wmdock->dapps = g_slist_remove_all(wmdock->dapps, dapp);
 			wmdock->dapps = g_slist_insert(wmdock->dapps, dapp, pos + 1);
-			gtk_combo_box_remove_text((GtkComboBox *) gtkComboBox, pos);
-			gtk_combo_box_insert_text((GtkComboBox *) gtkComboBox, pos + 1, dapp->name);
-			gtk_combo_box_set_active((GtkComboBox *) gtkComboBox, pos + 1);  
+			gtk_combo_box_remove_text(GTK_COMBO_BOX(gtkComboBox), pos);
+			gtk_combo_box_insert_text(GTK_COMBO_BOX(gtkComboBox), pos + 1, dapp->name);
+			gtk_combo_box_set_active(GTK_COMBO_BOX(gtkComboBox), pos + 1);  
 			gtk_box_reorder_child(GTK_BOX(wmdock->box), GTK_WIDGET(dapp->s), pos + 1);
 			
 			g_slist_foreach(wmdock->dapps, (GFunc)wmdock_redraw_dockapp, NULL);
@@ -441,7 +493,7 @@
 	DockappNode *dapp = NULL;
 	gint pos;
 
-	pos = gtk_combo_box_get_active((GtkComboBox *) gtkComboBox);
+	pos = gtk_combo_box_get_active(GTK_COMBO_BOX(gtkComboBox));
 
 	dapp = (DockappNode *) g_slist_nth_data(wmdock->dapps, pos);
 	if(dapp) {
@@ -455,11 +507,11 @@
 {
 	DockappNode *dapp = NULL;
 
-	dapp = (DockappNode *) g_slist_nth_data(wmdock->dapps, gtk_combo_box_get_active((GtkComboBox *) gtkComboBox));
+	dapp = (DockappNode *) g_slist_nth_data(wmdock->dapps, gtk_combo_box_get_active(GTK_COMBO_BOX(gtkComboBox)));
 	if(dapp) {
- 		/*
+#ifdef DEBUG
  		fprintf(fp, "changed, %s selected:\n", dapp->name);
- 		*/	
+#endif
 	
 		gtk_entry_set_text(GTK_ENTRY(gtkTxtCmd), dapp->cmd);
 	} 
@@ -510,12 +562,16 @@
 	gtk_box_pack_start (GTK_BOX (gtkHbox), gtkVbox, FALSE, FALSE, 0);
 	gtk_box_pack_start (GTK_BOX (gtkHbox), gtkVbox2, FALSE, FALSE, 0);
 
-	gtkImage = gtk_image_new_from_pixmap(gdkPmIcon, gdkBmIcon);
+    gdkPbIcon = get_icon_from_xpm_scaled((const char **) xfce4_wmdock_plugin_xpm, 
+    	DEFAULT_DOCKAPP_HEIGHT, DEFAULT_DOCKAPP_WIDTH);
+    gtkImage = gtk_image_new_from_pixbuf (gdkPbIcon);
+    g_object_unref (G_OBJECT (gdkPbIcon));
+
 	gtk_widget_set_name(gtkImage, "image");
 	gtk_box_pack_start (GTK_BOX(gtkVbox), GTK_WIDGET (gtkImage), FALSE, FALSE, 0);
 
-	gtkBtnMoveUp = (GtkWidget *) xfce_arrow_button_new (GTK_ARROW_UP);
-	gtkBtnMoveDown = (GtkWidget *) xfce_arrow_button_new (GTK_ARROW_DOWN);
+	gtkBtnMoveUp = xfce_arrow_button_new (GTK_ARROW_UP);
+	gtkBtnMoveDown = xfce_arrow_button_new (GTK_ARROW_DOWN);
 	gtk_box_pack_start (GTK_BOX(gtkVbox), GTK_WIDGET (gtkBtnMoveUp), FALSE, FALSE, 0);
 	gtk_box_pack_start (GTK_BOX(gtkVbox), GTK_WIDGET (gtkBtnMoveDown), FALSE, FALSE, 0);
 
@@ -528,12 +584,12 @@
 	if(g_slist_length(wmdock->dapps) > 0) {
 		g_slist_foreach(wmdock->dapps, (GFunc) wmdock_fill_cmbx, gtkComboBox);
 	} else {
- 		/*
+#ifdef DEBUG
  		fprintf(fp, "draw icon in properties\n");
-		*/	
-		gtk_combo_box_append_text ((GtkComboBox *) gtkComboBox, "No dockapp are running!");
+#endif
+		gtk_combo_box_append_text (GTK_COMBO_BOX(gtkComboBox), "No dockapp are running!");
 	}
-	gtk_combo_box_set_active((GtkComboBox *) gtkComboBox, 0);
+	gtk_combo_box_set_active(GTK_COMBO_BOX(gtkComboBox), 0);
 
 	gtk_box_pack_start (GTK_BOX (gtkVbox2), gtkComboBox, FALSE, TRUE, 0);
 
@@ -542,9 +598,9 @@
 	gtk_box_pack_start (GTK_BOX(gtkVbox2), gtkLblCmd, FALSE, FALSE, 0);
 	gtkTxtCmd = gtk_entry_new();
 	if(g_slist_length(wmdock->dapps) > 0) {
-		gtk_editable_set_editable((GtkEditable *) gtkTxtCmd, TRUE);
+		gtk_editable_set_editable(GTK_EDITABLE(gtkTxtCmd), TRUE);
 	} else {
-		gtk_editable_set_editable((GtkEditable *) gtkTxtCmd, FALSE);
+		gtk_editable_set_editable(GTK_EDITABLE(gtkTxtCmd), FALSE);
 	}
 	gtk_box_pack_start (GTK_BOX(gtkVbox2), gtkTxtCmd, FALSE, FALSE, 0);
 	
@@ -594,7 +650,7 @@
 			wmdock->box = gtk_hbox_new(FALSE, 0);
 		}
 	*/
-	wmdock->box = (GtkWidget *) xfce_hvbox_new(xfce_panel_plugin_get_orientation (plugin), FALSE, 0);
+	wmdock->box = xfce_hvbox_new(xfce_panel_plugin_get_orientation (plugin), FALSE, 0);
 
 	gtk_container_add (GTK_CONTAINER (wmdock->align), wmdock->box);
 	
@@ -606,9 +662,10 @@
 {
 	WnckScreen *s;
 
-	/* Debug
- 	fp = fopen("/tmp/xfce4-wmdock.log", "w");
-	*/	
+#ifdef DEBUG
+ 	fp = fopen("/tmp/xfce4-wmdock-debug.out", "w");
+#endif
+
 	s = wnck_screen_get(0);
 
 	xfce_textdomain(GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR, "UTF-8");
@@ -630,19 +687,17 @@
 	xfce_panel_plugin_add_action_widget (plugin, wmdock->ebox);
 	xfce_panel_plugin_set_expand(plugin, TRUE);
 	
-	/* Setup the icon */
-	gtkStyIcon = gtk_widget_get_default_style();
-	gdkPmIcon = gdk_pixmap_create_from_xpm_d (wmdock->ebox->window, &gdkBmIcon,
-    	                                      &gtkStyIcon->bg[GTK_STATE_NORMAL],
-        	                                  xfce4_wmdock_plugin_xpm);
-        	                                  
 	/* Setup the tile image */    	                                  	
 	gtkStyTile = gtk_widget_get_default_style();
 	gdkPmTile = gdk_pixmap_create_from_xpm_d (wmdock->ebox->window, &gdkBmTile,
     	                                      &gtkStyTile->bg[GTK_STATE_NORMAL],
-        	                                  tile_xpm);	
+        	                                  tile_xpm);
 
-	wmdockIcon = gtk_image_new_from_pixmap(gdkPmIcon, gdkBmIcon);
+    gdkPbIcon = get_icon_from_xpm_scaled((const char **) xfce4_wmdock_plugin_xpm, 
+    	xfce_panel_plugin_get_size (plugin) - 2,
+    	xfce_panel_plugin_get_size (plugin) - 2);
+    wmdockIcon = gtk_image_new_from_pixbuf (gdkPbIcon);
+    g_object_unref (G_OBJECT (gdkPbIcon));
 
 	gtk_box_pack_start(GTK_BOX(wmdock->box), GTK_WIDGET(wmdockIcon), FALSE, FALSE, 0);
 	gtk_widget_show(GTK_WIDGET(wmdockIcon));

Modified: xfce4-wmdock-plugin/trunk/panel-plugin/wmdock.h
===================================================================
--- xfce4-wmdock-plugin/trunk/panel-plugin/wmdock.h	2007-12-18 22:28:46 UTC (rev 3729)
+++ xfce4-wmdock-plugin/trunk/panel-plugin/wmdock.h	2007-12-19 20:06:29 UTC (rev 3730)
@@ -12,7 +12,6 @@
 typedef struct _dockapp {
 	WnckWindow *w;
 	GtkSocket *s;
-	GtkWidget *frame;
 	GdkNativeWindow i;
 	gchar *name;
 	gchar *cmd;




More information about the Goodies-commits mailing list