Updating branch refs/heads/0.6.x
         to db7f29c982e45760ae35feb31ac2993f5c7524a4 (commit)
       from f6da1dc354d06d901c97b82f56a27e3171c5fc18 (commit)

commit db7f29c982e45760ae35feb31ac2993f5c7524a4
Author: Andre Ellguth <[email protected]>
Date:   Sun Oct 6 17:45:40 2013 +0200

    Write the dockapp postions in panel off mode to rc file.

 panel-plugin/dockapp.c |   55 +++++++++++++++++++++++++++++++++-
 panel-plugin/dockapp.h |    2 ++
 panel-plugin/misc.c    |    1 +
 panel-plugin/rcfile.c  |   77 +++++++++++++++++++++++++++++++-----------------
 panel-plugin/rcfile.h  |   10 +++++++
 5 files changed, 117 insertions(+), 28 deletions(-)

diff --git a/panel-plugin/dockapp.c b/panel-plugin/dockapp.c
index 61a8872..d96260e 100644
--- a/panel-plugin/dockapp.c
+++ b/panel-plugin/dockapp.c
@@ -117,17 +117,21 @@ static DockappNode 
*wmdock_get_snapable_dockapp(DockappNode *dapp, gint *gluepos
        prim = (dapp == wmdock_get_primary_anchor_dockapp()) ? TRUE : FALSE;
 
        switch(wmdock->anchorPos) {
-       /* Remove not possible snap positions for the first dockapp. */
+       /* Remove not possible snap positions for the dragging dockapp. */
        case ANCHOR_TR:
+               possible^= (GLUE_T | GLUE_L);
                possible^= prim == TRUE ? (GLUE_T | GLUE_L | GLUE_R) : 0;
                break;
        case ANCHOR_BR:
+               possible^= (GLUE_B | GLUE_R);
                possible^= prim == TRUE ? (GLUE_B | GLUE_L | GLUE_R): 0;
                break;
        case ANCHOR_TL:
+               possible^= (GLUE_T | GLUE_R);
                possible^= prim == TRUE ? (GLUE_T | GLUE_L | GLUE_R) : 0;
                break;
        case ANCHOR_BL:
+               possible^= (GLUE_B | GLUE_L);
                possible^= prim == TRUE ? (GLUE_B | GLUE_L | GLUE_R) : 0;
                break;
        }
@@ -244,6 +248,55 @@ static gboolean wmdock_replace_tile_dummy(DockappNode 
*dapp)
 }
 
 
+/* Return the translation from glue int postion to glue name.
+ *
+ * @param gluePos Position to be translated.
+ * @return String representation of the postion.
+ */
+const gchar *get_glue_name(const gint glusPos)
+{
+       static gchar ret[10];
+
+       switch(glusPos) {
+       case GLUE_B:
+               g_strlcpy(ret, "GLUE_B", sizeof(ret));
+               break;
+       case GLUE_L:
+               g_strlcpy(ret, "GLUE_L", sizeof(ret));
+               break;
+       case GLUE_R:
+               g_strlcpy(ret, "GLUE_R", sizeof(ret));
+               break;
+       case GLUE_T:
+               g_strlcpy(ret, "GLUE_T", sizeof(ret));
+               break;
+       default:
+               return NULL;
+       }
+
+       return (ret);
+}
+
+/* Return the translation from the glue name to the postion.
+ *
+ * @param name The name to be translated to a number.
+ * @return The position as integer. On error -1 is returned.
+ */
+gint get_glue_position(gchar const *name)
+{
+       if(!g_ascii_strcasecmp(name, "GLUE_B"))
+               return GLUE_B;
+       else if(!g_ascii_strcasecmp(name, "GLUE_L"))
+               return GLUE_L;
+       else if(!g_ascii_strcasecmp(name, "GLUE_R"))
+               return GLUE_R;
+       else if(!g_ascii_strcasecmp(name, "GLUE_T"))
+               return GLUE_T;
+
+       return -1;
+}
+
+
 /**
  * Determine the main anchor DockApp.
  *
diff --git a/panel-plugin/dockapp.h b/panel-plugin/dockapp.h
index 5ed850e..06fd2c1 100644
--- a/panel-plugin/dockapp.h
+++ b/panel-plugin/dockapp.h
@@ -75,5 +75,7 @@ void wmdock_remove_anchor_dockapp(DockappNode *, DockappNode 
*);
 void wmdock_order_dockapps(DockappNode *);
 GtkWidget *wmdock_create_tile_dummy();
 gint wmdock_get_default_gluepos();
+gint get_glue_position(gchar const *);
+const gchar *get_glue_name(const gint);
 
 #endif /* __DOCKAPP_H__ */
diff --git a/panel-plugin/misc.c b/panel-plugin/misc.c
index 3dd6a9e..8cea694 100644
--- a/panel-plugin/misc.c
+++ b/panel-plugin/misc.c
@@ -188,6 +188,7 @@ GdkScreen *get_current_gdkscreen()
        return 
