[Xfce4-commits] r22939 - xfwm4/trunk/src

Olivier Fourdan olivier at xfce.org
Tue Aug 29 21:57:16 UTC 2006


Author: olivier
Date: 2006-08-29 21:57:14 +0000 (Tue, 29 Aug 2006)
New Revision: 22939

Modified:
   xfwm4/trunk/src/client.c
   xfwm4/trunk/src/workspaces.c
Log:
Do not show window size/position when not showing content as the server is grabbed and other apps cannot update their contents (bug #2239), switch workspace when reaching screen edges even when moving the window using keyboard shortcuts (bug #2234)

Modified: xfwm4/trunk/src/client.c
===================================================================
--- xfwm4/trunk/src/client.c	2006-08-29 19:49:14 UTC (rev 22938)
+++ xfwm4/trunk/src/client.c	2006-08-29 21:57:14 UTC (rev 22939)
@@ -3265,11 +3265,11 @@
 }
 
 static eventFilterStatus
-clientMoveResize_release_filter (XEvent * xevent, gpointer data)
+clientButtonReleaseFilter (XEvent * xevent, gpointer data)
 {
     MoveResizeData *passdata = (MoveResizeData *) data;
 
-    TRACE ("entering clientMoveResize_release_filter");
+    TRACE ("entering clientButtonReleaseFilter");
 
     if ((xevent->type == ButtonRelease) &&
         (xevent->xbutton.button == passdata->button))
@@ -3282,7 +3282,7 @@
 }
 
 static eventFilterStatus
-clientMove_event_filter (XEvent * xevent, gpointer data)
+clientMoveEventFilter (XEvent * xevent, gpointer data)
 {
     static int edge_scroll_x = 0;
     static int edge_scroll_y = 0;
@@ -3298,7 +3298,7 @@
     XWindowChanges wc;
     int prev_x, prev_y;
 
-    TRACE ("entering clientMove_event_filter");
+    TRACE ("entering clientMoveEventFilter");
 
     c = passdata->c;
     prev_x=c->x;
@@ -3318,9 +3318,10 @@
             myDisplayUpdateCurrentTime (display_info, xevent);
         }
 
