[Xfce4-commits] <xfce4-wmdock-plugin:master> Code cleanup. Some changes for rc startup.

Andre Ellguth noreply at xfce.org
Mon Nov 4 13:36:24 CET 2013


Updating branch refs/heads/master
         to b55aaf8bcf20cd68c0349023b40cd972794580d4 (commit)
       from 2cb7071d1af48b065f8e46e279d6586806b3736e (commit)

commit b55aaf8bcf20cd68c0349023b40cd972794580d4
Author: Andre Ellguth <andre at ellguth.com>
Date:   Tue Oct 1 18:01:14 2013 +0200

    Code cleanup.
    Some changes for rc startup.

 panel-plugin/catchwindow.c |   19 ++++----
 panel-plugin/dockapp.c     |  110 ++++++++++++++++++--------------------------
 panel-plugin/dockapp.h     |    2 +-
 panel-plugin/rcfile.c      |   23 +++++----
 4 files changed, 68 insertions(+), 86 deletions(-)

diff --git a/panel-plugin/catchwindow.c b/panel-plugin/catchwindow.c
index f494de4..a9e48ac 100644
--- a/panel-plugin/catchwindow.c
+++ b/panel-plugin/catchwindow.c
@@ -212,20 +212,18 @@ void wmdock_window_open(WnckScreen *s, WnckWindow *w)
 				wmdock_set_autoposition_dockapp(dapp,
 						g_list_last(wmdock->dapps) ? g_list_last(wmdock->dapps)->data : NULL);
 			}
+
+			wmdock->dapps=g_list_append(wmdock->dapps, dapp);
 		} else {
-			/* Change the postion of the DockApp with the newly determined width and height. of the window */
+			/* Change the postion of the DockApp with the newly determined width and height of the window. */
 			wmdock_set_socket_postion(dapp, (DEFAULT_DOCKAPP_WIDTH - wi) / 2, (DEFAULT_DOCKAPP_HEIGHT - he) / 2);
 		}
 
 		gtk_socket_add_id(dapp->s, dapp->i);
-
 		gtk_widget_show_all(GTK_WIDGET(dapp->tile));
 
 		g_signal_connect(dapp->s, "plug-removed", G_CALLBACK(wmdock_dapp_closed), dapp);
 
-		if(rcDapp == FALSE)
-			wmdock->dapps=g_list_append(wmdock->dapps, dapp);
-
 		/* Setup drag & drop for the dockapps. */
 		g_list_foreach(wmdock->dapps, (GFunc) wmdock_setupdnd_dockapp, NULL);
 
