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