Updating branch refs/heads/master
         to d6edfaef1d343f3471cb09318fdfb07e07a3df7b (commit)
       from bed00b923287a5a7d0a3f3fa3eea56ce4c4d5369 (commit)

commit d6edfaef1d343f3471cb09318fdfb07e07a3df7b
Author: Andre Ellguth <an...@ellguth.com>
Date:   Thu Jul 25 18:45:27 2013 +0200

    Some Dockapp movement bug fixes.

 panel-plugin/dockapp.c |   39 +++++++++++++++++++++++----------------
 1 file changed, 23 insertions(+), 16 deletions(-)

diff --git a/panel-plugin/dockapp.c b/panel-plugin/dockapp.c
index 08b5ce1..c5c6671 100644
--- a/panel-plugin/dockapp.c
+++ b/panel-plugin/dockapp.c
@@ -66,6 +66,9 @@ static void wmdock_dockapp_child_pos(DockappNode *prevDapp, 
gint gluepos, gint *
        /* Setup the position of the first dockapp. */
        prevx = prevy = 0;
 
+       if(!prevDapp)
+               return;
+
        /* Get the position of the previous DockApp if is accessable. */
        gtk_window_get_position(
                        GTK_WINDOW (GTK_WIDGET (prevDapp->tile)), &prevx, 
&prevy);
@@ -160,22 +163,22 @@ static DockappNode 
*wmdock_get_snapable_dockapp(DockappNode *dapp, gint *gluepos
        case XFCE_SCREEN_POSITION_NW_H:
        case XFCE_SCREEN_POSITION_N:
        case XFCE_SCREEN_POSITION_NE_H:
-               possible^= prim == TRUE ? (GLUE_T | GLUE_R) : 0;
+               possible^= prim == TRUE ? (GLUE_T | GLUE_L | GLUE_R) : 0;
                break;
        case XFCE_SCREEN_POSITION_SW_H:
        case XFCE_SCREEN_POSITION_S:
        case XFCE_SCREEN_POSITION_SE_H:
-               possible^= prim == TRUE ? (GLUE_B | GLUE_R): 0;
+               possible^= prim == TRUE ? (GLUE_B | GLUE_L | GLUE_R): 0;
                break;
        case XFCE_SCREEN_POSITION_NW_V:
        case XFCE_SCREEN_POSITION_W:
        case XFCE_SCREEN_POSITION_SW_V:
-               possible^= prim == TRUE ? (GLUE_T | GLUE_L) : 0;
+               possible^= prim == TRUE ? (GLUE_B | GLUE_T | GLUE_L) : 0;
                break;
        case XFCE_SCREEN_POSITION_NE_V:
        case XFCE_SCREEN_POSITION_E:
        case XFCE_SCREEN_POSITION_SE_V:
-               possible^= prim == TRUE ? (GLUE_T | GLUE_R) : 0;
+               possible^= prim == TRUE ? (GLUE_B | GLUE_T | GLUE_R) : 0;
                break;
        }
 
@@ -306,7 +309,7 @@ void wmdock_dockapp_paneloff_handler(GtkWidget *tile, 
GdkEvent *ev, DockappNode
        switch(ev->type) {
        case GDK_CONFIGURE:
                gdk_window_get_pointer(tile->window, NULL, NULL, &gdkmodtype);
-               if(!dappOnMove && gdkmodtype & GDK_BUTTON1_MASK) {
+               if(!dappOnMove && (gdkmodtype & GDK_BUTTON1_MASK)) {
                        /* Movement. */
                        debug("dockapp.c: Start dockapp movement (dapp: `%s')", 
dapp->name);
                        dappOnMove = dapp;
@@ -333,7 +336,7 @@ void wmdock_dockapp_paneloff_handler(GtkWidget *tile, 
GdkEvent *ev, DockappNode
                }
 
                gdk_window_get_pointer(tile->window, NULL, NULL, &gdkmodtype);
-               if(!(dappOnMove && gdkmodtype && !(gdkmodtype & 
GDK_BUTTON1_MASK)))
+               if(!(dappOnMove && !(gdkmodtype & GDK_BUTTON1_MASK)))
                        break;
                /* No break if DockApp is moved and mouse btn released. */
        case GDK_BUTTON_RELEASE:
@@ -410,8 +413,10 @@ void wmdock_dockapp_tofront(DockappNode *dapp) {
        if(!dapp)
                return;
 
-       if ( IS_PANELOFF(wmdock) )
+       if ( IS_PANELOFF(wmdock) ) {
                gdk_window_raise(dapp->tile->window);
+               gtk_window_set_keep_above(GTK_WINDOW(dapp->tile), FALSE);
+       }
 }
 
 
@@ -776,7 +781,7 @@ GtkWidget *wmdock_create_tile_from_socket(DockappNode *dapp)
  */
 void wmdock_set_autoposition_dockapp(DockappNode *dapp, DockappNode *prevDapp)
 {
-       gint panelx, panely;
+       gint panelx, panely, plugx, plugy;
        gint x, y, i, gluepos = GLUE_MAX;
 
        if(!IS_PANELOFF(wmdock)) {
@@ -784,15 +789,17 @@ void wmdock_set_autoposition_dockapp(DockappNode *dapp, 
DockappNode *prevDapp)
        }
 
        /* Setup the position of the first dockapp. */
-       panelx = panely = x = y = 0;
+       panelx = panely = plugx = plugy = x = y = 0;
+
+       gtk_window_get_position(
+                       GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET 
(wmdock->plugin))),
+                       &panelx, &panely);
+       gdk_window_get_position (GDK_WINDOW (GTK_WIDGET 
(wmdock->plugin)->window), &plugx, &plugy);
 
        /* Initial define the position of the first anchor dockapp. */
        if(wmdock->anchorPos == -1)
                wmdock->anchorPos = 
xfce_panel_plugin_get_screen_position(wmdock->plugin);
 
-       gtk_window_get_position(
-                       GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET 
(wmdock->plugin))),
-                       &panelx, &panely);
        if(prevDapp) {
                for(i = 0; i < GLUE_MAX; i++) {
                        if(prevDapp->glue[i] == dapp) {
@@ -812,7 +819,7 @@ void wmdock_set_autoposition_dockapp(DockappNode *dapp, 
DockappNode *prevDapp)
                case XFCE_SCREEN_POSITION_NE_H:
                        if(!prevDapp) {
                                /* From the top to the bottom. */
-                               x = 
gdk_screen_get_width(get_current_gdkscreen()) - DEFAULT_DOCKAPP_WIDTH;
+                               x = wmdock->anchorPos == 
XFCE_SCREEN_POSITION_NW_H ? gdk_screen_get_width(get_current_gdkscreen()) - 
DEFAULT_DOCKAPP_WIDTH : 0;
                                y = panelx == 0 ? 
xfce_panel_plugin_get_size(wmdock->plugin) : 0;
                        } else {
                                wmdock_dockapp_child_pos(prevDapp, GLUE_B, &x, 
&y);
@@ -825,7 +832,7 @@ void wmdock_set_autoposition_dockapp(DockappNode *dapp, 
DockappNode *prevDapp)
                case XFCE_SCREEN_POSITION_SE_H:
                        if(!prevDapp) {
                                /* From the bottom to the top. */
-                               x = 
gdk_screen_get_width(get_current_gdkscreen()) - DEFAULT_DOCKAPP_WIDTH;
+                               x = wmdock->anchorPos == 
XFCE_SCREEN_POSITION_SW_H ? gdk_screen_get_width(get_current_gdkscreen()) - 
DEFAULT_DOCKAPP_WIDTH : 0;
                                y = panelx == 0 ? panely - 
DEFAULT_DOCKAPP_HEIGHT : gdk_screen_get_height(get_current_gdkscreen()) - 
DEFAULT_DOCKAPP_HEIGHT;
                        } else {
                                wmdock_dockapp_child_pos(prevDapp, GLUE_T, &x, 
&y);
@@ -864,8 +871,8 @@ void wmdock_set_autoposition_dockapp(DockappNode *dapp, 
DockappNode *prevDapp)
        }
        gtk_window_move(GTK_WINDOW(dapp->tile), x, y);
 
-       debug("dockapp.c: %d, Panel posx: %d, Panel posy: %d, prevDapp: %s, 
movex: %d, movey: %d",
-                       g_list_length(wmdock->dapps), panelx, panely, prevDapp 
? prevDapp->name : "NO", x, y);
+       debug("dockapp.c: %d, Panel posx: %d, Panel posy: %d, Plug posx: %d, 
Plug posy: %d, prevDapp: %s, movex: %d, movey: %d",
+                       g_list_length(wmdock->dapps), panelx, panely, plugx, 
plugy, prevDapp ? prevDapp->name : "NO", x, y);
 
 }
 
_______________________________________________
Xfce4-commits mailing list
Xfce4-commits@xfce.org
https://mail.xfce.org/mailman/listinfo/xfce4-commits

Reply via email to