diff --git a/defaults/defaults b/defaults/defaults
index 6db210a..1582fc1 100644
--- a/defaults/defaults
+++ b/defaults/defaults
@@ -1,5 +1,6 @@
activate_action=bring
borderless_maximize=true
+titleless_maximize=false
box_move=false
box_resize=false
button_layout=O|SHMC
diff --git a/settings-dialogs/tweaks-settings.c b/settings-dialogs/tweaks-settings.c
index f60b606..2532733 100644
--- a/settings-dialogs/tweaks-settings.c
+++ b/settings-dialogs/tweaks-settings.c
@@ -180,6 +180,7 @@ wm_tweaks_dialog_configure_widgets (GtkBuilder *builder)
GtkWidget *easy_click_combo_box = GTK_WIDGET (gtk_builder_get_object (builder, "easy_click_combo_box"));
GtkWidget *raise_with_any_button_check = GTK_WIDGET (gtk_builder_get_object (builder, "raise_with_any_button_check"));
GtkWidget *borderless_maximize_check = GTK_WIDGET (gtk_builder_get_object (builder, "borderless_maximize_check"));
+ GtkWidget *titleless_maximize_check = GTK_WIDGET (gtk_builder_get_object (builder, "titleless_maximize_check"));
GtkWidget *restore_on_move_check = GTK_WIDGET (gtk_builder_get_object (builder, "restore_on_move_check"));
GtkWidget *tile_on_move_check = GTK_WIDGET (gtk_builder_get_object (builder, "tile_on_move_check"));
GtkWidget *snap_resist_check = GTK_WIDGET (gtk_builder_get_object (builder, "snap_resist_check"));
@@ -336,6 +337,10 @@ wm_tweaks_dialog_configure_widgets (GtkBuilder *builder)
G_TYPE_BOOLEAN,
(GObject *)borderless_maximize_check, "active");
xfconf_g_property_bind (xfwm4_channel,
+ "/general/titleless_maximize",
+ G_TYPE_BOOLEAN,
+ (GObject *)titleless_maximize_check, "active");
+ xfconf_g_property_bind (xfwm4_channel,
"/general/restore_on_move",
G_TYPE_BOOLEAN,
(GObject *)restore_on_move_check, "active");
diff --git a/settings-dialogs/xfwm4-settings.c b/settings-dialogs/xfwm4-settings.c
index 4f284d3..bb86e04 100644
--- a/settings-dialogs/xfwm4-settings.c
+++ b/settings-dialogs/xfwm4-settings.c
@@ -1635,7 +1635,7 @@ xfwm_settings_initialize_shortcuts (XfwmSettings *settings)
gtk_list_store_clear (GTK_LIST_STORE (model));
- if (feature_list = xfce_shortcuts_xfwm4_get_feature_list ())
+ if ((feature_list = xfce_shortcuts_xfwm4_get_feature_list ()))
{
GList *l;
diff --git a/settings-dialogs/xfwm4-tweaks-dialog.glade b/settings-dialogs/xfwm4-tweaks-dialog.glade
index e9996af..7b509ef 100644
--- a/settings-dialogs/xfwm4-tweaks-dialog.glade
+++ b/settings-dialogs/xfwm4-tweaks-dialog.glade
@@ -415,8 +415,8 @@ or "skip taskbar" properties set
-
-
- Automatically _tile windows when moving toward the screen edge
+
+ Restore original size of maximi_zed windows when moving
False
True
True
@@ -447,8 +447,8 @@ or "skip taskbar" properties set
-
- Notify of _urgency by making window's decoration blink
+
+ Automatically _tile windows when moving toward the screen edge
False
True
True
@@ -475,7 +475,23 @@ or "skip taskbar" properties set
False
False
- 5
+ 6
+
+
+
+
+ Notify of _urgency by making window's decoration blink
+ False
+ True
+ True
+ False
+ True
+ True
+
+
+ False
+ False
+ 6
@@ -491,7 +507,7 @@ or "skip taskbar" properties set
False
False
- 6
+ 7
diff --git a/src/client.c b/src/client.c
index 4e86808..a0a836e 100644
--- a/src/client.c
+++ b/src/client.c
@@ -64,6 +64,8 @@
#include "xsync.h"
#include "event_filter.h"
+//#define TRACE(fmt, ...) printf(fmt"\n", ##__VA_ARGS__); fflush(stdout);
+
/* Event mask definition */
#define POINTER_EVENT_MASK \
@@ -173,6 +175,7 @@ clientCreateTitleName (Client *c, gchar *name, gchar *hostname)
gchar *title;
g_return_val_if_fail (c != NULL, NULL);
+
TRACE ("entering clientCreateTitleName");
screen_info = c->screen_info;
@@ -3137,6 +3140,8 @@ clientNewMaxSize (Client *c, XWindowChanges *wc, GdkRectangle *rect, tilePositio
wc->width = full_w - frameLeft (c) - frameRight (c);
wc->height = full_h - frameTop (c) - frameBottom (c);
+ TRACE ("clientNewMaxSize %d %d %d %d", wc->x, wc->y, wc->width, wc->height);
+
return ((wc->width <= c->size->max_width) && (wc->height <= c->size->max_height));
}
diff --git a/src/frame.c b/src/frame.c
index 7f4cbd3..515d331 100644
--- a/src/frame.c
+++ b/src/frame.c
@@ -39,6 +39,8 @@
#include "frame.h"
#include "compositor.h"
+//#define TRACE(fmt, ...) printf(fmt"\n", ##__VA_ARGS__); fflush(stdout);
+
typedef struct
{
xfwmPixmap pm_title;
@@ -121,7 +123,13 @@ frameTop (Client * c)
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 (c->flags, CLIENT_FLAG_MAXIMIZED_VERT)
+ && c->screen_info->params->titleless_maximize
+ && c->screen_info->params->borderless_maximize
+ )
+ )
+ )
{
return c->screen_info->title[TITLE_3][ACTIVE].height;
}
@@ -136,8 +144,12 @@ frameBottom (Client * c)
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_ALL (c->flags, CLIENT_FLAG_MAXIMIZED)
- || !(c->screen_info->params->borderless_maximize)))
+ && !(FLAG_TEST_ALL (c->flags, CLIENT_FLAG_MAXIMIZED)
+ && (c->screen_info->params->borderless_maximize))
+ && !(FLAG_TEST (c->flags, CLIENT_FLAG_MAXIMIZED_VERT)
+ && (c->screen_info->params->borderless_maximize)
+ && (c->screen_info->params->titleless_maximize))
+ )
{
return c->screen_info->sides[SIDE_BOTTOM][ACTIVE].height;
}
@@ -203,7 +215,13 @@ frameHeight (Client * c)
return frameTop (c) + frameBottom (c);
}
else 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 (c->flags, CLIENT_FLAG_MAXIMIZED_VERT)
+ && (c->screen_info->params->borderless_maximize)
+ && (c->screen_info->params->titleless_maximize)
+ ))
+
{
return c->height + frameTop (c) + frameBottom (c);
}
@@ -882,6 +900,7 @@ frameDrawWin (Client * c)
gboolean requires_clearing;
gboolean width_changed;
gboolean height_changed;
+ gboolean vert_only;
TRACE ("entering frameDraw");
TRACE ("drawing frame for \"%s\" (0x%lx)", c->name, c->window);
@@ -955,128 +974,149 @@ frameDrawWin (Client * c)
}
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)
+ && (c->screen_info->params->borderless_maximize)
+ && (c->screen_info->params->titleless_maximize)))
{
- /* First, hide the buttons that we don't have... */
- for (i = 0; i < BUTTON_COUNT; i++)
+ vert_only = FLAG_TEST (c->flags, CLIENT_FLAG_MAXIMIZED_VERT)
+ && (c->screen_info->params->titleless_maximize)
+ && (c->screen_info->params->borderless_maximize); //only vertical decorations shown (titleless vertical maximize)
+
+ if (vert_only)
{
- char b = getLetterFromButton (i, c);
- if ((!b) || !strchr (screen_info->params->button_layout, b))
+ //hide all buttons
+ for (i = 0; i < BUTTON_COUNT; i++)
{
xfwmWindowHide (&c->buttons[i]);
}
+ xfwmWindowHide (&c->title);
+ xfwmWindowHide (&c->sides[SIDE_BOTTOM]);
+ xfwmWindowHide (&c->sides[SIDE_TOP]);
+ xfwmWindowHide (&c->corners[CORNER_TOP_LEFT]);
+ xfwmWindowHide (&c->corners[CORNER_TOP_RIGHT]);
+ xfwmWindowHide (&c->corners[CORNER_BOTTOM_LEFT]);
+ xfwmWindowHide (&c->corners[CORNER_BOTTOM_RIGHT]);
}
-
- /* Then, show the ones that we do have on left... */
- 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++)
+ else
{
- button = getButtonFromLetter (screen_info->params->button_layout[i], c);
- if (button == TITLE_SEPARATOR)
+ /* First, hide the buttons that we don't have... */
+ for (i = 0; i < BUTTON_COUNT; i++)
{
- break;
- }
- else if (button >= 0)
- {
- if (x + screen_info->buttons[button][state].width + screen_info->params->button_spacing < right)
- {
- my_pixmap = clientGetButtonPixmap (c, button, clientGetButtonState (c, button, state));
- if (!xfwmPixmapNone(my_pixmap))
- {
- xfwmWindowSetBG (&c->buttons[button], my_pixmap);
- }
- xfwmWindowShow (&c->buttons[button], x,
- (frameTop (c) - screen_info->buttons[button][state].height + 1) / 2,
- screen_info->buttons[button][state].width,
- screen_info->buttons[button][state].height, TRUE);
- button_x[button] = x;
- x = x + screen_info->buttons[button][state].width +
- screen_info->params->button_spacing;
- }
- else
+ char b = getLetterFromButton (i, c);
+ if ((!b) || !strchr (screen_info->params->button_layout, b))
{
- xfwmWindowHide (&c->buttons[button]);
+ xfwmWindowHide (&c->buttons[i]);
}
}
- }
- left = x + screen_info->params->button_spacing;
- /* and those that we do have on right... */
- x = frameWidth (c) - frameRight (c) + screen_info->params->button_spacing -
- frameButtonOffset (c);
- for (j = strlen (screen_info->params->button_layout) - 1; j >= i; j--)
- {
- button = getButtonFromLetter (screen_info->params->button_layout[j], c);
- if (button == TITLE_SEPARATOR)
+ /* Then, show the ones that we do have on left... */
+ x = frameLeft (c) + frameButtonOffset (c);
+ if (x < 0)
{
- break;
+ x = 0;
}
- else if (button >= 0)
+ right = frameWidth (c) - frameRight (c) - frameButtonOffset (c);
+ for (i = 0; i < strlen (screen_info->params->button_layout); i++)
{
- if (x - screen_info->buttons[button][state].width - screen_info->params->button_spacing > left)
+ button = getButtonFromLetter (screen_info->params->button_layout[i], c);
+ if (button == TITLE_SEPARATOR)
{
- my_pixmap = clientGetButtonPixmap (c, button, clientGetButtonState (c, button, state));
- if (!xfwmPixmapNone(my_pixmap))
+ break;
+ }
+ else if (button >= 0)
+ {
+ if (x + screen_info->buttons[button][state].width + screen_info->params->button_spacing < right)
+ {
+ my_pixmap = clientGetButtonPixmap (c, button, clientGetButtonState (c, button, state));
+ if (!xfwmPixmapNone(my_pixmap))
+ {
+ xfwmWindowSetBG (&c->buttons[button], my_pixmap);
+ }
+ xfwmWindowShow (&c->buttons[button], x,
+ (frameTop (c) - screen_info->buttons[button][state].height + 1) / 2,
+ screen_info->buttons[button][state].width,
+ screen_info->buttons[button][state].height, TRUE);
+ button_x[button] = x;
+ x = x + screen_info->buttons[button][state].width +
+ screen_info->params->button_spacing;
+ }
+ else
{
- xfwmWindowSetBG (&c->buttons[button], my_pixmap);
+ xfwmWindowHide (&c->buttons[button]);
}
- x = x - screen_info->buttons[button][state].width -
- screen_info->params->button_spacing;
- xfwmWindowShow (&c->buttons[button], x,
- (frameTop (c) - screen_info->buttons[button][state].height + 1) / 2,
- screen_info->buttons[button][state].width,
- screen_info->buttons[button][state].height, TRUE);
- button_x[button] = x;
}
- else
+ }
+ left = x + screen_info->params->button_spacing;
+
+ /* and those that we do have on right... */
+ x = frameWidth (c) - frameRight (c) + screen_info->params->button_spacing -
+ frameButtonOffset (c);
+ for (j = strlen (screen_info->params->button_layout) - 1; j >= i; j--)
+ {
+ button = getButtonFromLetter (screen_info->params->button_layout[j], c);
+ if (button == TITLE_SEPARATOR)
{
- xfwmWindowHide (&c->buttons[button]);
+ break;
+ }
+ else if (button >= 0)
+ {
+ if (x - screen_info->buttons[button][state].width - screen_info->params->button_spacing > left)
+ {
+ my_pixmap = clientGetButtonPixmap (c, button, clientGetButtonState (c, button, state));
+ if (!xfwmPixmapNone(my_pixmap))
+ {
+ xfwmWindowSetBG (&c->buttons[button], my_pixmap);
+ }
+ x = x - screen_info->buttons[button][state].width -
+ screen_info->params->button_spacing;
+ xfwmWindowShow (&c->buttons[button], x,
+ (frameTop (c) - screen_info->buttons[button][state].height + 1) / 2,
+ screen_info->buttons[button][state].width,
+ screen_info->buttons[button][state].height, TRUE);
+ button_x[button] = x;
+ }
+ else
+ {
+ xfwmWindowHide (&c->buttons[button]);
+ }
}
}
+ left = left - 2 * screen_info->params->button_spacing;
+ right = x;
+ xfwmPixmapInit (screen_info, &frame_pix.pm_title);
+ xfwmPixmapInit (screen_info, &frame_pix.pm_sides[SIDE_TOP]);
+ xfwmPixmapInit (screen_info, &frame_pix.pm_sides[SIDE_BOTTOM]);
+
+ 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;
+
+ /* The title is almost always visible */
+ frameCreateTitlePixmap (c, state, left, right, &frame_pix.pm_title, &frame_pix.pm_sides[SIDE_TOP]);
+ xfwmWindowSetBG (&c->title, &frame_pix.pm_title);
+ xfwmWindowShow (&c->title,
+ frameTopLeftWidth (c, state), 0, top_width,
+ frameTop (c), (requires_clearing | width_changed));
+
+ /* Corners are never resized, we need to update them separately */
+ if (requires_clearing)
+ {
+ xfwmWindowSetBG (&c->corners[CORNER_TOP_LEFT],
+ &screen_info->corners[CORNER_TOP_LEFT][state]);
+ xfwmWindowSetBG (&c->corners[CORNER_TOP_RIGHT],
+ &screen_info->corners[CORNER_TOP_RIGHT][state]);
+ xfwmWindowSetBG (&c->corners[CORNER_BOTTOM_LEFT],
+ &screen_info->corners[CORNER_BOTTOM_LEFT][state]);
+ xfwmWindowSetBG (&c->corners[CORNER_BOTTOM_RIGHT],
+ &screen_info->corners[CORNER_BOTTOM_RIGHT][state]);
+ }
}
- left = left - 2 * screen_info->params->button_spacing;
- right = x;
-
- 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) -
- screen_info->corners[CORNER_BOTTOM_LEFT][state].height;
- right_height = frameHeight (c) - frameTop (c) -
- screen_info->corners[CORNER_BOTTOM_RIGHT][state].height;
-
- xfwmPixmapInit (screen_info, &frame_pix.pm_title);
- xfwmPixmapInit (screen_info, &frame_pix.pm_sides[SIDE_TOP]);
- xfwmPixmapInit (screen_info, &frame_pix.pm_sides[SIDE_BOTTOM]);
+
xfwmPixmapInit (screen_info, &frame_pix.pm_sides[SIDE_LEFT]);
xfwmPixmapInit (screen_info, &frame_pix.pm_sides[SIDE_RIGHT]);
- /* The title is always visible */
- frameCreateTitlePixmap (c, state, left, right, &frame_pix.pm_title, &frame_pix.pm_sides[SIDE_TOP]);
- xfwmWindowSetBG (&c->title, &frame_pix.pm_title);
- xfwmWindowShow (&c->title,
- frameTopLeftWidth (c, state), 0, top_width,
- frameTop (c), (requires_clearing | width_changed));
-
- /* Corners are never resized, we need to update them separately */
- if (requires_clearing)
- {
- xfwmWindowSetBG (&c->corners[CORNER_TOP_LEFT],
- &screen_info->corners[CORNER_TOP_LEFT][state]);
- xfwmWindowSetBG (&c->corners[CORNER_TOP_RIGHT],
- &screen_info->corners[CORNER_TOP_RIGHT][state]);
- xfwmWindowSetBG (&c->corners[CORNER_BOTTOM_LEFT],
- &screen_info->corners[CORNER_BOTTOM_LEFT][state]);
- xfwmWindowSetBG (&c->corners[CORNER_BOTTOM_RIGHT],
- &screen_info->corners[CORNER_BOTTOM_RIGHT][state]);
- }
-
if (FLAG_TEST_ALL (c->flags, CLIENT_FLAG_MAXIMIZED)
&& (c->screen_info->params->borderless_maximize))
{
@@ -1091,6 +1131,18 @@ frameDrawWin (Client * c)
}
else
{
+ if (vert_only)
+ {
+ left_height = right_height = c->height;
+ }
+ else
+ {
+ left_height = frameHeight (c) - frameTop (c)
+ - screen_info->corners[CORNER_BOTTOM_LEFT][state].height;
+ right_height = frameHeight (c) - frameTop (c)
+ - screen_info->corners[CORNER_BOTTOM_RIGHT][state].height;
+ }
+
if (FLAG_TEST (c->flags, CLIENT_FLAG_SHADED))
{
xfwmWindowHide (&c->sides[SIDE_LEFT]);
@@ -1120,63 +1172,69 @@ frameDrawWin (Client * c)
right_height, (requires_clearing | height_changed));
}
- xfwmPixmapCreate (screen_info, &frame_pix.pm_sides[SIDE_BOTTOM],
- bottom_width, frameBottom (c));
- xfwmPixmapFill (&screen_info->sides[SIDE_BOTTOM][state],
- &frame_pix.pm_sides[SIDE_BOTTOM],
- 0, 0, bottom_width, frameBottom (c));
- xfwmWindowSetBG (&c->sides[SIDE_BOTTOM],
- &frame_pix.pm_sides[SIDE_BOTTOM]);
- 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));
-
- if (!xfwmPixmapNone(&frame_pix.pm_sides[SIDE_TOP]))
+ if (!vert_only)
{
- xfwmWindowSetBG (&c->sides[SIDE_TOP], &frame_pix.pm_sides[SIDE_TOP]);
- xfwmWindowShow (&c->sides[SIDE_TOP],
- screen_info->corners[CORNER_TOP_LEFT][state].width,
- 0, top_width, frame_pix.pm_sides[SIDE_TOP].height,
+ xfwmPixmapCreate (screen_info, &frame_pix.pm_sides[SIDE_BOTTOM],
+ bottom_width, frameBottom (c));
+ xfwmPixmapFill (&screen_info->sides[SIDE_BOTTOM][state],
+ &frame_pix.pm_sides[SIDE_BOTTOM],
+ 0, 0, bottom_width, frameBottom (c));
+ xfwmWindowSetBG (&c->sides[SIDE_BOTTOM],
+ &frame_pix.pm_sides[SIDE_BOTTOM]);
+ 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));
- }
- else
- {
- xfwmWindowHide (&c->sides[SIDE_TOP]);
- }
- 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 (!xfwmPixmapNone(&frame_pix.pm_sides[SIDE_TOP]))
+ {
+ xfwmWindowSetBG (&c->sides[SIDE_TOP], &frame_pix.pm_sides[SIDE_TOP]);
+ xfwmWindowShow (&c->sides[SIDE_TOP],
+ screen_info->corners[CORNER_TOP_LEFT][state].width,
+ 0, top_width, frame_pix.pm_sides[SIDE_TOP].height,
+ (requires_clearing | width_changed));
+ }
+ else
+ {
+ xfwmWindowHide (&c->sides[SIDE_TOP]);
+ }
+
+ 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);
+ }
}
frameSetShape (c, state, &frame_pix, button_x);
- xfwmPixmapFree (&frame_pix.pm_title);
- xfwmPixmapFree (&frame_pix.pm_sides[SIDE_TOP]);
- xfwmPixmapFree (&frame_pix.pm_sides[SIDE_BOTTOM]);
+ if (!vert_only)
+ {
+ xfwmPixmapFree (&frame_pix.pm_title);
+ xfwmPixmapFree (&frame_pix.pm_sides[SIDE_TOP]);
+ xfwmPixmapFree (&frame_pix.pm_sides[SIDE_BOTTOM]);
+ }
xfwmPixmapFree (&frame_pix.pm_sides[SIDE_LEFT]);
xfwmPixmapFree (&frame_pix.pm_sides[SIDE_RIGHT]);
}
diff --git a/src/placement.c b/src/placement.c
index 732f01d..544bda1 100644
--- a/src/placement.c
+++ b/src/placement.c
@@ -38,7 +38,6 @@
#include "frame.h"
#include "netwm.h"
-
/* Compute rectangle overlap area */
static inline unsigned long
@@ -108,6 +107,8 @@ clientMaxSpace (ScreenInfo *screen_info, int *x, int *y, int *w, int *h)
g_return_if_fail (w != NULL);
g_return_if_fail (h != NULL);
+ TRACE ("entering clientMaxSpace");
+
screen_width = 0;
screen_height = 0;
delta = 0;
@@ -157,6 +158,7 @@ clientMaxSpace (ScreenInfo *screen_info, int *x, int *y, int *w, int *h)
}
}
}
+ TRACE ("clientMaxSpace result %d %d %d %d", *x, *y, *w, *h);
}
gboolean
diff --git a/src/settings.c b/src/settings.c
index 607bb7b..37b6c2a 100644
--- a/src/settings.c
+++ b/src/settings.c
@@ -667,6 +667,7 @@ loadSettings (ScreenInfo *screen_info)
/* You can change the order of the following parameters */
{"activate_action", NULL, G_TYPE_STRING, TRUE},
{"borderless_maximize", NULL, G_TYPE_BOOLEAN, TRUE},
+ {"titleless_maximize", NULL, G_TYPE_BOOLEAN, TRUE},
{"box_move", NULL, G_TYPE_BOOLEAN, TRUE},
{"box_resize", NULL, G_TYPE_BOOLEAN, TRUE},
{"button_layout", NULL, G_TYPE_STRING, TRUE},
@@ -753,6 +754,8 @@ loadSettings (ScreenInfo *screen_info)
screen_info->params->borderless_maximize =
getBoolValue ("borderless_maximize", rc);
+ screen_info->params->titleless_maximize =
+ getBoolValue ("titleless_maximize", rc);
screen_info->params->box_resize =
getBoolValue ("box_resize", rc);
screen_info->params->box_move =
@@ -1261,6 +1264,11 @@ cb_xfwm4_channel_property_changed(XfconfChannel *channel, const gchar *property_
screen_info->params->borderless_maximize = g_value_get_boolean (value);
reloadScreenSettings (screen_info, UPDATE_MAXIMIZE);
}
+ else if (!strcmp (name, "titleless_maximize"))
+ {
+ screen_info->params->titleless_maximize = g_value_get_boolean (value);
+ reloadScreenSettings (screen_info, UPDATE_MAXIMIZE);
+ }
else if (!strcmp (name, "cycle_minimum"))
{
screen_info->params->cycle_minimum = g_value_get_boolean (value);
diff --git a/src/settings.h b/src/settings.h
index be01b6b..ea8b79b 100644
--- a/src/settings.h
+++ b/src/settings.h
@@ -197,6 +197,7 @@ struct _XfwmParams
int title_shadow[2];
int wrap_resistance;
gboolean borderless_maximize;
+ gboolean titleless_maximize;
gboolean box_move;
gboolean box_resize;
gboolean click_to_focus;