@@ -234,11 +232,14 @@ void wmdock_window_open(WnckScreen *s, WnckWindow *w)
 
 		if( IS_PANELOFF(wmdock) ) {
 			if(rcDapp == TRUE) {
-				_dapps = g_list_find(wmdock->dapps, (gconstpointer) dapp);
-				wmdock_set_autoposition_dockapp( dapp, (DOCKAPP(g_list_first(wmdock->dapps)->data) != dapp && _dapps) ?
-								DOCKAPP(((GList *) g_list_previous(_dapps))->data) : NULL);
+				if(!wmdock_get_parent_dockapp(dapp)) {
+					_dapps = g_list_find(wmdock->dapps, (gconstpointer) dapp);
+
+					wmdock_set_autoposition_dockapp( dapp ,
+							(DOCKAPP(g_list_first(wmdock->dapps)->data) != dapp && _dapps) ? DOCKAPP(((GList *) g_list_previous(_dapps))->data) : NULL);
+				}
 
-				wmdock_order_dockapps(DOCKAPP(g_list_first(wmdock->dapps)->data));
+				wmdock_order_dockapps(wmdock_get_primary_anchor_dockapp());
 			}
 
 			/* Setup the event handler for the window. */
diff --git a/panel-plugin/dockapp.c b/panel-plugin/dockapp.c
index 222fd6f..754e24e 100644
--- a/panel-plugin/dockapp.c
+++ b/panel-plugin/dockapp.c
@@ -99,50 +99,6 @@ static void wmdock_dockapp_child_pos(DockappNode *prevDapp, gint gluepos, gint *
 
 
 /**
- * Determine the main anchor DockApp.
- *
- * @return DockappNode which is the main anchor otherwise NULL.
- */
-static DockappNode *wmdock_get_primary_anchor_dockapp()
-{
-	gint i;
-	GList *dapps1, *dapps2;
-	DockappNode *dapp1 = NULL, *dapp2 = NULL;
-
-	dapps1 = g_list_first(wmdock->dapps);
-
-	while(dapps1) {
-		if(!(dapp1 = DOCKAPP(dapps1->data)))
-			continue;
-
-		dapps2 = g_list_first(wmdock->dapps);
-		while(dapps2) {
-			if(!(dapp2 = DOCKAPP(dapps2->data)))
-				continue;
-
-			for(i = 0; i < GLUE_MAX; i++) {
-				if(dapp2->glue[i] == dapp1)
-					break;
-			}
-			if(dapp2->glue[i] == dapp1)
-				break;
-
-			dapps2 = g_list_next(dapps2);
-		}
-		/* Main anchor DockApp found. */
-		if(!dapps2) {
-			debug("dockapp.c: Found primary dockapp `%s'", dapp1->name);
-			return(dapp1);
-		}
-
-		dapps1 = g_list_next(dapps1);
-	}
-
-	return NULL;
-}
-
-
-/**
  * Calculate the next snapable postion of the moving DockApp.
  *
  * @parm dapp The moving DockApp.
@@ -289,6 +245,50 @@ static gboolean wmdock_replace_tile_dummy(DockappNode *dapp)
 
 
 /**
+ * Determine the main anchor DockApp.
+ *
+ * @return DockappNode which is the main anchor otherwise NULL.
+ */
+DockappNode *wmdock_get_primary_anchor_dockapp()
+{
+	gint i;
+	GList *dapps1, *dapps2;
+	DockappNode *dapp1 = NULL, *dapp2 = NULL;
+
+	dapps1 = g_list_first(wmdock->dapps);
+
+	while(dapps1) {
+		if(!(dapp1 = DOCKAPP(dapps1->data)))
+			continue;
+
+		dapps2 = g_list_first(wmdock->dapps);
+		while(dapps2) {
+			if(!(dapp2 = DOCKAPP(dapps2->data)))
+				continue;
+
+			for(i = 0; i < GLUE_MAX; i++) {
+				if(dapp2->glue[i] == dapp1)
+					break;
+			}
+			if(dapp2->glue[i] == dapp1)
+				break;
+
+			dapps2 = g_list_next(dapps2);
+		}
+		/* Main anchor DockApp found. */
+		if(!dapps2) {
+			debug("dockapp.c: Found primary dockapp `%s'", dapp1->name);
+			return(dapp1);
+		}
+
+		dapps1 = g_list_next(dapps1);
+	}
+
+	return NULL;
+}
+
+
+/**
  * Event handle for the tile in panel off mode (button_press)
  *
  * @param tile The window of the event.
@@ -661,24 +661,6 @@ void wmdock_update_tile_background(DockappNode *dapp)
 
 
 /**
- * Get the information if the dockapp the first one.
- *
- * @param dapp DockappNode to check.
- * @return gboolean TRUE if is the first dockapp otherwise false.
- */
-gboolean wmdock_is_first_dockapp(DockappNode *dapp)
-{
-	if(!dapp)
-		return FALSE;
-
-	if(DOCKAPP(g_list_first(wmdock->dapps)->data) == dapp)
-		return TRUE;
-
-	return FALSE;
-}
-
-
-/**
  * Get parent dockapp.
  *
  * @param dapp Child dockapp.
@@ -826,7 +808,7 @@ void wmdock_set_autoposition_dockapp(DockappNode *dapp, DockappNode *prevDapp)
 	gint x, y, i, offsetx, offsety, gluepos = GLUE_MAX;
 	XfceScreenPosition xfceScrPos;
 
-	if(!IS_PANELOFF(wmdock))
+	if(! IS_PANELOFF(wmdock) || !dapp )
 		return;
 
 	/* Setup the position of the first dockapp. */
@@ -952,7 +934,7 @@ void wmdock_order_dockapps(DockappNode *dapp)
 {
 	gint i;
 
-	if(! IS_PANELOFF(wmdock) || !dapp)
+	if(! IS_PANELOFF(wmdock) || !dapp )
 		return;
 
 	for(i = 0; i < GLUE_MAX; i++) {
diff --git a/panel-plugin/dockapp.h b/panel-plugin/dockapp.h
index 7de5de3..ffae656 100644
--- a/panel-plugin/dockapp.h
+++ b/panel-plugin/dockapp.h
@@ -64,8 +64,8 @@ void wmdock_set_autoposition_dockapp(DockappNode *, DockappNode *);
 void wmdock_refresh_bg(GtkWidget *widget);
 void wmdock_set_tile_background(DockappNode *, GdkPixbuf *);
 void wmdock_update_tile_background(DockappNode *);
-gboolean wmdock_is_first_dockapp(DockappNode *);
 DockappNode *wmdock_get_parent_dockapp(DockappNode *);
+DockappNode *wmdock_get_primary_anchor_dockapp();
 void wmdock_dockapp_tofront(DockappNode *dapp);
 void wmdock_dockapp_event_after_handler(GtkWidget *, GdkEvent *, DockappNode *);
 void wmdock_dockapp_button_press_handler(GtkWidget *, GdkEventButton *, DockappNode *);
diff --git a/panel-plugin/rcfile.c b/panel-plugin/rcfile.c
index 333b83b..99caf87 100644
--- a/panel-plugin/rcfile.c
+++ b/panel-plugin/rcfile.c
@@ -116,9 +116,10 @@ void wmdock_write_rc_file (XfcePanelPlugin *plugin)
 {
 	gchar       *file;
 	XfceRc      *rc;
-	gchar       **cmds;
+	gchar       **cmds = NULL;
+	GList       *dapps;
 	DockappNode *dapp = NULL;
-	gint        i;
+	gint        i = 0;
 
 	if (!(file = xfce_panel_plugin_save_location (plugin, TRUE))) return;
 
@@ -128,17 +129,15 @@ void wmdock_write_rc_file (XfcePanelPlugin *plugin)
 	if (!rc) return;
 
 	if(g_list_length (wmdock->dapps) > 0) {
-		cmds = g_malloc(sizeof (gchar *) * (g_list_length (wmdock->dapps) + 1));
-
-		for(i = 0; i < g_list_length(wmdock->dapps); i++) {
-			dapp = DOCKAPP(g_list_nth_data(wmdock->dapps, i));
-			if(dapp) {
-				if(dapp->name && dapp->cmd)
-					cmds[i] = g_strdup(dapp->cmd);
-			}
+		cmds = g_malloc0(sizeof (gchar *) * (g_list_length (wmdock->dapps) + 1));
+
+		dapps = g_list_first(wmdock->dapps);
+		while(dapps) {
+			dapp = DOCKAPP(dapps->data);
+			if(dapp && dapp->cmd)
+				cmds[i++] = g_strdup(dapp->cmd);
+			dapps = g_list_next(dapps);
 		}
-		/* Workaround for a xfce bug in xfce_rc_read_list_entry */
-		cmds[i] = NULL;
 
 		xfce_rc_write_list_entry(rc, "cmds", cmds, ";");
 


More information about the Xfce4-commits mailing list