Author: olivier
Date: 2006-07-16 16:56:18 +0000 (Sun, 16 Jul 2006)
New Revision: 22464
Modified:
xfwm4/trunk/src/client.c
xfwm4/trunk/src/events.c
xfwm4/trunk/src/frame.c
xfwm4/trunk/src/settings.c
xfwm4/trunk/src/settings.h
Log:
Implement borderless full maximization (bug #1750)
Modified: xfwm4/trunk/src/client.c
===================================================================
--- xfwm4/trunk/src/client.c 2006-07-16 16:53:07 UTC (rev 22463)
+++ xfwm4/trunk/src/client.c 2006-07-16 16:56:18 UTC (rev 22464)
@@ -519,7 +519,8 @@
TRACE ("setting width %i for client \"%s\" (0x%lx)", w1, c->name,
c->window);
- if (FLAG_TEST (c->flags, CLIENT_FLAG_FULLSCREEN))
+ if (FLAG_TEST (c->flags, CLIENT_FLAG_FULLSCREEN) ||
+ FLAG_TEST_ALL (c->flags, CLIENT_FLAG_MAXIMIZED))
{
/* Bypass resize increment and max sizes for fullscreen */
c->width = w1;
@@ -562,7 +563,8 @@
TRACE ("setting height %i for client \"%s\" (0x%lx)", h1, c->name,
c->window);
- if (FLAG_TEST (c->flags, CLIENT_FLAG_FULLSCREEN))
+ if (FLAG_TEST (c->flags, CLIENT_FLAG_FULLSCREEN) ||
+ FLAG_TEST_ALL (c->flags, CLIENT_FLAG_MAXIMIZED))
{
/* Bypass resize increment and max sizes for fullscreen */
c->height = h1;
@@ -738,7 +740,7 @@
switch (wc->stack_mode)
{
/*
- * Limitation: we don't support neither sibling,
+ * Limitation: we don't support neither
* TopIf, BottomIf nor Opposite ...
*/
case Above:
@@ -1260,7 +1262,7 @@
TRACE ("entering clientApplyInitialState");
/* We check that afterwards to make sure all states are now known */
- if (FLAG_TEST (c->flags, CLIENT_FLAG_MAXIMIZED_HORIZ |
CLIENT_FLAG_MAXIMIZED_VERT))
+ if (FLAG_TEST (c->flags, CLIENT_FLAG_MAXIMIZED))
{
if (FLAG_TEST (c->xfwm_flags, XFWM_FLAG_HAS_MAXIMIZE))
{
@@ -2735,8 +2737,7 @@
g_return_if_fail (c != NULL);
TRACE ("entering clientToggleMaximized");
- TRACE ("maximzing/unmaximizing client \"%s\" (0x%lx)", c->name,
- c->window);
+ TRACE ("maximzing/unmaximizing client \"%s\" (0x%lx)", c->name, c->window);
screen_info = c->screen_info;
@@ -2757,33 +2758,43 @@
rect.x + rect.width) - full_x;
full_h = MIN (screen_info->height -
screen_info->params->xfwm_margins[BOTTOM],
rect.y + rect.height) - full_y;
+ /* Adjust size to the largest size available, not covering struts */
+ clientMaxSpace (screen_info, &full_x, &full_y, &full_w, &full_h);
- if (((mode & WIN_STATE_MAXIMIZED_HORIZ) && !FLAG_TEST (c->flags,
CLIENT_FLAG_MAXIMIZED_HORIZ)) &&
- ((mode & WIN_STATE_MAXIMIZED_VERT) && !FLAG_TEST (c->flags,
CLIENT_FLAG_MAXIMIZED_VERT)))
- {
- /* Adjust size to the largest size available, not covering struts */
- clientMaxSpace (screen_info, &full_x, &full_y, &full_w, &full_h);
- }
- else if ((mode & WIN_STATE_MAXIMIZED_HORIZ) && !FLAG_TEST (c->flags,
CLIENT_FLAG_MAXIMIZED_HORIZ))
- {
- int tmp_y, tmp_h;
+ wc.x = c->x;
+ wc.y = c->y;
+ wc.width = c->width;
+ wc.height = c->height;
- tmp_y = frameY (c);
- tmp_h = frameHeight (c);
- /* Adjust size to the widest size available, for the current vertical
position/height */
- clientMaxSpace (screen_info, &full_x, &tmp_y, &full_w, &tmp_h);
- }
- else if ((mode & WIN_STATE_MAXIMIZED_VERT) && !FLAG_TEST (c->flags,
CLIENT_FLAG_MAXIMIZED_VERT))
+ if ((mode & WIN_STATE_MAXIMIZED_HORIZ) && (mode &
WIN_STATE_MAXIMIZED_VERT))
{
- int tmp_x, tmp_w;
-
- tmp_x = frameX (c);
- tmp_w = frameWidth (c);
- /* Adjust size to the tallest size available, for the current
horizontal position/width */
- clientMaxSpace (screen_info, &tmp_x, &full_y, &tmp_w, &full_h);
+ if (!FLAG_TEST (c->flags, CLIENT_FLAG_MAXIMIZED))
+ {
+ if (restore_position)
+ {
+ c->old_x = c->x;
+ c->old_y = c->y;
+ c->old_width = c->width;
+ c->old_height = c->height;
+ }
+ c->win_state |= (WIN_STATE_MAXIMIZED_HORIZ |
WIN_STATE_MAXIMIZED_VERT);
+ FLAG_SET (c->flags, CLIENT_FLAG_MAXIMIZED);
+ wc.x = full_x + frameLeft (c);
+ wc.y = full_y + frameTop (c);
+ wc.width = full_w - frameLeft (c) - frameRight (c);
+ wc.height = full_h - frameTop (c) - frameBottom (c);
+ }
+ else
+ {
+ c->win_state &= ~(WIN_STATE_MAXIMIZED_HORIZ |
WIN_STATE_MAXIMIZED_VERT);
+ FLAG_UNSET (c->flags, CLIENT_FLAG_MAXIMIZED);
+ wc.x = c->old_x;
+ wc.y = c->old_y;
+ wc.width = c->old_width;
+ wc.height = c->old_height;
+ }
}
-
- if (mode & WIN_STATE_MAXIMIZED_HORIZ)
+ else if (mode & WIN_STATE_MAXIMIZED_HORIZ)
{
if (!FLAG_TEST (c->flags, CLIENT_FLAG_MAXIMIZED_HORIZ))
{
@@ -2792,27 +2803,21 @@
c->old_x = c->x;
c->old_width = c->width;
}
+ c->win_state |= WIN_STATE_MAXIMIZED_HORIZ;
+ FLAG_SET (c->flags, CLIENT_FLAG_MAXIMIZED_HORIZ);
wc.x = full_x + frameLeft (c);
wc.width = full_w - frameLeft (c) - frameRight (c);
- c->win_state |= WIN_STATE_MAXIMIZED_HORIZ;
- FLAG_SET (c->flags, CLIENT_FLAG_MAXIMIZED_HORIZ);
}
else
{
+ c->win_state &= ~WIN_STATE_MAXIMIZED_HORIZ;
+ FLAG_UNSET (c->flags, CLIENT_FLAG_MAXIMIZED_HORIZ);
wc.x = c->old_x;
wc.width = c->old_width;
- c->win_state &= ~WIN_STATE_MAXIMIZED_HORIZ;
- FLAG_UNSET (c->flags, CLIENT_FLAG_MAXIMIZED_HORIZ);
}
}
- else
+ else if (mode & WIN_STATE_MAXIMIZED_VERT)
{
- wc.x = c->x;
- wc.width = c->width;
- }
-
- if (mode & WIN_STATE_MAXIMIZED_VERT)
- {
if (!FLAG_TEST (c->flags, CLIENT_FLAG_MAXIMIZED_VERT))
{
if (restore_position)
@@ -2820,24 +2825,19 @@
c->old_y = c->y;
c->old_height = c->height;
}
+ c->win_state |= WIN_STATE_MAXIMIZED_VERT;
+ FLAG_SET (c->flags, CLIENT_FLAG_MAXIMIZED_VERT);
wc.y = full_y + frameTop (c);
wc.height = full_h - frameTop (c) - frameBottom (c);
- c->win_state |= WIN_STATE_MAXIMIZED_VERT;
- FLAG_SET (c->flags, CLIENT_FLAG_MAXIMIZED_VERT);
}
else
{
+ c->win_state &= ~WIN_STATE_MAXIMIZED_VERT;
+ FLAG_UNSET (c->flags, CLIENT_FLAG_MAXIMIZED_VERT);
wc.y = c->old_y;
wc.height = c->old_height;
- c->win_state &= ~WIN_STATE_MAXIMIZED_VERT;
- FLAG_UNSET (c->flags, CLIENT_FLAG_MAXIMIZED_VERT);
}
}
- else
- {
- wc.y = c->y;
- wc.height = c->height;
- }
c->x = wc.x;
c->y = wc.y;
@@ -3665,6 +3665,7 @@
g1 = myScreenGrabKeyboard (screen_info, myDisplayGetCurrentTime
(display_info));
g2 = myScreenGrabPointer (screen_info, ButtonMotionMask |
ButtonReleaseMask,
cursor, myDisplayGetCurrentTime (display_info));
+ XFlush (myScreenGetXDisplay (screen_info));
if (!g1 || !g2)
{
TRACE ("grab failed in clientMove");
@@ -4141,6 +4142,11 @@
TRACE ("entering clientResize");
TRACE ("resizing client \"%s\" (0x%lx)", c->name, c->window);
+ if (FLAG_TEST_ALL (c->flags, CLIENT_FLAG_MAXIMIZED))
+ {
+ return;
+ }
+
screen_info = c->screen_info;
display_info = screen_info->display_info;
@@ -4175,6 +4181,7 @@
g2 = myScreenGrabPointer (screen_info, ButtonMotionMask |
ButtonReleaseMask,
myDisplayGetCursorResize(display_info,
passdata.corner),
myDisplayGetCurrentTime (display_info));
+ XFlush (myScreenGetXDisplay (screen_info));
if (!g1 || !g2)
{
@@ -4398,6 +4405,7 @@
g1 = myScreenGrabKeyboard (screen_info, myDisplayGetCurrentTime
(display_info));
g2 = myScreenGrabPointer (screen_info, NoEventMask, None,
myDisplayGetCurrentTime (display_info));
+ XFlush (myScreenGetXDisplay (screen_info));
if (!g1 || !g2)
{
Modified: xfwm4/trunk/src/events.c
===================================================================
--- xfwm4/trunk/src/events.c 2006-07-16 16:53:07 UTC (rev 22463)
+++ xfwm4/trunk/src/events.c 2006-07-16 16:56:18 UTC (rev 22464)
@@ -1351,6 +1351,13 @@
ev->value_mask |= (CWX | CWY | CWWidth | CWHeight);
}
+ else if (FLAG_TEST_ALL (c->flags, CLIENT_FLAG_MAXIMIZED))
+ {
+ wc.x = c->x;
+ wc.y = c->y;
+ wc.width = c->width;
+ wc.height = c->height;
+ }
/* Clean up buggy requests that set all flags */
if ((ev->value_mask & CWX) && (wc.x == c->x))
{
Modified: xfwm4/trunk/src/frame.c
===================================================================
--- xfwm4/trunk/src/frame.c 2006-07-16 16:53:07 UTC (rev 22463)
+++ xfwm4/trunk/src/frame.c 2006-07-16 16:56:18 UTC (rev 22464)
@@ -40,7 +40,7 @@
int
frameDecorationLeft (ScreenInfo *screen_info)
{
- TRACE ("entering frameLeft");
+ TRACE ("entering frameDecorationLeft");
g_return_val_if_fail (screen_info != NULL, 0);
return screen_info->sides[SIDE_LEFT][ACTIVE].width;
@@ -49,7 +49,7 @@
int
frameDecorationRight (ScreenInfo *screen_info)
{
- TRACE ("entering frameLeft");
+ TRACE ("entering frameDecorationRight");
g_return_val_if_fail (screen_info != NULL, 0);
return screen_info->sides[SIDE_RIGHT][ACTIVE].width;
@@ -58,7 +58,7 @@
int
frameDecorationTop (ScreenInfo *screen_info)
{
- TRACE ("entering frameLeft");
+ TRACE ("entering frameDecorationTop");
g_return_val_if_fail (screen_info != NULL, 0);
return screen_info->title[TITLE_3][ACTIVE].height;
@@ -67,7 +67,7 @@
int
frameDecorationBottom (ScreenInfo *screen_info)
{
- TRACE ("entering frameLeft");
+ TRACE ("entering frameDecorationBottom");
g_return_val_if_fail (screen_info != NULL, 0);
return screen_info->sides[SIDE_BOTTOM][ACTIVE].height;
@@ -80,7 +80,8 @@
g_return_val_if_fail (c != NULL, 0);
if (FLAG_TEST (c->xfwm_flags, XFWM_FLAG_HAS_BORDER)
- && !FLAG_TEST (c->flags, CLIENT_FLAG_FULLSCREEN))
+ && !FLAG_TEST (c->flags, CLIENT_FLAG_FULLSCREEN)
+ && !FLAG_TEST_ALL (c->flags, CLIENT_FLAG_MAXIMIZED))
{
return c->screen_info->sides[SIDE_LEFT][ACTIVE].width;
}
@@ -94,7 +95,8 @@
g_return_val_if_fail (c != NULL, 0);
if (FLAG_TEST (c->xfwm_flags, XFWM_FLAG_HAS_BORDER)
- && !FLAG_TEST (c->flags, CLIENT_FLAG_FULLSCREEN))
+ && !FLAG_TEST (c->flags, CLIENT_FLAG_FULLSCREEN)
+ && !FLAG_TEST_ALL (c->flags, CLIENT_FLAG_MAXIMIZED))
{
return c->screen_info->sides[SIDE_RIGHT][ACTIVE].width;
}
@@ -122,7 +124,8 @@
g_return_val_if_fail (c != NULL, 0);
if (FLAG_TEST (c->xfwm_flags, XFWM_FLAG_HAS_BORDER)
- && !FLAG_TEST (c->flags, CLIENT_FLAG_FULLSCREEN))
+ && !FLAG_TEST (c->flags, CLIENT_FLAG_FULLSCREEN)
+ && !FLAG_TEST_ALL (c->flags, CLIENT_FLAG_MAXIMIZED))
{
return c->screen_info->sides[SIDE_BOTTOM][ACTIVE].height;
}
@@ -136,7 +139,8 @@
g_return_val_if_fail (c != NULL, 0);
if (FLAG_TEST (c->xfwm_flags, XFWM_FLAG_HAS_BORDER)
- && !FLAG_TEST (c->flags, CLIENT_FLAG_FULLSCREEN))
+ && !FLAG_TEST (c->flags, CLIENT_FLAG_FULLSCREEN)
+ && !FLAG_TEST_ALL (c->flags, CLIENT_FLAG_MAXIMIZED))
{
return c->x - frameLeft (c);
}
@@ -164,7 +168,8 @@
g_return_val_if_fail (c != NULL, 0);
if (FLAG_TEST (c->xfwm_flags, XFWM_FLAG_HAS_BORDER)
- && !FLAG_TEST (c->flags, CLIENT_FLAG_FULLSCREEN))
+ && !FLAG_TEST (c->flags, CLIENT_FLAG_FULLSCREEN)
+ && !FLAG_TEST_ALL (c->flags, CLIENT_FLAG_MAXIMIZED))
{
return c->width + frameLeft (c) + frameRight (c);
}
@@ -191,6 +196,37 @@
return c->height;
}
+static int
+frameTopLeftWidth (Client * c, int state)
+{
+ if (FLAG_TEST_ALL (c->flags, CLIENT_FLAG_MAXIMIZED))
+ {
+ return 0;
+ }
+ return c->screen_info->corners[CORNER_TOP_LEFT][state].width;
+
+}
+
+static int
+frameTopRightWidth (Client * c, int state)
+{
+ if (FLAG_TEST_ALL (c->flags, CLIENT_FLAG_MAXIMIZED))
+ {
+ return 0;
+ }
+ return c->screen_info->corners[CORNER_TOP_RIGHT][state].width;
+}
+
+static int
+frameButtonOffset (Client *c)
+{
+ if (FLAG_TEST_ALL (c->flags, CLIENT_FLAG_MAXIMIZED))
+ {
+ return MAX (0, c->screen_info->params->maximized_offset);
+ }
+ return c->screen_info->params->button_offset;
+}
+
static void
frameCreateTitlePixmap (Client * c, int state, int left, int right, xfwmPixmap
* pm)
{
@@ -219,8 +255,7 @@
right = temp;
}
- width = frameWidth (c) -
screen_info->corners[CORNER_TOP_LEFT][state].width -
- screen_info->corners[CORNER_TOP_RIGHT][state].width;
+ width = frameWidth (c) - frameTopLeftWidth (c, state) - frameTopRightWidth
(c, state);
if (width < 1)
{
pm->pixmap = None;
@@ -230,21 +265,21 @@
return;
}
- if (left < screen_info->corners[CORNER_TOP_LEFT][state].width)
+ if (left < frameTopLeftWidth (c, state))
{
- left = screen_info->corners[CORNER_TOP_LEFT][state].width;
+ left = frameTopLeftWidth (c, state);
}
- if (right > frameWidth (c) -
screen_info->corners[CORNER_TOP_RIGHT][state].width)
+ if (right > frameWidth (c) - frameTopRightWidth (c, state))
{
- right = frameWidth (c) -
screen_info->corners[CORNER_TOP_RIGHT][state].width;
+ right = frameWidth (c) - frameTopRightWidth (c, state);
}
- if (right < screen_info->corners[CORNER_TOP_LEFT][state].width)
+ if (right < frameTopLeftWidth (c, state))
{
- right = screen_info->corners[CORNER_TOP_LEFT][state].width;
+ right = frameTopLeftWidth (c, state);
}
- left = left - screen_info->corners[CORNER_TOP_LEFT][state].width;
- right = right - screen_info->corners[CORNER_TOP_LEFT][state].width;
+ left = left - frameTopLeftWidth (c, state);
+ right = right - frameTopLeftWidth (c, state);
x = 0;
hoffset = 0;
@@ -275,7 +310,7 @@
hoffset = w3 - logical_rect.width -
screen_info->params->title_horizontal_offset;
break;
case ALIGN_CENTER:
- hoffset = (w3 >> 1) - (logical_rect.width >> 1);
+ hoffset = (w3 / 2) - (logical_rect.width / 2);
break;
}
if (hoffset < screen_info->params->title_horizontal_offset)
@@ -304,7 +339,7 @@
w1 = right - w2 - w3 - w4 -
screen_info->params->title_horizontal_offset;
break;
case ALIGN_CENTER:
- w1 = left + ((right - left) / 2) - (w3 >> 1) - w2;
+ w1 = left + ((right - left) / 2) - (w3 / 2) - w2;
break;
}
if (w1 < left)
@@ -537,7 +572,7 @@
XRectangle rect;
xfwmPixmap *my_pixmap;
int i;
-
+
TRACE ("entering frameSetShape");
TRACE ("setting shape for client (0x%lx)", c->window);
@@ -624,29 +659,32 @@
}
}
- if (screen_info->corners[CORNER_TOP_LEFT][state].height > frameHeight
(c) - frameBottom (c) + 1)
+ if (xfwmWindowVisible (&c->corners[CORNER_TOP_LEFT]) &&
+ (screen_info->corners[CORNER_TOP_LEFT][state].height > frameHeight
(c) - frameBottom (c) + 1))
{
rect.x = 0;
rect.y = frameHeight (c) - frameBottom (c) + 1;
- rect.width = screen_info->corners[CORNER_TOP_LEFT][state].width;
+ rect.width = frameTopLeftWidth (c, state);
rect.height = screen_info->corners[CORNER_TOP_LEFT][state].height
- (frameHeight (c) - frameBottom (c) + 1);
XShapeCombineRectangles (display_info->dpy, MYWINDOW_XWINDOW
(c->corners[CORNER_TOP_LEFT]),
ShapeBounding, 0, 0, &rect, 1,
ShapeSubtract, 0);
}
- if (screen_info->corners[CORNER_TOP_RIGHT][state].height > frameHeight
(c) - frameBottom (c) + 1)
+ if (xfwmWindowVisible (&c->corners[CORNER_TOP_RIGHT]) &&
+ (screen_info->corners[CORNER_TOP_RIGHT][state].height >
frameHeight (c) - frameBottom (c) + 1))
{
rect.x = 0;
rect.y = frameHeight (c) - frameBottom (c) + 1;
- rect.width = screen_info->corners[CORNER_TOP_RIGHT][state].width;
+ rect.width = frameTopRightWidth (c, state);
rect.height = screen_info->corners[CORNER_TOP_RIGHT][state].height
- (frameHeight (c) - frameBottom (c) + 1);
XShapeCombineRectangles (display_info->dpy, MYWINDOW_XWINDOW
(c->corners[CORNER_TOP_RIGHT]),
ShapeBounding, 0, 0, &rect, 1,
ShapeSubtract, 0);
}
- if (screen_info->corners[CORNER_BOTTOM_LEFT][state].height >
frameHeight (c) - frameTop (c) + 1)
+ if (xfwmWindowVisible (&c->corners[CORNER_BOTTOM_LEFT]) &&
+ (screen_info->corners[CORNER_BOTTOM_LEFT][state].height >
frameHeight (c) - frameTop (c) + 1))
{
rect.x = 0;
rect.y = 0;
@@ -657,7 +695,8 @@
ShapeBounding, 0, 0, &rect, 1,
ShapeSubtract, 0);
}
- if (screen_info->corners[CORNER_BOTTOM_RIGHT][state].height >
frameHeight (c) - frameTop (c) + 1)
+ if (xfwmWindowVisible (&c->corners[CORNER_BOTTOM_RIGHT]) &&
+ (screen_info->corners[CORNER_BOTTOM_RIGHT][state].height >
frameHeight (c) - frameTop (c) + 1))
{
rect.x = 0;
rect.y = 0;
@@ -686,7 +725,7 @@
if (xfwmWindowVisible (&c->title))
{
XShapeCombineShape (display_info->dpy, temp, ShapeBounding,
-
screen_info->corners[CORNER_TOP_LEFT][state].width, 0,
+ frameTopLeftWidth (c, state), 0,
MYWINDOW_XWINDOW (c->title), ShapeBounding,
ShapeUnion);
}
@@ -723,7 +762,7 @@
if (xfwmWindowVisible (&c->corners[CORNER_TOP_RIGHT]))
{
XShapeCombineShape (display_info->dpy, temp, ShapeBounding,
- frameWidth (c) -
screen_info->corners[CORNER_TOP_RIGHT][state].width,
+ frameWidth (c) - frameTopRightWidth (c, state),
0, MYWINDOW_XWINDOW
(c->corners[CORNER_TOP_RIGHT]), ShapeBounding, ShapeUnion);
}
@@ -862,8 +901,12 @@
}
/* Then, show the ones that we do have on left... */
- x = frameLeft (c) + screen_info->params->button_offset;
- right = frameWidth (c) - frameRight (c) -
screen_info->params->button_offset;
+ x = frameLeft (c) + frameButtonOffset (c);
+ if (x < 0)
+ {
+ x = 0;
+ }
+ right = frameWidth (c) - frameRight (c) - frameButtonOffset (c);
for (i = 0; i < strlen (screen_info->params->button_layout); i++)
{
button = getButtonFromLetter
(screen_info->params->button_layout[i], c);
@@ -898,7 +941,7 @@
/* and those that we do have on right... */
x = frameWidth (c) - frameRight (c) +
screen_info->params->button_spacing -
- screen_info->params->button_offset;
+ frameButtonOffset (c);
for (j = strlen (screen_info->params->button_layout) - 1; j >= i; j--)
{
button = getButtonFromLetter
(screen_info->params->button_layout[j], c);
@@ -932,18 +975,13 @@
left = left - 2 * screen_info->params->button_spacing;
right = x;
- top_width =
- frameWidth (c) -
screen_info->corners[CORNER_TOP_LEFT][state].width -
- screen_info->corners[CORNER_TOP_RIGHT][state].width;
- bottom_width =
- frameWidth (c) -
+ top_width = frameWidth (c) - frameTopLeftWidth (c, state) -
frameTopRightWidth (c, state);
+ bottom_width = frameWidth (c) -
screen_info->corners[CORNER_BOTTOM_LEFT][state].width -
screen_info->corners[CORNER_BOTTOM_RIGHT][state].width;
- left_height =
- frameHeight (c) - frameTop (c) -
+ left_height = frameHeight (c) - frameTop (c) -
screen_info->corners[CORNER_BOTTOM_LEFT][state].height;
- right_height =
- frameHeight (c) - frameTop (c) -
+ right_height = frameHeight (c) - frameTop (c) -
screen_info->corners[CORNER_BOTTOM_RIGHT][state].height;
if (c->pm_cache.pm_title[state].pixmap == None)
@@ -1015,37 +1053,51 @@
right_height, (requires_clearing | height_changed));
}
- xfwmWindowShow (&c->title,
- screen_info->corners[CORNER_TOP_LEFT][state].width, 0, top_width,
- frameTop (c), (requires_clearing | title_changed));
- xfwmWindowShow (&c->sides[SIDE_BOTTOM],
- screen_info->corners[CORNER_BOTTOM_LEFT][state].width,
- frameHeight (c) - frameBottom (c), bottom_width, frameBottom (c),
- (requires_clearing | width_changed));
- xfwmWindowShow (&c->corners[CORNER_TOP_LEFT], 0, 0,
- screen_info->corners[CORNER_TOP_LEFT][state].width,
- screen_info->corners[CORNER_TOP_LEFT][state].height,
- requires_clearing);
- xfwmWindowShow (&c->corners[CORNER_TOP_RIGHT],
- frameWidth (c) -
screen_info->corners[CORNER_TOP_RIGHT][state].width,
- 0, screen_info->corners[CORNER_TOP_RIGHT][state].width,
- screen_info->corners[CORNER_TOP_RIGHT][state].height,
- requires_clearing);
- xfwmWindowShow (&c->corners[CORNER_BOTTOM_LEFT], 0,
- frameHeight (c) -
- screen_info->corners[CORNER_BOTTOM_LEFT][state].height,
- screen_info->corners[CORNER_BOTTOM_LEFT][state].width,
- screen_info->corners[CORNER_BOTTOM_LEFT][state].height,
- requires_clearing);
- xfwmWindowShow (&c->corners[CORNER_BOTTOM_RIGHT],
- frameWidth (c) -
- screen_info->corners[CORNER_BOTTOM_RIGHT][state].width,
- frameHeight (c) -
- screen_info->corners[CORNER_BOTTOM_RIGHT][state].height,
- screen_info->corners[CORNER_BOTTOM_RIGHT][state].width,
- screen_info->corners[CORNER_BOTTOM_RIGHT][state].height,
- requires_clearing);
-
+ if (FLAG_TEST_ALL (c->flags, CLIENT_FLAG_MAXIMIZED))
+ {
+ xfwmWindowShow (&c->title, 0, 0, top_width, frameTop (c),
+ (requires_clearing | title_changed));
+ xfwmWindowHide (&c->sides[SIDE_LEFT]);
+ xfwmWindowHide (&c->sides[SIDE_RIGHT]);
+ xfwmWindowHide (&c->sides[SIDE_BOTTOM]);
+ xfwmWindowHide (&c->corners[CORNER_TOP_LEFT]);
+ xfwmWindowHide (&c->corners[CORNER_TOP_RIGHT]);
+ xfwmWindowHide (&c->corners[CORNER_BOTTOM_LEFT]);
+ xfwmWindowHide (&c->corners[CORNER_BOTTOM_RIGHT]);
+ }
+ else
+ {
+ xfwmWindowShow (&c->title,
+ frameTopLeftWidth (c, state), 0, top_width,
+ frameTop (c), (requires_clearing | title_changed));
+ xfwmWindowShow (&c->sides[SIDE_BOTTOM],
+ screen_info->corners[CORNER_BOTTOM_LEFT][state].width,
+ frameHeight (c) - frameBottom (c), bottom_width, frameBottom
(c),
+ (requires_clearing | width_changed));
+ xfwmWindowShow (&c->corners[CORNER_TOP_LEFT], 0, 0,
+ frameTopLeftWidth (c, state),
+ screen_info->corners[CORNER_TOP_LEFT][state].height,
+ requires_clearing);
+ xfwmWindowShow (&c->corners[CORNER_TOP_RIGHT],
+ frameWidth (c) - frameTopRightWidth (c, state),
+ 0, frameTopRightWidth (c, state),
+ screen_info->corners[CORNER_TOP_RIGHT][state].height,
+ requires_clearing);
+ xfwmWindowShow (&c->corners[CORNER_BOTTOM_LEFT], 0,
+ frameHeight (c) -
+ screen_info->corners[CORNER_BOTTOM_LEFT][state].height,
+ screen_info->corners[CORNER_BOTTOM_LEFT][state].width,
+ screen_info->corners[CORNER_BOTTOM_LEFT][state].height,
+ requires_clearing);
+ xfwmWindowShow (&c->corners[CORNER_BOTTOM_RIGHT],
+ frameWidth (c) -
+ screen_info->corners[CORNER_BOTTOM_RIGHT][state].width,
+ frameHeight (c) -
+ screen_info->corners[CORNER_BOTTOM_RIGHT][state].height,
+ screen_info->corners[CORNER_BOTTOM_RIGHT][state].width,
+ screen_info->corners[CORNER_BOTTOM_RIGHT][state].height,
+ requires_clearing);
+ }
if (requires_clearing | force_shape_update)
{
frameSetShape (c, state, &c->pm_cache, button_x);
Modified: xfwm4/trunk/src/settings.c
===================================================================
--- xfwm4/trunk/src/settings.c 2006-07-16 16:53:07 UTC (rev 22463)
+++ xfwm4/trunk/src/settings.c 2006-07-16 16:56:18 UTC (rev 22464)
@@ -1129,6 +1129,7 @@
strncpy (screen_info->params->button_layout, getValue ("button_layout",
rc), 7);
screen_info->params->button_spacing = TOINT (getValue ("button_spacing",
rc));
screen_info->params->button_offset = TOINT (getValue ("button_offset",
rc));
+ screen_info->params->maximized_offset = TOINT (getValue
("maximized_offset", rc));
screen_info->params->title_vertical_offset_active =
TOINT (getValue ("title_vertical_offset_active", rc));
screen_info->params->title_vertical_offset_inactive =
@@ -1288,6 +1289,7 @@
{"margin_left", NULL, FALSE},
{"margin_right", NULL, FALSE},
{"margin_top", NULL, FALSE},
+ {"maximized_offset", NULL, TRUE},
{"move_opacity", NULL, TRUE},
{"placement_ratio", NULL, TRUE},
{"popup_opacity", NULL, TRUE},
Modified: xfwm4/trunk/src/settings.h
===================================================================
--- xfwm4/trunk/src/settings.h 2006-07-16 16:53:07 UTC (rev 22463)
+++ xfwm4/trunk/src/settings.h 2006-07-16 16:56:18 UTC (rev 22464)
@@ -154,6 +154,7 @@
int easy_click;
int frame_opacity;
int inactive_opacity;
+ int maximized_offset;
int move_opacity;
int placement_ratio;
int popup_opacity;
_______________________________________________
Xfce4-commits mailing list
[email protected]
http://foo-projects.org/mailman/listinfo/xfce4-commits