gdk_window_get_screen(gtk_widget_get_toplevel(GTK_WIDGET(wmdock->plugin))->window);
 }
 
+
 /**
  * Returns the default anchor postion for the XFCE panel.
  *
diff --git a/panel-plugin/rcfile.c b/panel-plugin/rcfile.c
index 71008fe..e567ce3 100644
--- a/panel-plugin/rcfile.c
+++ b/panel-plugin/rcfile.c
@@ -40,6 +40,7 @@
 #include "wmdock.h"
 #include "debug.h"
 #include "dockapp.h"
+#include "misc.h"
 #include "props.h"
 
 
@@ -58,16 +59,16 @@ void wmdock_read_rc_file (XfcePanelPlugin *plugin)
 
        if(!rc) return;
 
-       rcCmds                     = xfce_rc_read_list_entry(rc, "cmds", ";");
-       rcCmdcnt                   = xfce_rc_read_int_entry(rc, "cmdcnt", 0);
-       wmdock->propDispTile       = xfce_rc_read_bool_entry (rc, "disptile", 
TRUE);
-       wmdock->propDispPropButton = xfce_rc_read_bool_entry (rc, 
"disppropbtn", FALSE);
-       wmdock->propDispAddOnlyWM  = xfce_rc_read_bool_entry (rc, 
"dispaddonlywm", TRUE);
+       rcCmds                     = xfce_rc_read_list_entry(rc, RCKEY_CMDLIST, 
";");
+       rcCmdcnt                   = xfce_rc_read_int_entry(rc, RCKEY_CMDCNT, 
0);
+       wmdock->propDispTile       = xfce_rc_read_bool_entry (rc, 
RCKEY_DISPTILE, TRUE);
+       wmdock->propDispPropButton = xfce_rc_read_bool_entry (rc, 
RCKEY_DISPPROPBTN, FALSE);
+       wmdock->propDispAddOnlyWM  = xfce_rc_read_bool_entry (rc, 
RCKEY_DISPADDONLYWM, TRUE);
        if(wmdock->filterList) g_free(wmdock->filterList);
-       wmdock->filterList         = g_strdup(xfce_rc_read_entry (rc, 
"dafilter", DOCKAPP_FILTER_PATTERN));
+       wmdock->filterList         = g_strdup(xfce_rc_read_entry (rc, 
RCKEY_DAFILTER, DOCKAPP_FILTER_PATTERN));
        /* TODO: Set panel off to FALSE. */
-       rcPanelOff = wmdock->propPanelOff = xfce_rc_read_bool_entry (rc, 
"paneloff", TRUE);
-       wmdock->anchorPos          = xfce_rc_read_int_entry(rc, "anchorpos", 
-1);
+       rcPanelOff = wmdock->propPanelOff = xfce_rc_read_bool_entry (rc, 
RCKEY_PANELOFF, TRUE);
+       wmdock->anchorPos          = xfce_rc_read_int_entry(rc, 
RCKEY_ANCHORPOS, -1);
 
        if(G_LIKELY(rcCmds != NULL)) {
                /* Wait 5 seconds as workaround for double XMap problems. */
@@ -111,7 +112,7 @@ void wmdock_read_rc_file (XfcePanelPlugin *plugin)
                                }
                        }
                }
-       }
+       } /* rcCmds != NULL */
 
        xfce_rc_close (rc);
 }
