[Xfce4-commits] <xfce4-wmdock-plugin:0.6.x> Fixed some bugs detected with valgrind. Some dockapp detection changes.

Andre Ellguth noreply at xfce.org
Fri Oct 18 19:38:01 CEST 2013


Updating branch refs/heads/0.6.x
         to cf8c5aded86146c98266e04db982933ff9dd6373 (commit)
       from 492cf84ee4cbf44dc760d48ed4df999fc4e49a92 (commit)

commit cf8c5aded86146c98266e04db982933ff9dd6373
Author: Andre Ellguth <andre at ellguth.com>
Date:   Fri Oct 18 19:35:30 2013 +0200

    Fixed some bugs detected with valgrind.
    Some dockapp detection changes.

 panel-plugin/catchwindow.c |   13 +++++++++----
 panel-plugin/dockapp.c     |   13 +++++++++----
 panel-plugin/misc.c        |    4 +++-
 panel-plugin/rcfile.c      |    5 +++--
 panel-plugin/wmdock.c      |    3 +--
 5 files changed, 25 insertions(+), 13 deletions(-)

diff --git a/panel-plugin/catchwindow.c b/panel-plugin/catchwindow.c
index 431aec3..2a40200 100644
--- a/panel-plugin/catchwindow.c
+++ b/panel-plugin/catchwindow.c
@@ -114,11 +114,12 @@ void wmdock_window_open(WnckScreen *s, WnckWindow *w)
 	h = XGetWMHints(GDK_DISPLAY_XDISPLAY(get_current_gdkdisplay()),
 			wnck_window_get_xid(w));
 
-	if(!h) return;
+	if(!h)
+		return;
 
 	if(h->initial_state == WithdrawnState ||
-			h->flags == (WindowGroupHint | StateHint | IconWindowHint)
-			|| has_dockapp_hint(w)) {
+			h->flags == (WindowGroupHint | StateHint | IconWindowHint) ||
+			has_dockapp_hint(w) == TRUE) {
 
 		debug("catchwindow.c: new wmapp open");
 		debug("catchwindow.c: New dockapp %s with xid: 0x%x pid: %u arrived sessid: %s",
@@ -149,9 +150,11 @@ void wmdock_window_open(WnckScreen *s, WnckWindow *w)
 		}
 
 		if(h->initial_state == WithdrawnState && h->icon_window) {
+			debug("catchwindow.c: Initial_state: %d with icon of window %s", h->initial_state, wnck_window_get_name(w));
 			XUnmapWindow(GDK_DISPLAY_XDISPLAY(get_current_gdkdisplay()), wnck_window_get_xid(w));
 			dapp->i =h->icon_window;
 		} else {
+			debug("catchwindow.c: Initial_state: %d %s of window %s", h->initial_state, h->icon_window ? "with icon" : "no icon", wnck_window_get_name(w));
 			dapp->i = wnck_window_get_xid(w);
 		}
 
@@ -195,7 +198,9 @@ void wmdock_window_open(WnckScreen *s, WnckWindow *w)
 		}
 
 		/* Cleanly unmap the original window. */
