Updating branch refs/heads/0.6.x
         to d4d5da8306e3f12ee9bb80449291971fb6017272 (commit)
       from cf255cb4dffd80d4dea7a5d9a4495d9d2d54009b (commit)

commit d4d5da8306e3f12ee9bb80449291971fb6017272
Author: Andre Ellguth <an...@ellguth.com>
Date:   Mon Oct 14 20:08:07 2013 +0200

    Added some additional options for panel off mode.
    Added support to set the initial startup postion in panel off mode.

 panel-plugin/dockapp.c |  169 +++++++++++++++++++++++++++-------
 panel-plugin/dockapp.h |    1 +
 panel-plugin/props.c   |  236 ++++++++++++++++++++++++++++++------------------
 panel-plugin/rcfile.c  |    9 +-
 panel-plugin/rcfile.h  |   20 ++--
 panel-plugin/wmdock.c  |   12 ++-
 panel-plugin/wmdock.h  |    2 +
 7 files changed, 317 insertions(+), 132 deletions(-)

diff --git a/panel-plugin/dockapp.c b/panel-plugin/dockapp.c
index 2f5f448..e761a25 100644
--- a/panel-plugin/dockapp.c
+++ b/panel-plugin/dockapp.c
@@ -51,6 +51,7 @@ static GtkTargetEntry targetList[] = {
 static guint nTargets = G_N_ELEMENTS (targetList);
 static DockappNode *dappOnMotion = NULL, *dappDummy = NULL;
 static gint motionstartx = 0, motionstarty = 0;
+static gboolean blockDappReorder = FALSE;
 
 /**
  * Get the x coordinate child dockapp.
@@ -68,7 +69,7 @@ static void wmdock_dockapp_child_pos(DockappNode *prevDapp, 
gint gluepos, gint *
        /* Setup the position of the first dockapp. */
        prevx = prevy = 0;
 
-       if(!prevDapp)
+       if(! IS_PANELOFF(wmdock) || !prevDapp)
                return;
 
        /* Get the position of the previous DockApp if is accessable. */
@@ -114,12 +115,15 @@ static DockappNode 
*wmdock_get_snapable_dockapp(DockappNode *dapp, gint *gluepos
        GList *dapps;
        DockappNode *_dapp = NULL;
 
+       if( ! IS_PANELOFF(wmdock) )
+               return NULL;
+
        prim = (dapp == wmdock_get_primary_anchor_dockapp()) ? TRUE : FALSE;
 
        switch(wmdock->anchorPos) {
        /* Remove not possible snap positions for the dragging dockapp. */
        case ANCHOR_TR:
-               possible^= (GLUE_T | GLUE_L);
+               possible^= (GLUE_T | GLUE_R);
                possible^= prim == TRUE ? GLUE_R : 0;
                break;
        case ANCHOR_BR:
@@ -127,7 +131,7 @@ static DockappNode *wmdock_get_snapable_dockapp(DockappNode 
*dapp, gint *gluepos
                possible^= prim == TRUE ? GLUE_L: 0;
                break;
        case ANCHOR_TL:
-               possible^= (GLUE_T | GLUE_R);
+               possible^= (GLUE_T | GLUE_L);
                possible^= prim == TRUE ? GLUE_L : 0;
                break;
        case ANCHOR_BL:
@@ -170,6 +174,9 @@ static void wmdock_remove_anchors_tile_dummy()
        GList *dapps;
        DockappNode *_dapp = NULL;
 
+       if( ! IS_PANELOFF(wmdock) )
+               return;
+
        dapps = g_list_first(wmdock->dapps);
        while(dapps) {
                if((_dapp = DOCKAPP(dapps->data))) {
@@ -197,6 +204,9 @@ static gboolean wmdock_replace_tile_dummy(DockappNode *dapp)
        GList *dapps;
        DockappNode *_dapp = NULL, *parent = NULL, *_parent = NULL;
 
+       if( ! IS_PANELOFF(wmdock) )
+               return FALSE;
+
        parent = wmdock_get_parent_dockapp(dapp);
        if(!parent && wmdock_get_primary_anchor_dockapp() == dapp) {
                /* Set the nearest dockapp to parent if the current dapp is 
primary.
@@ -257,6 +267,9 @@ static gboolean wmdock_replace_tile_dummy(DockappNode *dapp)
  */
 static void wmdock_dockapp_button_press_handler(GtkWidget *window, 
GdkEventButton *ev, DockappNode *dapp)
 {
+       if( ! IS_PANELOFF(wmdock) )
+               return;
+
        debug("dockapp.c: Window button press event (dapp: `%s')", dapp->name);
        dappOnMotion = dapp;
        motionstartx = (gint) ev->x;
@@ -275,6 +288,9 @@ static void wmdock_dockapp_button_press_handler(GtkWidget 
*window, GdkEventButto
  */
 static void wmdock_dockapp_button_release_handler(GtkWidget *window, 
GdkEventButton *ev, DockappNode *dapp)
 {
+       if( ! IS_PANELOFF(wmdock) )
+               return;
+
        debug("dockapp.c: Window button release event (dapp: `%s')", 
dapp->name);
        if(wmdock_replace_tile_dummy(dapp) == TRUE) {
                debug("dockapp.c: Replaceable dummy tile found.");
@@ -289,7 +305,7 @@ static void wmdock_dockapp_button_release_handler(GtkWidget 
*window, GdkEventBut
 
        dappOnMotion = NULL;
        gtk_window_set_keep_above(GTK_WINDOW(dapp->tile), FALSE);
-       gtk_window_set_keep_below(GTK_WINDOW(dapp->tile), TRUE);
+       gtk_window_set_keep_below(GTK_WINDOW(dapp->tile), 
wmdock->propPanelOffKeepAbove == TRUE ? FALSE : TRUE);
 }
 
 
@@ -306,6 +322,9 @@ static void wmdock_dockapp_motion_notify_handler(GtkWidget 
*window, GdkEventMoti
        DockappNode *dappSnap = NULL;
        GdkModifierType m;
 
+       if( ! IS_PANELOFF(wmdock) )
+               return;
+
        debug("dockapp.c: Window motion notify event (dapp: `%s')", dapp->name);
 
        gdk_window_get_pointer(dapp->tile->window, &x, &y, &m);
@@ -397,6 +416,9 @@ DockappNode *wmdock_get_primary_anchor_dockapp()
        GList *dapps1, *dapps2;
        DockappNode *dapp1 = NULL, *dapp2 = NULL;
 
+       if( ! IS_PANELOFF(wmdock) )
+               return NULL;
+
        dapps1 = g_list_first(wmdock->dapps);
 
        while(dapps1) {
@@ -439,8 +461,11 @@ DockappNode *wmdock_get_primary_anchor_dockapp()
  */
 void wmdock_dockapp_event_after_handler(GtkWidget *window, GdkEvent *ev, 
DockappNode *dapp)
 {
-       debug("dockapp.c: Window event-after: %d. (dapp: `%s'), dappOnMove: 
%s", ev->type, dapp->name,
-                       dappOnMotion ? "Yes": "No");
+       if( ! IS_PANELOFF(wmdock) )
+               return;
+
+       debug("dockapp.c: Window event-after: %d. (dapp: `%s'), dappOnMove: 
%s", ev->type, dapp->name, dappOnMotion ? "Yes": "No");
+
        switch(ev->type) {
        case GDK_FOCUS_CHANGE:
                if(ev->focus_change.in == TRUE) {
@@ -466,6 +491,9 @@ GtkWidget *wmdock_create_tile_dummy()
 {
        GtkWidget *dummy = NULL;
 
+       if( ! IS_PANELOFF(wmdock) )
+               return NULL;
+
        dummy = gtk_window_new(GTK_WINDOW_TOPLEVEL);
 
        gtk_window_set_default_size(GTK_WINDOW(dummy), DEFAULT_DOCKAPP_WIDTH,
@@ -499,10 +527,10 @@ void wmdock_dockapp_tofront(DockappNode *dapp) {
                return;
 
        if ( IS_PANELOFF(wmdock) ) {
-               gtk_window_set_keep_below(GTK_WINDOW(dapp->tile), FALSE);
+               gtk_window_set_keep_below(GTK_WINDOW(dapp->tile), 
wmdock->propPanelOffKeepAbove == TRUE ? FALSE : TRUE);
                gdk_window_raise(dapp->tile->window);
                gtk_window_set_keep_above(GTK_WINDOW(dapp->tile), FALSE);
-               gtk_window_set_keep_below(GTK_WINDOW(dapp->tile), TRUE);
+               gtk_window_set_keep_below(GTK_WINDOW(dapp->tile), 
wmdock->propPanelOffKeepAbove == TRUE ? FALSE : TRUE);
        }
 }
 
@@ -530,7 +558,7 @@ void wmdock_destroy_dockapp(DockappNode *dapp)
 
 void wmdock_setupdnd_dockapp(DockappNode *dapp)
 {
-       if( ! IS_PANELOFF(wmdock)) {
+       if( ! IS_PANELOFF(wmdock) ) {
                /* Make the "well label" a DnD destination. */
                gtk_drag_dest_set (GTK_WIDGET(dapp->s), 
GTK_DEST_DEFAULT_MOTION, targetList,
                                nTargets, GDK_ACTION_MOVE);
@@ -646,10 +674,9 @@ void wmdock_free_dockapp(DockappNode *dapp)
                wmdock_panel_draw_wmdock_icon(FALSE);
        }
 
-       if( IS_PANELOFF(wmdock) && g_list_first(wmdock->dapps))
-               
wmdock_order_dockapps(DOCKAPP(g_list_first(wmdock->dapps)->data));
-
        wmdock_refresh_properties_dialog();
+       if ( IS_PANELOFF(wmdock) )
+               wmdock_order_dockapps(wmdock_get_primary_anchor_dockapp());
 }
 
 
@@ -710,6 +737,9 @@ DockappNode *wmdock_get_parent_dockapp(DockappNode *dapp)
        GList *dapps;
        DockappNode *_dapp;
 
+       if (! IS_PANELOFF(wmdock) )
+               return NULL;
+
        dapps = g_list_first(wmdock->dapps);
 
        while(dapps) {
@@ -836,7 +866,7 @@ GtkWidget *wmdock_create_tile_from_socket(DockappNode *dapp)
                gtk_container_set_border_width(GTK_CONTAINER(tile), 0);
                /* To disable dragging by alt key. */
                gtk_window_set_type_hint(GTK_WINDOW(tile), 
GDK_WINDOW_TYPE_HINT_DOCK);
-               gtk_window_set_keep_below(GTK_WINDOW(tile), TRUE);
+               gtk_window_set_keep_below(GTK_WINDOW(tile), 
wmdock->propPanelOffKeepAbove == TRUE ? FALSE : TRUE);
                gtk_window_set_keep_above(GTK_WINDOW(tile), FALSE);
 
                /* Disable window shrinking resizing and growing. */
@@ -874,7 +904,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) || !dapp )
+       if(! IS_PANELOFF(wmdock) || !dapp || blockDappReorder == TRUE)
                return;
 
        /* Setup the position of the first dockapp. */
@@ -910,14 +940,16 @@ void wmdock_set_autoposition_dockapp(DockappNode *dapp, 
DockappNode *prevDapp)
                        offsetx = offsety = 0;
                        switch(wmdock->anchorPos) {
                        case ANCHOR_TL:
-                               if(xfceScrPos == XFCE_SCREEN_POSITION_NW_V ||
+                               if((xfceScrPos == XFCE_SCREEN_POSITION_NW_V ||
                                                xfceScrPos == 
XFCE_SCREEN_POSITION_W ||
-                                               xfceScrPos == 
XFCE_SCREEN_POSITION_SW_V) {
+                                               xfceScrPos == 
XFCE_SCREEN_POSITION_SW_V) &&
+                                               
wmdock->propPanelOffIgnoreOffset == FALSE) {
                                        offsetx = panelx == 0 ? 
xfce_panel_plugin_get_size(wmdock->plugin) + 1 : 0;
                                        offsety = 0;
-                               } else if (xfceScrPos == 
XFCE_SCREEN_POSITION_NW_H ||
+                               } else if ((xfceScrPos == 
XFCE_SCREEN_POSITION_NW_H ||
                                                xfceScrPos == 
XFCE_SCREEN_POSITION_N ||
-                                               xfceScrPos == 
XFCE_SCREEN_POSITION_NE_H) {
+                                               xfceScrPos == 
XFCE_SCREEN_POSITION_NE_H) &&
+                                               
wmdock->propPanelOffIgnoreOffset == FALSE) {
                                        offsetx = 0;
                                        offsety = panely == 0 ? 
xfce_panel_plugin_get_size(wmdock->plugin) + 1 : 0;
                                }
@@ -926,14 +958,16 @@ void wmdock_set_autoposition_dockapp(DockappNode *dapp, 
DockappNode *prevDapp)
                                y = 0 + offsety;
                                break;
                        case ANCHOR_TR:
-                               if(xfceScrPos == XFCE_SCREEN_POSITION_NE_V ||
+                               if((xfceScrPos == XFCE_SCREEN_POSITION_NE_V ||
                                                xfceScrPos == 
XFCE_SCREEN_POSITION_E ||
-                                               xfceScrPos == 
XFCE_SCREEN_POSITION_SE_V) {
+                                               xfceScrPos == 
XFCE_SCREEN_POSITION_SE_V) &&
+                                               
wmdock->propPanelOffIgnoreOffset == FALSE) {
                                        offsetx = 
xfce_panel_plugin_get_size(wmdock->plugin) + 1;
                                        offsety = 0;
-                               } else if (xfceScrPos == 
XFCE_SCREEN_POSITION_NW_H ||
+                               } else if ((xfceScrPos == 
XFCE_SCREEN_POSITION_NW_H ||
                                                xfceScrPos == 
XFCE_SCREEN_POSITION_N ||
-                                               xfceScrPos == 
XFCE_SCREEN_POSITION_NE_H) {
+                                               xfceScrPos == 
XFCE_SCREEN_POSITION_NE_H) &&
+                                               
wmdock->propPanelOffIgnoreOffset == FALSE) {
                                        offsetx = 0;
                                        offsety = panely == 0 ? 
xfce_panel_plugin_get_size(wmdock->plugin) + 1 : 0;
                                }
@@ -942,14 +976,16 @@ void wmdock_set_autoposition_dockapp(DockappNode *dapp, 
DockappNode *prevDapp)
                                y = 0 + offsety;
                                break;
                        case ANCHOR_BL:
-                               if(xfceScrPos == XFCE_SCREEN_POSITION_NW_V ||
+                               if((xfceScrPos == XFCE_SCREEN_POSITION_NW_V ||
                                                xfceScrPos == 
XFCE_SCREEN_POSITION_W ||
-                                               xfceScrPos == 
XFCE_SCREEN_POSITION_SW_V) {
+                                               xfceScrPos == 
XFCE_SCREEN_POSITION_SW_V) &&
+                                               
wmdock->propPanelOffIgnoreOffset == FALSE) {
                                        offsetx = panelx == 0 ? 
xfce_panel_plugin_get_size(wmdock->plugin) + 1 : 0;
                                        offsety = 0;
-                               } else if (xfceScrPos == 
XFCE_SCREEN_POSITION_SW_H ||
+                               } else if ((xfceScrPos == 
XFCE_SCREEN_POSITION_SW_H ||
                                                xfceScrPos == 
XFCE_SCREEN_POSITION_S ||
-                                               xfceScrPos == 
XFCE_SCREEN_POSITION_SE_H) {
+                                               xfceScrPos == 
XFCE_SCREEN_POSITION_SE_H) &&
+                                               
wmdock->propPanelOffIgnoreOffset == FALSE) {
                                        offsetx = 0;
                                        offsety = 
xfce_panel_plugin_get_size(wmdock->plugin) + 1;
                                }
@@ -958,14 +994,16 @@ void wmdock_set_autoposition_dockapp(DockappNode *dapp, 
DockappNode *prevDapp)
                                y = 
gdk_screen_get_height(get_current_gdkscreen()) - DEFAULT_DOCKAPP_HEIGHT - 
offsety;
                                break;
                        case ANCHOR_BR:
-                               if(xfceScrPos == XFCE_SCREEN_POSITION_NE_V ||
+                               if((xfceScrPos == XFCE_SCREEN_POSITION_NE_V ||
                                                xfceScrPos == 
XFCE_SCREEN_POSITION_E ||
-                                               xfceScrPos == 
XFCE_SCREEN_POSITION_SE_V) {
+                                               xfceScrPos == 
XFCE_SCREEN_POSITION_SE_V) &&
+                                               
wmdock->propPanelOffIgnoreOffset == FALSE) {
                                        offsetx = 
xfce_panel_plugin_get_size(wmdock->plugin) + 1;
                                        offsety = 0;
-                               } else if (xfceScrPos == 
XFCE_SCREEN_POSITION_SW_H ||
+                               } else if ((xfceScrPos == 
XFCE_SCREEN_POSITION_SW_H ||
                                                xfceScrPos == 
XFCE_SCREEN_POSITION_S ||
-                                               xfceScrPos == 
XFCE_SCREEN_POSITION_SE_H) {
+                                               xfceScrPos == 
XFCE_SCREEN_POSITION_SE_H) &&
+                                               
wmdock->propPanelOffIgnoreOffset == FALSE) {
                                        offsetx = 0;
                                        offsety = 
xfce_panel_plugin_get_size(wmdock->plugin) + 1;
                                }
@@ -980,6 +1018,7 @@ void wmdock_set_autoposition_dockapp(DockappNode *dapp, 
DockappNode *prevDapp)
                        }
                } /* else */
        }
+
        gtk_window_move(GTK_WINDOW(dapp->tile), x, y);
 
        debug("dockapp.c: %d, Panel posx: %d, Panel posy: %d, Plug posx: %d, 
Plug posy: %d, prevDapp: %s, movex: %d, movey: %d",
@@ -997,7 +1036,7 @@ void wmdock_order_dockapps(DockappNode *dapp)
 {
        gint i;
 
-       if(! IS_PANELOFF(wmdock) || !dapp )
+       if(! IS_PANELOFF(wmdock) || !dapp || blockDappReorder == TRUE)
                return;
 
        for(i = 0; i < GLUE_MAX; i++) {
@@ -1009,3 +1048,71 @@ void wmdock_order_dockapps(DockappNode *dapp)
                        wmdock_order_dockapps(dapp->glue[i]);
        }
 }
+
+
+/**
+ * Function swap all anchors for the new startup position.
+ *
+ * @param AnchorPostion The new postion startup anchor postion.
+ */
+void wmdock_set_new_anchorpos(AnchorPostion newAnchorPos)
+{
+       GList *dapps = NULL;
+       DockappNode *_dapp = NULL, *_glue = NULL;
+       gboolean swapLeftRight = FALSE, swapTopBottom = FALSE;
+
+       if (! IS_PANELOFF(wmdock) || newAnchorPos == wmdock->anchorPos)
+               return;
+
+       blockDappReorder = TRUE; /* Temporary disable dockapp reordering. */
+       for(dapps = g_list_first(wmdock->dapps); dapps; dapps = 
g_list_next(dapps)) {
+               _dapp = DOCKAPP(dapps->data);
+               switch(newAnchorPos) {
+               case ANCHOR_TL:
+                       if(wmdock->anchorPos == ANCHOR_TR || wmdock->anchorPos 
== ANCHOR_BR)
+                               /* Swap from left to right. */
+                               swapLeftRight = TRUE;
+                       if(wmdock->anchorPos == ANCHOR_BL || wmdock->anchorPos 
== ANCHOR_BR)
+                               /* Swap from bottom to top. */
+                               swapTopBottom = TRUE;
+                       break;
+               case ANCHOR_TR:
+                       if(wmdock->anchorPos == ANCHOR_TL || wmdock->anchorPos 
== ANCHOR_BL)
+                               /* Swap from left to right. */
+                               swapLeftRight = TRUE;
+                       if(wmdock->anchorPos == ANCHOR_BL || wmdock->anchorPos 
== ANCHOR_BR)
+                               /* Swap from bottom to top. */
+                               swapTopBottom = TRUE;
+                       break;
+               case ANCHOR_BL:
+                       if(wmdock->anchorPos == ANCHOR_TR || wmdock->anchorPos 
== ANCHOR_BR)
+                               /* Swap from left to right. */
+                               swapLeftRight = TRUE;
+                       if(wmdock->anchorPos == ANCHOR_TL || wmdock->anchorPos 
== ANCHOR_TR)
+                               /* Swap from bottom to top. */
+                               swapTopBottom = TRUE;
+                       break;
+               default: /* ANCHOR_BR */
+                       if(wmdock->anchorPos == ANCHOR_TL || wmdock->anchorPos 
== ANCHOR_BL)
+                               /* Swap from left to right. */
+                               swapLeftRight = TRUE;
+                       if(wmdock->anchorPos == ANCHOR_TL || wmdock->anchorPos 
== ANCHOR_TR)
+                               /* Swap from bottom to top. */
+                               swapTopBottom = TRUE;
+                       break;
+               }
+
+               if(swapLeftRight == TRUE) {
+                       _glue = _dapp->glue[GLUE_L];
+                       _dapp->glue[GLUE_L] = _dapp->glue[GLUE_R];
+                       _dapp->glue[GLUE_R] = _glue;
+               }
+               if(swapTopBottom == TRUE) {
+                       _glue = _dapp->glue[GLUE_T];
+                       _dapp->glue[GLUE_T] = _dapp->glue[GLUE_B];
+                       _dapp->glue[GLUE_B] = _glue;
+               }
+       }
+
+       blockDappReorder = FALSE;
+}
diff --git a/panel-plugin/dockapp.h b/panel-plugin/dockapp.h
index 4e5a886..7bf4283 100644
--- a/panel-plugin/dockapp.h
+++ b/panel-plugin/dockapp.h
@@ -70,6 +70,7 @@ void wmdock_dockapp_tofront(DockappNode *dapp);
 void wmdock_dockapp_event_after_handler(GtkWidget *, GdkEvent *, DockappNode 
*);
 void wmdock_remove_anchor_dockapp(DockappNode *, DockappNode *);
 void wmdock_order_dockapps(DockappNode *);
+void wmdock_set_new_anchorpos(AnchorPostion);
 GtkWidget *wmdock_create_tile_dummy();
 gint wmdock_get_default_gluepos();
 gint wmdock_get_glue_position(gchar const *);
diff --git a/panel-plugin/props.c b/panel-plugin/props.c
index f20892d..6bc7f04 100644
--- a/panel-plugin/props.c
+++ b/panel-plugin/props.c
@@ -41,18 +41,19 @@
 
 /* Properties dialog */
 static struct {
-       GtkWidget *dlg;
-       GtkWidget *vbox, *vbox2, *vboxGeneral, *vboxDetect;
-       GtkWidget *hbox, *hboxPanelOffOpts;
-       GtkWidget *frmGeneral, *frmDetect, *frmPanelOffOpts;
-       GtkWidget *lblSel, *lblCmd;
-       GtkWidget *chkDispTile, *chkPropButton, *chkAddOnlyWM, *chkPanelOff;
-       GtkWidget *radioPanelOffTL, *radioPanelOffTR, *radioPanelOffBL, 
*radioPanelOffBR;
-       GtkWidget *imageContainer, *container;
-       GtkWidget *imageTile, *image;
-       GtkWidget *txtCmd;
-       GtkWidget *cbx;
-       GtkWidget *btnMoveUp, *btnMoveDown, *txtPatterns;
+       GtkWidget *dlg; /* Dialogs */
+       GtkWidget *vbox, *vbox2, *vboxGeneral, *vboxDetect, *vboxPanelOffOpts; 
/* Vertical boxes */
+       GtkWidget *hbox, *hboxPanelOffOpts; /* Horizontal boxes */
+       GtkWidget *frmGeneral, *frmDetect, *frmPanelOffOpts; /* Frames */
+       GtkWidget *lblSel, *lblCmd, *lblPanelOffPlacement; /* Labels */
+       GtkWidget *chkDispTile, *chkPropButton, *chkAddOnlyWM, *chkPanelOff, 
*chkPanelOffIgnoreOffset, *chkPanelOffKeepAbove; /* Check boxes */
+       GtkWidget *radioPanelOffTL, *radioPanelOffTR, *radioPanelOffBL, 
*radioPanelOffBR; /* Radio buttons */
+       GtkWidget *imageContainer, *container; /* Misc. containers */
+       GtkWidget *tblPanelOff; /* Layout tables */
+       GtkWidget *imageTile, *image; /* Images */
+       GtkWidget *txtCmd, *txtPatterns; /* Text boxes */
+       GtkWidget *cbx; /* Combo boxes */
+       GtkWidget *btnMoveUp, *btnMoveDown; /* Misc. buttons */
 } prop;
 
 static GtkWidget *btnProperties = NULL;
@@ -104,19 +105,59 @@ static void 
wmdock_properties_chkaddonlywm(GtkToggleButton *gtkChkAddOnlyWM, gpo
 }
 
 
+static void wmdock_properties_chkpaneloffignoreoffset(GtkToggleButton 
*gtkChkPanelOffIgnoreOffset, gpointer user_data)
+{
+       wmdock->propPanelOffIgnoreOffset = 
gtk_toggle_button_get_active(gtkChkPanelOffIgnoreOffset);
+       wmdock_order_dockapps(wmdock_get_primary_anchor_dockapp());
+}
+
+
+static void wmdock_properties_chkpaneloffkeepabove(GtkToggleButton 
*gtkChkPanelOffKeepAbove, gpointer user_data)
+{
+       wmdock->propPanelOffKeepAbove = 
gtk_toggle_button_get_active(gtkChkPanelOffKeepAbove);
+       g_list_foreach(wmdock->dapps, (GFunc) wmdock_dockapp_tofront, NULL);
+}
+
+
+static void wmdock_properties_radiopaneloff(GtkRadioButton *gtkRadioPanelOff, 
gpointer user_data)
+{
+       gint _anchorPos = wmdock->anchorPos;
+
+       if(gtkRadioPanelOff == GTK_RADIO_BUTTON(prop.radioPanelOffTL))
+               _anchorPos = ANCHOR_TL;
+       else if(gtkRadioPanelOff == GTK_RADIO_BUTTON(prop.radioPanelOffTR))
+               _anchorPos = ANCHOR_TR;
+       else if(gtkRadioPanelOff == GTK_RADIO_BUTTON(prop.radioPanelOffBL))
+               _anchorPos = ANCHOR_BL;
+       else if(gtkRadioPanelOff == GTK_RADIO_BUTTON(prop.radioPanelOffBR))
+               _anchorPos = ANCHOR_BR;
+
+       wmdock_set_new_anchorpos(_anchorPos);
+       wmdock->anchorPos = _anchorPos;
+       wmdock_order_dockapps(wmdock_get_primary_anchor_dockapp());
+}
+
+
 static void wmdock_properties_chkpaneloff(GtkToggleButton *gtkChkPanelOff, 
gpointer user_data)
 {
        GtkWidget *gtkDlg;
 
        if((rcPanelOff = gtk_toggle_button_get_active(gtkChkPanelOff)) == TRUE) 
{
-               wmdock->anchorPos = 
xfce_panel_plugin_get_screen_position(wmdock->plugin);
-               gtk_widget_set_sensitive(GTK_WIDGET(prop.frmPanelOffOpts), 
TRUE);
+               wmdock->anchorPos = get_default_anchor_postion();
+               gtk_widget_set_sensitive(GTK_WIDGET(prop.radioPanelOffBL), 
TRUE);
+               gtk_widget_set_sensitive(GTK_WIDGET(prop.radioPanelOffBR), 
TRUE);
+               gtk_widget_set_sensitive(GTK_WIDGET(prop.radioPanelOffTL), 
TRUE);
+               gtk_widget_set_sensitive(GTK_WIDGET(prop.radioPanelOffTR), 
TRUE);
+               gtk_widget_set_sensitive(GTK_WIDGET(prop.lblPanelOffPlacement), 
TRUE);
        } else {
-               gtk_widget_set_sensitive(GTK_WIDGET(prop.frmPanelOffOpts), 
FALSE);
+               gtk_widget_set_sensitive(GTK_WIDGET(prop.radioPanelOffBL), 
FALSE);
+               gtk_widget_set_sensitive(GTK_WIDGET(prop.radioPanelOffBR), 
FALSE);
+               gtk_widget_set_sensitive(GTK_WIDGET(prop.radioPanelOffTL), 
FALSE);
+               gtk_widget_set_sensitive(GTK_WIDGET(prop.radioPanelOffTR), 
FALSE);
+               gtk_widget_set_sensitive(GTK_WIDGET(prop.lblPanelOffPlacement), 
FALSE);
        }
 
        if(g_list_length(wmdock->dapps)) {
-
                gtkDlg = gtk_message_dialog_new(GTK_WINDOW 
(gtk_widget_get_toplevel (GTK_WIDGET (wmdock->plugin))),
                                GTK_DIALOG_DESTROY_WITH_PARENT,
                                GTK_MESSAGE_INFO,
@@ -384,16 +425,17 @@ void wmdock_properties_dialog(XfcePanelPlugin *plugin)
 
        prop.frmGeneral = gtk_frame_new(_("General settings"));
        prop.frmDetect = gtk_frame_new(_("Dockapp detection"));
-       prop.frmPanelOffOpts = gtk_frame_new(_("Alignment options"));
+       prop.frmPanelOffOpts = gtk_frame_new(_("Mode settings"));
        prop.vboxGeneral = gtk_vbox_new(FALSE, 6);
        prop.vboxDetect = gtk_vbox_new(FALSE, 6);
+       prop.vboxPanelOffOpts = gtk_vbox_new(FALSE, 6);
 
-       gtk_box_pack_start (GTK_BOX (GTK_DIALOG (prop.dlg)->vbox), 
prop.frmGeneral,
-                       FALSE, FALSE, 0);
-       gtk_box_pack_start (GTK_BOX (GTK_DIALOG (prop.dlg)->vbox), 
prop.frmDetect,
-                       FALSE, FALSE, 0);
+       gtk_box_pack_start (GTK_BOX (GTK_DIALOG (prop.dlg)->vbox), 
prop.frmGeneral, FALSE, FALSE, 0);
+       gtk_box_pack_start (GTK_BOX (GTK_DIALOG (prop.dlg)->vbox), 
prop.frmDetect, FALSE, FALSE, 0);
+       gtk_box_pack_start (GTK_BOX (GTK_DIALOG (prop.dlg)->vbox), 
prop.frmPanelOffOpts, FALSE, FALSE, 0);
        gtk_container_set_border_width (GTK_CONTAINER (prop.vboxGeneral), 4);
        gtk_container_set_border_width (GTK_CONTAINER (prop.vboxDetect), 4);
+       gtk_container_set_border_width (GTK_CONTAINER (prop.vboxPanelOffOpts), 
4);
 
        prop.vbox = gtk_vbox_new(FALSE, 4);
        prop.vbox2 = gtk_vbox_new(FALSE, 4);
@@ -403,16 +445,13 @@ void wmdock_properties_dialog(XfcePanelPlugin *plugin)
        gtk_box_pack_start (GTK_BOX (prop.hbox), prop.vbox2, FALSE, FALSE, 0);
 
        prop.imageContainer = gtk_alignment_new(0.5, 0.5, 0, 0);
-       gtk_widget_set_size_request(GTK_WIDGET(prop.imageContainer),
-                       DEFAULT_DOCKAPP_WIDTH,
-                       DEFAULT_DOCKAPP_HEIGHT);
+       gtk_widget_set_size_request(GTK_WIDGET(prop.imageContainer), 
DEFAULT_DOCKAPP_WIDTH, DEFAULT_DOCKAPP_HEIGHT);
        prop.container =  gtk_fixed_new();
 
        prop.hboxPanelOffOpts = gtk_hbox_new(FALSE, 4);
 
        /* Create the GTK widget objects. */
-       gdkPbIcon = gdk_pixbuf_new_from_xpm_data((const char**)
-                       xfce4_wmdock_plugin_xpm);
+       gdkPbIcon = gdk_pixbuf_new_from_xpm_data((const char**) 
xfce4_wmdock_plugin_xpm);
 
        prop.imageTile = gtk_image_new_from_pixbuf(gdkPbTileDefault);
        prop.image = gtk_image_new_from_pixbuf (gdkPbIcon);
@@ -423,18 +462,14 @@ void wmdock_properties_dialog(XfcePanelPlugin *plugin)
        gtk_container_add(GTK_CONTAINER(prop.container), prop.imageTile);
        gtk_container_add(GTK_CONTAINER(prop.container), prop.imageContainer);
 
-
-       gtk_box_pack_start (GTK_BOX(prop.vbox), GTK_WIDGET (prop.container),
-                       FALSE, FALSE, 0);
+       gtk_box_pack_start (GTK_BOX(prop.vbox), GTK_WIDGET (prop.container), 
FALSE, FALSE, 0);
 
        prop.btnMoveUp = xfce_arrow_button_new (GTK_ARROW_UP);
        prop.btnMoveDown = xfce_arrow_button_new (GTK_ARROW_DOWN);
 
        if(!IS_PANELOFF(wmdock)) {
-               gtk_box_pack_start (GTK_BOX(prop.vbox), GTK_WIDGET 
(prop.btnMoveUp), FALSE,
-                               FALSE, 0);
-               gtk_box_pack_start (GTK_BOX(prop.vbox), GTK_WIDGET 
(prop.btnMoveDown), FALSE,
-                               FALSE, 0);
+               gtk_box_pack_start (GTK_BOX(prop.vbox), GTK_WIDGET 
(prop.btnMoveUp), FALSE, FALSE, 0);
+               gtk_box_pack_start (GTK_BOX(prop.vbox), GTK_WIDGET 
(prop.btnMoveDown), FALSE, FALSE, 0);
        }
 
        prop.lblSel = gtk_label_new (_("Select dockapp to configure:"));
@@ -457,76 +492,101 @@ void wmdock_properties_dialog(XfcePanelPlugin *plugin)
        }
        gtk_box_pack_start (GTK_BOX(prop.vbox2), prop.txtCmd, FALSE, FALSE, 0);
 
-       prop.chkDispTile   = gtk_check_button_new_with_label(_("Display tile in 
the background."));
-       prop.chkPropButton = gtk_check_button_new_with_label(_("Display a 
separate WMdock properties\nbutton in the panel."));
-       prop.chkAddOnlyWM  = gtk_check_button_new_with_label(_("Add only 
dockapps which start with\npattern in list. (e.g.: ^wm;^as)"));
-       prop.chkPanelOff   = gtk_check_button_new_with_label(_("Don't use the 
XFCE panel for the dockapps."));
-       prop.txtPatterns   = gtk_entry_new();
+       prop.chkDispTile             = 
gtk_check_button_new_with_label(_("Display tile in the background."));
+       prop.chkPropButton           = 
gtk_check_button_new_with_label(_("Display a separate WMdock properties button 
in the panel."));
+       prop.chkAddOnlyWM            = gtk_check_button_new_with_label(_("Add 
only dockapps which start with pattern in list. (e.g.: ^wm;^as)"));
+       prop.chkPanelOff             = 
gtk_check_button_new_with_label(_("Display dockapps in separate windows and not 
in the panel."));
+       prop.chkPanelOffIgnoreOffset = gtk_check_button_new_with_label(_("Don't 
use panel size as offset for the first dockapp."));
+       prop.chkPanelOffKeepAbove    = gtk_check_button_new_with_label(_("Keep 
dockapp windows on top."));
+       prop.txtPatterns    = gtk_entry_new();
        gtk_entry_set_text(GTK_ENTRY(prop.txtPatterns), wmdock->filterList);
-       gtk_widget_set_sensitive (GTK_WIDGET (prop.txtPatterns),
-                       wmdock->propDispAddOnlyWM);
+       gtk_widget_set_sensitive (GTK_WIDGET (prop.txtPatterns), 
wmdock->propDispAddOnlyWM);
 
-       gtk_toggle_button_set_active((GtkToggleButton *) prop.chkDispTile,
-                       wmdock->propDispTile);
-       gtk_toggle_button_set_active((GtkToggleButton *) prop.chkPropButton,
-                       wmdock->propDispPropButton);
-       gtk_toggle_button_set_active((GtkToggleButton *) prop.chkAddOnlyWM,
-                       wmdock->propDispAddOnlyWM);
-       gtk_toggle_button_set_active((GtkToggleButton *) prop.chkPanelOff,
-                       rcPanelOff);
+       gtk_toggle_button_set_active((GtkToggleButton *) prop.chkDispTile, 
wmdock->propDispTile);
+       gtk_toggle_button_set_active((GtkToggleButton *) prop.chkPropButton, 
wmdock->propDispPropButton);
+       gtk_toggle_button_set_active((GtkToggleButton *) prop.chkAddOnlyWM, 
wmdock->propDispAddOnlyWM);
+       gtk_toggle_button_set_active((GtkToggleButton *) prop.chkPanelOff, 
rcPanelOff);
+       gtk_toggle_button_set_active((GtkToggleButton *) 
prop.chkPanelOffIgnoreOffset, wmdock->propPanelOffIgnoreOffset);
+       gtk_toggle_button_set_active((GtkToggleButton *) 
prop.chkPanelOffKeepAbove, wmdock->propPanelOffKeepAbove);
 
        gtk_container_add(GTK_CONTAINER(prop.frmGeneral), prop.vboxGeneral);
        gtk_container_add(GTK_CONTAINER(prop.frmDetect), prop.vboxDetect);
-
-       gtk_box_pack_start (GTK_BOX(prop.vboxGeneral), prop.chkPanelOff,
-                       FALSE, FALSE, 0);
-       gtk_box_pack_start (GTK_BOX(prop.vboxGeneral), prop.frmPanelOffOpts,
-                       FALSE, FALSE, 0);
-       gtk_box_pack_start (GTK_BOX(prop.vboxGeneral), prop.chkDispTile,
-                       FALSE, FALSE, 0);
-       gtk_box_pack_start (GTK_BOX(prop.vboxGeneral), prop.chkPropButton,
-                       FALSE, FALSE, 0);
-       gtk_box_pack_start (GTK_BOX(prop.vboxDetect), prop.chkAddOnlyWM,
-                       FALSE, FALSE, 0);
-       gtk_box_pack_start (GTK_BOX(prop.vboxDetect), prop.txtPatterns,
-                       FALSE, FALSE, 0);
-
-       /* Setup advanced panel off mode options frame. */
+       gtk_container_add(GTK_CONTAINER(prop.frmPanelOffOpts), 
prop.vboxPanelOffOpts);
+
+       gtk_box_pack_start (GTK_BOX(prop.vboxGeneral), prop.frmPanelOffOpts, 
FALSE, FALSE, 0);
+       gtk_box_pack_start (GTK_BOX(prop.vboxGeneral), prop.chkDispTile, FALSE, 
FALSE, 0);
+       gtk_box_pack_start (GTK_BOX(prop.vboxGeneral), prop.chkPropButton, 
FALSE, FALSE, 0);
+       gtk_box_pack_start (GTK_BOX(prop.vboxDetect), prop.chkAddOnlyWM, FALSE, 
FALSE, 0);
+       gtk_box_pack_start (GTK_BOX(prop.vboxDetect), prop.txtPatterns, FALSE, 
FALSE, 0);
+
+       /* Setup panel off mode options frame. */
+       gtk_box_pack_start (GTK_BOX(prop.vboxPanelOffOpts), prop.chkPanelOff, 
FALSE, FALSE, 0);
+       gtk_box_pack_start (GTK_BOX (prop.vboxPanelOffOpts), 
prop.chkPanelOffKeepAbove, FALSE, FALSE, 0);
+       gtk_box_pack_start (GTK_BOX (prop.vboxPanelOffOpts), 
prop.chkPanelOffIgnoreOffset, FALSE, FALSE, 0);
+       gtk_box_pack_start (GTK_BOX(prop.vboxPanelOffOpts), 
prop.hboxPanelOffOpts, FALSE, FALSE, 0);
+
+       prop.tblPanelOff = gtk_table_new(2, 2, TRUE);
+       prop.lblPanelOffPlacement = gtk_label_new (_("Startup placement:"));
+       gtk_misc_set_alignment (GTK_MISC (prop.lblPanelOffPlacement), 0, 0);
        prop.radioPanelOffTL = gtk_radio_button_new_with_label(NULL, _("Top 
left"));
        prop.radioPanelOffTR = 
gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(prop.radioPanelOffTL),
 _("Top right"));
        prop.radioPanelOffBL = 
gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(prop.radioPanelOffTL),
 _("Bottom left"));
        prop.radioPanelOffBR = 
gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(prop.radioPanelOffTL),
 _("Bottom right"));
 
-       gtk_container_add(GTK_CONTAINER(prop.frmPanelOffOpts), 
prop.hboxPanelOffOpts);
-       gtk_box_pack_start (GTK_BOX (prop.hboxPanelOffOpts), 
prop.radioPanelOffTL,
-                               FALSE, FALSE, 0);
-       gtk_box_pack_start (GTK_BOX (prop.hboxPanelOffOpts), 
prop.radioPanelOffTR,
-                               FALSE, FALSE, 0);
-       gtk_box_pack_start (GTK_BOX (prop.hboxPanelOffOpts), 
prop.radioPanelOffBL,
-                               FALSE, FALSE, 0);
-       gtk_box_pack_start (GTK_BOX (prop.hboxPanelOffOpts), 
prop.radioPanelOffBR,
-                               FALSE, FALSE, 0);
+       gtk_box_pack_start (GTK_BOX (prop.hboxPanelOffOpts), 
prop.lblPanelOffPlacement, FALSE, FALSE, 0);
+       gtk_box_pack_start (GTK_BOX (prop.hboxPanelOffOpts), prop.tblPanelOff, 
FALSE, FALSE, 0);
+       gtk_table_attach_defaults(GTK_TABLE(prop.tblPanelOff), 
prop.radioPanelOffTL, 0, 1, 0, 1);
+       gtk_table_attach_defaults(GTK_TABLE(prop.tblPanelOff), 
prop.radioPanelOffTR, 1, 2, 0, 1);
+       gtk_table_attach_defaults(GTK_TABLE(prop.tblPanelOff), 
prop.radioPanelOffBL, 0, 1, 1, 2);
+       gtk_table_attach_defaults(GTK_TABLE(prop.tblPanelOff), 
prop.radioPanelOffBR, 1, 2, 1, 2);
+       /*
+       gtk_box_pack_start (GTK_BOX (prop.hboxPanelOffOpts), 
prop.radioPanelOffTL, FALSE, FALSE, 0);
+       gtk_box_pack_start (GTK_BOX (prop.hboxPanelOffOpts), 
prop.radioPanelOffTR, FALSE, FALSE, 0);
+       gtk_box_pack_start (GTK_BOX (prop.hboxPanelOffOpts), 
prop.radioPanelOffBL, FALSE, FALSE, 0);
+       gtk_box_pack_start (GTK_BOX (prop.hboxPanelOffOpts), 
prop.radioPanelOffBR, FALSE, FALSE, 0);
+       */
+       switch(wmdock->anchorPos) {
+       case ANCHOR_TL:
+               
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(prop.radioPanelOffTL), TRUE);
+               break;
+       case ANCHOR_TR:
+               
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(prop.radioPanelOffTR), TRUE);
+               break;
+       case ANCHOR_BL:
+               
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(prop.radioPanelOffBL), TRUE);
+               break;
+       default:
+               
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(prop.radioPanelOffBR), TRUE);
+               break;
+       }
+
+       if ( ! IS_PANELOFF(wmdock) ) {
+               /* Disable advanced panel options is the panel used. */
+               gtk_widget_set_sensitive(GTK_WIDGET(prop.radioPanelOffBL), 
FALSE);
+               gtk_widget_set_sensitive(GTK_WIDGET(prop.radioPanelOffBR), 
FALSE);
+               gtk_widget_set_sensitive(GTK_WIDGET(prop.radioPanelOffTL), 
FALSE);
+               gtk_widget_set_sensitive(GTK_WIDGET(prop.radioPanelOffTR), 
FALSE);
+               gtk_widget_set_sensitive(GTK_WIDGET(prop.lblPanelOffPlacement), 
FALSE);
+       }
 
        /* Fill the dockapp chooser with entries. */
        wmdock_refresh_properties_dialog();
 
        /* Connect some signals to the dialog widgets */
-       g_signal_connect(G_OBJECT(prop.cbx), "changed",
-                       G_CALLBACK(wmdock_properties_changed), prop.txtCmd);
-       g_signal_connect(G_OBJECT(prop.txtCmd), "key-release-event",
-                       G_CALLBACK(wmdock_properties_savecmd), prop.cbx);
-       g_signal_connect(G_OBJECT(prop.btnMoveUp), "pressed",
-                       G_CALLBACK(wmdock_properties_moveup), prop.cbx);
-       g_signal_connect(G_OBJECT(prop.btnMoveDown), "pressed",
-                       G_CALLBACK(wmdock_properties_movedown), prop.cbx);
-       g_signal_connect(G_OBJECT(prop.chkDispTile), "toggled",
-                       G_CALLBACK(wmdock_properties_chkdisptile), NULL);
-       g_signal_connect(G_OBJECT(prop.chkPanelOff), "toggled",
-                       G_CALLBACK(wmdock_properties_chkpaneloff), NULL);
-       g_signal_connect(G_OBJECT(prop.chkPropButton), "toggled",
-                       G_CALLBACK(wmdock_properties_chkpropbtn), NULL);
-       g_signal_connect(G_OBJECT(prop.chkAddOnlyWM), "toggled",
-                       G_CALLBACK(wmdock_properties_chkaddonlywm), NULL);
+       g_signal_connect(G_OBJECT(prop.cbx), "changed", 
G_CALLBACK(wmdock_properties_changed), prop.txtCmd);
+       g_signal_connect(G_OBJECT(prop.txtCmd), "key-release-event", 
G_CALLBACK(wmdock_properties_savecmd), prop.cbx);
+       g_signal_connect(G_OBJECT(prop.btnMoveUp), "pressed", 
G_CALLBACK(wmdock_properties_moveup), prop.cbx);
+       g_signal_connect(G_OBJECT(prop.btnMoveDown), "pressed", 
G_CALLBACK(wmdock_properties_movedown), prop.cbx);
+       g_signal_connect(G_OBJECT(prop.chkDispTile), "toggled", 
G_CALLBACK(wmdock_properties_chkdisptile), NULL);
+       g_signal_connect(G_OBJECT(prop.chkPanelOff), "toggled", 
G_CALLBACK(wmdock_properties_chkpaneloff), NULL);
+       g_signal_connect(G_OBJECT(prop.chkPanelOffIgnoreOffset), "toggled", 
G_CALLBACK(wmdock_properties_chkpaneloffignoreoffset), NULL);
+       g_signal_connect(G_OBJECT(prop.chkPanelOffKeepAbove), "toggled", 
G_CALLBACK(wmdock_properties_chkpaneloffkeepabove), NULL);
+       g_signal_connect(G_OBJECT(prop.radioPanelOffTL), "toggled", 
G_CALLBACK(wmdock_properties_radiopaneloff), NULL);
+       g_signal_connect(G_OBJECT(prop.radioPanelOffTR), "toggled", 
G_CALLBACK(wmdock_properties_radiopaneloff), NULL);
+       g_signal_connect(G_OBJECT(prop.radioPanelOffBL), "toggled", 
G_CALLBACK(wmdock_properties_radiopaneloff), NULL);
+       g_signal_connect(G_OBJECT(prop.radioPanelOffBR), "toggled", 
G_CALLBACK(wmdock_properties_radiopaneloff), NULL);
+       g_signal_connect(G_OBJECT(prop.chkPropButton), "toggled", 
G_CALLBACK(wmdock_properties_chkpropbtn), NULL);
+       g_signal_connect(G_OBJECT(prop.chkAddOnlyWM), "toggled", 
G_CALLBACK(wmdock_properties_chkaddonlywm), NULL);
 
        g_timeout_add (500, wmdock_properties_refresh_dapp_icon, NULL);
 
diff --git a/panel-plugin/rcfile.c b/panel-plugin/rcfile.c
index 034908c..1bd4bd5 100644
--- a/panel-plugin/rcfile.c
+++ b/panel-plugin/rcfile.c
@@ -72,6 +72,8 @@ void wmdock_read_rc_file (XfcePanelPlugin *plugin)
        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, RCKEY_PANELOFF, TRUE);
+       wmdock->propPanelOffIgnoreOffset = xfce_rc_read_bool_entry (rc, 
RCKEY_PANELOFFIGNOREOFFSET, FALSE);
+       wmdock->propPanelOffKeepAbove    = xfce_rc_read_bool_entry (rc, 
RCKEY_PANELOFFKEEPABOVE, FALSE);
        glueList                   = IS_PANELOFF(wmdock) ? 
xfce_rc_read_list_entry(rc, RCKEY_GLUELIST, RC_LIST_DELIMITER) : NULL;
        wmdock->anchorPos          = xfce_rc_read_int_entry(rc, 
RCKEY_ANCHORPOS, -1);
        xfce_rc_close (rc);
@@ -124,12 +126,15 @@ void wmdock_read_rc_file (XfcePanelPlugin *plugin)
 
                if( IS_PANELOFF( wmdock ) && g_strv_length(rcCmds) == 
g_strv_length(glueList) ) {
                        for (i = 0; glueList[i]; i++) {
-                               if(!launched[i] || glueList[i][0] == '\0' || 
!(glueInfo = g_strsplit(glueList[i], RC_GLUE_DELIMITER, 0)))
+                               if(!launched[i])
                                        continue;
 
                                /* Cleanup the default anchors. */
                                memset(launched[i]->glue, '\0', 
sizeof(DockappNode *) * GLUE_MAX);
 
+                               if(glueList[i][0] == '\0' || !(glueInfo = 
g_strsplit(glueList[i], RC_GLUE_DELIMITER, 0)))
+                                       continue;
+
                                for (j = 0; glueInfo[j]; j++) {
                                        n = g_ascii_strtoll(glueInfo[j], 
&glueName, 10);
                                        if(n > G_MAXINT || n < 0 || n > 
g_strv_length(rcCmds)-1 || glueName == glueInfo[j] || glueName[0] != ':')
@@ -209,6 +214,8 @@ void wmdock_write_rc_file (XfcePanelPlugin *plugin)
                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_bool_entry (rc, RCKEY_PANELOFFIGNOREOFFSET, 
wmdock->propPanelOffIgnoreOffset);
+               xfce_rc_write_bool_entry (rc, RCKEY_PANELOFFKEEPABOVE, 
wmdock->propPanelOffKeepAbove);
                xfce_rc_write_entry(rc, RCKEY_DAFILTER, wmdock->filterList);
                xfce_rc_write_int_entry (rc, RCKEY_ANCHORPOS, 
wmdock->anchorPos);
        }
diff --git a/panel-plugin/rcfile.h b/panel-plugin/rcfile.h
index 8ad48c6..637b5b3 100644
--- a/panel-plugin/rcfile.h
+++ b/panel-plugin/rcfile.h
@@ -23,15 +23,17 @@
 #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"
+#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_PANELOFFIGNOREOFFSET (const gchar *) "paneloffignoreoffset"
+#define RCKEY_PANELOFFKEEPABOVE    (const gchar *) "paneloffkeepabove"
+#define RCKEY_DAFILTER             (const gchar *) "dafilter"
+#define RCKEY_ANCHORPOS            (const gchar *) "anchorpos"
+#define RCKEY_GLUELIST             (const gchar *) "glues"
 
 #define RC_LIST_DELIMITER   (const gchar *) ";"
 #define RC_GLUE_DELIMITER   (const gchar *) ","
diff --git a/panel-plugin/wmdock.c b/panel-plugin/wmdock.c
index 7ef194d..4b8bdc6 100644
--- a/panel-plugin/wmdock.c
+++ b/panel-plugin/wmdock.c
@@ -66,6 +66,9 @@ static void wmdock_orientation_changed (XfcePanelPlugin 
*plugin, GtkOrientation
        xfce_hvbox_set_orientation ((XfceHVBox *) wmdock->box, orientation);
        gtk_widget_show(GTK_WIDGET(wmdock->panelBox));
        gtk_widget_show(GTK_WIDGET(wmdock->box));
+
+       if( IS_PANELOFF(wmdock) )
+               wmdock_order_dockapps(wmdock_get_primary_anchor_dockapp());
 }
 
 
@@ -92,9 +95,10 @@ static gboolean wmdock_size_changed (XfcePanelPlugin 
*plugin, int size)
                gtk_widget_set_size_request (GTK_WIDGET (plugin), size, -1);
        }
 
-       if(wmdockIcon) {
+       if(wmdockIcon)
                wmdock_panel_draw_wmdock_icon(TRUE);
-       }
+       if( IS_PANELOFF(wmdock) )
+               wmdock_order_dockapps(wmdock_get_primary_anchor_dockapp());
 
        return TRUE;
 }
@@ -131,8 +135,10 @@ static WmdockPlugin *wmdock_plugin_new (XfcePanelPlugin* 
plugin)
        wmdock->propDispAddOnlyWM  = TRUE;
        /* TODO: Set panel off to FALSE. */
        wmdock->propPanelOff       = TRUE;
+       wmdock->propPanelOffIgnoreOffset = FALSE;
+       wmdock->propPanelOffKeepAbove    = FALSE;
        wmdock->filterList         = g_strdup(DOCKAPP_FILTER_PATTERN);
-       wmdock->anchorPos          = ANCHOR_BR;
+       wmdock->anchorPos          = get_default_anchor_postion();
 
        wmdock->eventBox = gtk_event_box_new ();
        gtk_widget_show(GTK_WIDGET(wmdock->eventBox));
diff --git a/panel-plugin/wmdock.h b/panel-plugin/wmdock.h
index 2a2f480..69d056e 100644
--- a/panel-plugin/wmdock.h
+++ b/panel-plugin/wmdock.h
@@ -49,6 +49,8 @@ typedef struct {
  gboolean            propDispPropButton;
  gboolean            propDispAddOnlyWM;
  gboolean            propPanelOff;
+ gboolean            propPanelOffIgnoreOffset;
+ gboolean            propPanelOffKeepAbove;
  AnchorPostion       anchorPos;
  gchar               *filterList;
 
_______________________________________________
Xfce4-commits mailing list
Xfce4-commits@xfce.org
https://mail.xfce.org/mailman/listinfo/xfce4-commits

Reply via email to