-        if (passdata->use_keys)
+        if ((passdata->use_keys) && !FLAG_TEST_ALL(c->flags, CLIENT_FLAG_MAXIMIZED)) 
         {
             int key_move = 16;
+            unsigned int edge;
 
             if ((screen_info->params->snap_to_border) || (screen_info->params->snap_to_windows))
             {
@@ -3353,9 +3354,49 @@
             {
                 c->y = c->y + key_move;
             }
+
             clientSnapPosition (c, prev_x, prev_y);
-            clientConstrainPos (c, FALSE);
+            edge = clientConstrainPos (c, FALSE);
+            if ((edge) && (screen_info->params->wrap_windows))
+            {
+                int maxx, maxy, maxw, maxh;
 
+                maxx = 0;
+                maxy = 0;
+                maxw = screen_info->width;
+                maxh = screen_info->height;
+                clientMaxSpace (screen_info, &maxx, &maxy, &maxw, &maxh);
+
+                if (edge & CLIENT_CONSTRAINED_TOP)
+                {
+                    if (workspaceMove (screen_info, -1, 0, c))
+                    {
+                        c->y = maxh + frameTop (c) - key_move;
+                    }
+                }
+                else if (edge & CLIENT_CONSTRAINED_BOTTOM)
+                {
+                    if (workspaceMove (screen_info, 1, 0, c))
+                    {
+                        c->y = maxy + frameTop (c) + key_move;
+                    }
+                }
+
+                if (edge & CLIENT_CONSTRAINED_LEFT)
+                {
+                    if (workspaceMove (screen_info, 0, -1, c))
+                    {
+                        c->x = maxw - frameRight (c) - key_move;
+                    }
+                }
+                else if (edge & CLIENT_CONSTRAINED_RIGHT)
+                {
+                    if (workspaceMove (screen_info, 0, 1, c))
+                    {
+                        c->x = maxx - frameWidth (c) + frameLeft (c) + key_move;
+                    }
+                }
+            }
 #ifdef SHOW_POSITION
             if (passdata->poswin)
             {
@@ -3650,7 +3691,7 @@
         status = EVENT_FILTER_CONTINUE;
     }
 
-    TRACE ("leaving clientMove_event_filter");
+    TRACE ("leaving clientMoveEventFilter");
 
     if (!moving)
     {
@@ -3727,10 +3768,15 @@
         return;
     }
 
+    passdata.poswin = NULL;
 #ifdef SHOW_POSITION
-    passdata.poswin = poswinCreate(screen_info->gscr);
-    poswinSetPosition (passdata.poswin, c);
-    poswinShow (passdata.poswin);
+    if (!screen_info->params->box_move)
+    {
+        passdata.poswin = poswinCreate(screen_info->gscr);
+        poswinSetPosition (passdata.poswin, c);
+        poswinShow (passdata.poswin);
+    }
+    else
 #endif /* SHOW_POSITION */
 
     /* Set window translucent while moving, looks nice */
@@ -3747,7 +3793,7 @@
 
     FLAG_SET (c->xfwm_flags, XFWM_FLAG_MOVING_RESIZING);
     TRACE ("entering move loop");
-    eventFilterPush (display_info->xfilter, clientMove_event_filter, &passdata);
+    eventFilterPush (display_info->xfilter, clientMoveEventFilter, &passdata);
     if (passdata.use_keys)
     {
         XPutBackEvent (display_info->dpy, ev);
@@ -3789,7 +3835,7 @@
         /* If this is a drag-move, wait for the button to be released.
          * If we don't, we might get release events in the wrong place.
          */
-        eventFilterPush (display_info->xfilter, clientMoveResize_release_filter, &passdata);
+        eventFilterPush (display_info->xfilter, clientButtonReleaseFilter, &passdata);
         gtk_main ();
         eventFilterPop (display_info->xfilter);
     }
@@ -3801,7 +3847,7 @@
 }
 
 static eventFilterStatus
-clientResize_event_filter (XEvent * xevent, gpointer data)
+clientResizeEventFilter (XEvent * xevent, gpointer data)
 {
     ScreenInfo *screen_info;
     DisplayInfo *display_info;
@@ -3819,7 +3865,7 @@
     gint min_visible;
     gboolean resizing;
 
-    TRACE ("entering clientResize_event_filter");
+    TRACE ("entering clientResizeEventFilter");
 
     passdata = (MoveResizeData *) data;
     c = passdata->c;
@@ -4167,7 +4213,7 @@
         status = EVENT_FILTER_CONTINUE;
     }
 
-    TRACE ("leaving clientResize_event_filter");
+    TRACE ("leaving clientResizeEventFilter");
 
     if (!resizing)
     {
@@ -4243,20 +4289,15 @@
         return;
     }
 
+    passdata.poswin = NULL;
 #ifndef SHOW_POSITION
-    if ((c->size->width_inc > 1) || (c->size->height_inc > 1))
+    if (((c->size->width_inc > 1) || (c->size->height_inc > 1)) && (!screen_info->params->box_resize))
 #endif /* SHOW_POSITION */
     {
         passdata.poswin = poswinCreate(screen_info->gscr);
         poswinSetPosition (passdata.poswin, c);
         poswinShow (passdata.poswin);
     }
-#ifndef SHOW_POSITION
-    else
-    {
-        passdata.poswin = NULL;
-    }
-#endif /* SHOW_POSITION */
 
     /* Set window translucent while resizing, doesn't looks too nice  :( */
     if ((screen_info->params->resize_opacity < 100) && !(screen_info->params->box_resize) && !(c->opacity_locked))
@@ -4266,7 +4307,7 @@
     
     FLAG_SET (c->xfwm_flags, XFWM_FLAG_MOVING_RESIZING);
     TRACE ("entering resize loop");
-    eventFilterPush (display_info->xfilter, clientResize_event_filter, &passdata);
+    eventFilterPush (display_info->xfilter, clientResizeEventFilter, &passdata);
     if (passdata.use_keys)
     {
         XPutBackEvent (display_info->dpy, ev);
@@ -4305,7 +4346,7 @@
         /* If this is a drag-resize, wait for the button to be released.
          * If we don't, we might get release events in the wrong place.
          */
-        eventFilterPush (display_info->xfilter, clientMoveResize_release_filter, &passdata);
+        eventFilterPush (display_info->xfilter, clientButtonReleaseFilter, &passdata);
         gtk_main ();
         eventFilterPop (display_info->xfilter);
     }
@@ -4317,7 +4358,7 @@
 }
 
 static eventFilterStatus
