[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