-		XUnmapWindow(GDK_DISPLAY_XDISPLAY(get_current_gdkdisplay()), dapp->i);
+		/* TODO: Verify is XUnmapWindow always not required.
+		 * XUnmapWindow(GDK_DISPLAY_XDISPLAY(get_current_gdkdisplay()), dapp->i);
+		 */
 
 		if(rcDapp == FALSE) {
 			dapp->tile = wmdock_create_tile_from_socket(dapp);
diff --git a/panel-plugin/dockapp.c b/panel-plugin/dockapp.c
index c14ed46..230e7e6 100644
--- a/panel-plugin/dockapp.c
+++ b/panel-plugin/dockapp.c
@@ -119,6 +119,7 @@ static DockappNode *wmdock_get_snapable_dockapp(DockappNode *dapp, gint *gluepos
 	if( ! IS_PANELOFF(wmdock) )
 		return NULL;
 
+	posx = posy = gluex = gluey = 0;
 	prim = (dapp == wmdock_get_primary_anchor_dockapp()) ? TRUE : FALSE;
 
 	switch(wmdock->anchorPos) {
@@ -452,7 +453,7 @@ DockappNode *wmdock_get_primary_anchor_dockapp()
 				if(dapp2->glue[i] == dapp1)
 					break;
 			}
-			if(dapp2->glue[i] == dapp1)
+			if(i < GLUE_MAX && dapp2->glue[i] == dapp1)
 				break;
 
 			dapps2 = g_list_next(dapps2);
@@ -569,8 +570,12 @@ gboolean wmdock_startup_dockapp(const gchar *cmd)
 
 void wmdock_destroy_dockapp(DockappNode *dapp)
 {
-	debug("dockapp.c: Destroy dockapp %s", dapp->name);
-	XDestroyWindow(GDK_DISPLAY_XDISPLAY(get_current_gdkdisplay()), dapp->i);
+	Display *display = NULL;
+
+	if(dapp && (display = GDK_DISPLAY_XDISPLAY(get_current_gdkdisplay()))) {
+		XDestroyWindow(display, dapp->i);
+		debug("dockapp.c: Destroy dockapp %s", dapp->name);
+	}
 }
 
 
@@ -932,7 +937,7 @@ void wmdock_set_autoposition_dockapp(DockappNode *dapp, DockappNode *prevDapp)
 	/* Setup the position of the first dockapp. */
 	panelx = panely = plugx = plugy = x = y = 0;
 
-	gtk_window_get_position(GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (wmdock->plugin))), &panelx, &panely);
+	gtk_window_get_position (GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (wmdock->plugin))), &panelx, &panely);
 	gdk_window_get_position (GDK_WINDOW (GTK_WIDGET (wmdock->plugin)->window), &plugx, &plugy);
 
 	for(i = 0; prevDapp && i < GLUE_MAX; i++) {
diff --git a/panel-plugin/misc.c b/panel-plugin/misc.c
index 998206f..f260f75 100644
--- a/panel-plugin/misc.c
+++ b/panel-plugin/misc.c
@@ -258,6 +258,7 @@ int wmdock_get_instance_count()
 	if(!fp)
 		return(-1);
 
+	memset(buf, '\0', BUF_MAX * sizeof(char));
 	strncpy(username, (const char *) g_get_user_name(), BUF_MAX);
 	while(!feof(fp)) {
 		buf[0] = 0;
@@ -286,7 +287,8 @@ void wmdock_panel_draw_wmdock_icon (gboolean redraw)
 	if(redraw == TRUE && wmdockIcon) {
 		gtk_image_set_from_pixbuf (GTK_IMAGE(wmdockIcon), gdkPbIcon);
 	} else {
-		if(wmdockIcon) gtk_widget_destroy(wmdockIcon);
+		if(wmdockIcon)
+			gtk_widget_destroy(wmdockIcon);
 
 		wmdockIcon = gtk_image_new_from_pixbuf (gdkPbIcon);
 		gtk_box_pack_start(GTK_BOX(wmdock->box), GTK_WIDGET(wmdockIcon), FALSE, FALSE, 0);
diff --git a/panel-plugin/rcfile.c b/panel-plugin/rcfile.c
index 1515777..d804fff 100644
--- a/panel-plugin/rcfile.c
+++ b/panel-plugin/rcfile.c
@@ -141,12 +141,13 @@ void wmdock_read_rc_file (XfcePanelPlugin *plugin)
 				}
 				g_strfreev(glueInfo);
 			}
-
-			g_strfreev(glueList);
 		}
 
 		g_free(launched);
 	} /* rcCmds != NULL */
+
+	if(glueList)
+		g_strfreev(glueList);
 }
 
 
diff --git a/panel-plugin/wmdock.c b/panel-plugin/wmdock.c
index b2b729c..509bc8a 100644
--- a/panel-plugin/wmdock.c
+++ b/panel-plugin/wmdock.c
@@ -56,8 +56,7 @@ GdkPixbuf    *gdkPbTileDefault = NULL;
 GdkPixbuf    *gdkPbIcon        = NULL;
 WmdockPlugin *wmdock           = NULL;
 gchar        **rcCmds          = NULL;
-/* TODO: Set panel off to FALSE. */
-gboolean     rcPanelOff        = TRUE;
+gboolean     rcPanelOff        = RCDEFAULT_PANELOFF;
 
 
 static void wmdock_orientation_changed (XfcePanelPlugin *plugin, GtkOrientation orientation, gpointer user_data)


More information about the Xfce4-commits mailing list