-clientCycle_event_filter (XEvent * xevent, gpointer data)
+clientCycleEventFilter (XEvent * xevent, gpointer data)
 {
     ScreenInfo *screen_info;
     DisplayInfo *display_info;
@@ -4328,7 +4369,7 @@
     int modifier;
     gboolean key_pressed, cycling, gone;
 
-    TRACE ("entering clientCycle_event_filter");
+    TRACE ("entering clientCycleEventFilter");
 
     passdata = (ClientCycleData *) data;
     if (passdata->c == NULL)
@@ -4502,7 +4543,7 @@
         passdata.tabwin = tabwinCreate (passdata.c->screen_info->gscr, c,
                                         passdata.c, passdata.cycle_range,
                                         screen_info->params->cycle_workspaces);
-        eventFilterPush (display_info->xfilter, clientCycle_event_filter, &passdata);
+        eventFilterPush (display_info->xfilter, clientCycleEventFilter, &passdata);
         gtk_main ();
         eventFilterPop (display_info->xfilter);
         wireframeDelete (screen_info, passdata.wireframe);
@@ -4540,7 +4581,7 @@
 }
 
 static eventFilterStatus
-clientButtonPress_event_filter (XEvent * xevent, gpointer data)
+clientButtonPressEventFilter (XEvent * xevent, gpointer data)
 {
     ScreenInfo *screen_info;
     DisplayInfo *display_info;
@@ -4645,7 +4686,7 @@
     frameDraw (c, FALSE);
 
     TRACE ("entering button press loop");
-    eventFilterPush (display_info->xfilter, clientButtonPress_event_filter, &passdata);
+    eventFilterPush (display_info->xfilter, clientButtonPressEventFilter, &passdata);
     gtk_main ();
     eventFilterPop (display_info->xfilter);
     TRACE ("leaving button press loop");

Modified: xfwm4/trunk/src/workspaces.c
===================================================================
--- xfwm4/trunk/src/workspaces.c	2006-08-29 19:49:14 UTC (rev 22938)
+++ xfwm4/trunk/src/workspaces.c	2006-08-29 21:57:14 UTC (rev 22939)
@@ -174,7 +174,7 @@
 
 /* returns TRUE if the workspace was changed, FALSE otherwise */
 gboolean
-workspaceMove (ScreenInfo *screen_info, int rowmod, int colmod, Client * c2)
+workspaceMove (ScreenInfo *screen_info, int rowmod, int colmod, Client * c)
 {
     int row, col, newrow, newcol, previous_ws, n;
 
@@ -191,7 +191,7 @@
     previous_ws = screen_info->current_ws;
     if ((n >= 0) && (n < screen_info->workspace_count))
     {
-        workspaceSwitch(screen_info, n, c2, TRUE);
+        workspaceSwitch(screen_info, n, c, TRUE);
     }
     else if (screen_info->params->wrap_layout)
     {
@@ -220,7 +220,7 @@
 
             n = workspaceGetNumber(screen_info, newrow, newcol);
         }
-        workspaceSwitch(screen_info, n, c2, TRUE);
+        workspaceSwitch(screen_info, n, c, TRUE);
     }
 
     return (screen_info->current_ws != previous_ws);



More information about the Xfce4-commits mailing list