@@ -119,12 +120,14 @@ void wmdock_read_rc_file (XfcePanelPlugin *plugin)
 
 void wmdock_write_rc_file (XfcePanelPlugin *plugin)
 {
-       gchar       *file;
+       gchar       *file = NULL, *p = NULL;
        XfceRc      *rc;
-       gchar       **cmds = NULL;
+       gchar       **cmdList = NULL;
+       gchar       **glueList = NULL;
+       gchar       buf[BUF_MAX];
        GList       *dapps;
        DockappNode *dapp = NULL;
-       gint        i = 0;
+       gint        i = 0, gluePos = 0, j = 0;
 
        if (!(file = xfce_panel_plugin_save_location (plugin, TRUE))) return;
 
@@ -134,27 +137,47 @@ void wmdock_write_rc_file (XfcePanelPlugin *plugin)
        if (!rc) return;
 
        if(g_list_length (wmdock->dapps) > 0) {
-               cmds = g_malloc0(sizeof (gchar *) * (g_list_length 
(wmdock->dapps) + 1));
+               cmdList = g_malloc0(sizeof (gchar *) * (g_list_length 
(wmdock->dapps) + 1));
+               if ( IS_PANELOFF(wmdock) )
+                       glueList = g_malloc0(sizeof (gchar *) * (g_list_length 
(wmdock->dapps) + 1));
 
-               dapps = g_list_first(wmdock->dapps);
-               while(dapps) {
+               for(dapps = g_list_first(wmdock->dapps) ; dapps; dapps = 
g_list_next(dapps)) {
                        dapp = DOCKAPP(dapps->data);
-                       if(dapp && dapp->cmd)
-                               cmds[i++] = g_strdup(dapp->cmd);
-                       dapps = g_list_next(dapps);
+                       if((i = g_list_index(wmdock->dapps, (gconstpointer) 
dapp)) == -1)
+                               continue;
+                       cmdList[i] = dapp->cmd ? g_strdup(dapp->cmd) : NULL;
+                       if( IS_PANELOFF(wmdock) ) {
+                               buf[0] = '\0';
+                               for(gluePos = 0; gluePos < GLUE_MAX; gluePos++) 
{
+                                       if(dapp->glue[gluePos] && (j = 
g_list_index(wmdock->dapps, (gconstpointer) dapp->glue[gluePos])) != -1) {
+                                               /* 
ChildIndex1(j):position,ChildIndex2:postion,... */
+                                               if(strlen((const char *) buf) > 
0)
+                                                       p = 
g_strdup_printf(",%d:%s", j, get_glue_name(gluePos));
+                                               else
+                                                       p = 
g_strdup_printf("%d:%s", j, get_glue_name(gluePos));
+                                               g_strlcat(buf, p, sizeof(buf));
+                                               g_free(p);
+                                       }
+                               }
+                               glueList[i] = g_strdup(buf);
+                       }
                }
 
-               xfce_rc_write_list_entry(rc, "cmds", cmds, ";");
+               xfce_rc_write_list_entry(rc, RCKEY_CMDLIST, cmdList, ";");
+               g_strfreev(cmdList);
 
-               g_strfreev(cmds);
+               if( IS_PANELOFF(wmdock) ) {
+                       xfce_rc_write_list_entry(rc, RCKEY_GLUELIST, glueList, 
";");
+                       g_strfreev(glueList);
+               }
 
-               xfce_rc_write_int_entry (rc, "cmdcnt", g_list_length 
(wmdock->dapps));
-               xfce_rc_write_bool_entry (rc, "disptile", wmdock->propDispTile);
-               xfce_rc_write_bool_entry (rc, "disppropbtn", 
wmdock->propDispPropButton);
-               xfce_rc_write_bool_entry (rc, "dispaddonlywm", 
wmdock->propDispAddOnlyWM);
-               xfce_rc_write_bool_entry (rc, "paneloff", rcPanelOff);
-               xfce_rc_write_entry(rc, "dafilter", wmdock->filterList);
-               xfce_rc_write_int_entry (rc, "anchorpos", wmdock->anchorPos);
+               xfce_rc_write_int_entry (rc, RCKEY_CMDCNT, g_list_length 
(wmdock->dapps));
+               xfce_rc_write_bool_entry (rc, RCKEY_DISPTILE, 
wmdock->propDispTile);
+               xfce_rc_write_bool_entry (rc, RCKEY_DISPPROPBTN, 
wmdock->propDispPropButton);
+               xfce_rc_write_bool_entry (rc, RCKEY_DISPADDONLYWM, 
wmdock->propDispAddOnlyWM);
+               xfce_rc_write_bool_entry (rc, RCKEY_PANELOFF, rcPanelOff);
+               xfce_rc_write_entry(rc, RCKEY_DAFILTER, wmdock->filterList);
+               xfce_rc_write_int_entry (rc, RCKEY_ANCHORPOS, 
wmdock->anchorPos);
        }
 
        xfce_rc_close(rc);
diff --git a/panel-plugin/rcfile.h b/panel-plugin/rcfile.h
index 6d4339f..7556487 100644
--- a/panel-plugin/rcfile.h
+++ b/panel-plugin/rcfile.h
@@ -23,6 +23,16 @@
 #ifndef __RCFILE_H__
 #define __RCFILE_H__
 
+#define RCKEY_CMDLIST       (const gchar *) "cmds"
+#define RCKEY_CMDCNT        (const gchar *) "cmdcnt"
+#define RCKEY_DISPTILE      (const gchar *) "disptile"
+#define RCKEY_DISPPROPBTN   (const gchar *) "disppropbtn"
+#define RCKEY_DISPADDONLYWM (const gchar *) "dispaddonlywm"
+#define RCKEY_PANELOFF      (const gchar *) "paneloff"
+#define RCKEY_DAFILTER      (const gchar *) "dafilter"
+#define RCKEY_ANCHORPOS     (const gchar *) "anchorpos"
+#define RCKEY_GLUELIST      (const gchar *) "glues"
+
 /* Prototypes */
 void wmdock_read_rc_file (XfcePanelPlugin *);
 void wmdock_write_rc_file (XfcePanelPlugin *);
_______________________________________________
Xfce4-commits mailing list
[email protected]
https://mail.xfce.org/mailman/listinfo/xfce4-commits

Reply via email to