From b66f78d3ac8db5032bbaf8209df722c380a42e7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Leporcq?= Date: Sat, 31 May 2014 06:35:29 +0200 Subject: [PATCH 1/2] Make tile on move working for maximized windows --- src/moveresize.c | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/src/moveresize.c b/src/moveresize.c index ec0e423..5aa1e22 100644 --- a/src/moveresize.c +++ b/src/moveresize.c @@ -66,6 +66,7 @@ struct _MoveResizeData gboolean is_transient; gboolean move_resized; gboolean released; + gboolean toggled_maximize; guint button; gint cancel_x, cancel_y; gint cancel_w, cancel_h; @@ -820,7 +821,6 @@ clientMoveTile (Client *c, XMotionEvent *xevent) static eventFilterStatus clientMoveEventFilter (XEvent * xevent, gpointer data) { - static gboolean toggled_maximize = FALSE; unsigned long configure_flags; ScreenInfo *screen_info; DisplayInfo *display_info; @@ -907,9 +907,9 @@ clientMoveEventFilter (XEvent * xevent, gpointer data) { workspaceSwitch (screen_info, passdata->cancel_workspace, c, FALSE, xevent->xkey.time); } - if (toggled_maximize) + if (passdata->toggled_maximize) { - toggled_maximize = FALSE; + passdata->toggled_maximize = FALSE; if (clientToggleMaximized (c, CLIENT_FLAG_MAXIMIZED, FALSE)) { configure_flags = CFG_FORCE_REDRAW; @@ -961,10 +961,6 @@ clientMoveEventFilter (XEvent * xevent, gpointer data) xratio = (xevent->xmotion.x_root - frameX (c)) / (double) frameWidth (c); yratio = (xevent->xmotion.y_root - frameY (c)) / (double) frameHeight (c); - if (FLAG_TEST_ALL(c->flags, CLIENT_FLAG_MAXIMIZED)) - { - toggled_maximize = TRUE; - } if (clientToggleMaximized (c, c->flags & CLIENT_FLAG_MAXIMIZED, FALSE)) { passdata->move_resized = TRUE; @@ -997,13 +993,13 @@ clientMoveEventFilter (XEvent * xevent, gpointer data) c->y = passdata->oy + (xevent->xmotion.y_root - passdata->my); clientSnapPosition (c, prev_x, prev_y); - if (screen_info->params->restore_on_move && toggled_maximize) + if (screen_info->params->restore_on_move && !screen_info->params->tile_on_move) { if ((clientConstrainPos (c, FALSE) & CLIENT_CONSTRAINED_TOP) && clientToggleMaximized (c, CLIENT_FLAG_MAXIMIZED, FALSE)) { configure_flags = CFG_FORCE_REDRAW; - toggled_maximize = FALSE; + passdata->toggled_maximize = FALSE; passdata->move_resized = TRUE; } } @@ -1057,7 +1053,7 @@ clientMoveEventFilter (XEvent * xevent, gpointer data) if (!moving) { TRACE ("event loop now finished"); - toggled_maximize = FALSE; + passdata->toggled_maximize = FALSE; clientMoveWarp (c, NULL); gtk_main_quit (); } @@ -1122,6 +1118,15 @@ clientMove (Client * c, XEvent * ev) passdata.released = passdata.use_keys = TRUE; } + if (screen_info->params->restore_on_move && FLAG_TEST_ALL (c->flags, CLIENT_FLAG_MAXIMIZED)) + { + passdata.toggled_maximize = TRUE; + } + else + { + passdata.toggled_maximize = FALSE; + } + g1 = myScreenGrabKeyboard (screen_info, myDisplayGetCurrentTime (display_info)); g2 = myScreenGrabPointer (screen_info, FALSE, -- 1.9.3 From 8d3fbec33e3c1ef29982069d601db729ff486b55 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Leporcq?= Date: Sun, 1 Jun 2014 10:19:37 +0200 Subject: [PATCH 2/2] Add maximize on move option. --- defaults/defaults | 1 + settings-dialogs/tweaks-settings.c | 11 +++++++++++ settings-dialogs/xfwm4-tweaks-dialog.glade | 26 +++++++++++++++++++++----- src/moveresize.c | 28 ++++++++++++++++------------ src/settings.c | 7 +++++++ src/settings.h | 1 + 6 files changed, 57 insertions(+), 17 deletions(-) diff --git a/defaults/defaults b/defaults/defaults index 78c15a5..5d8b938 100644 --- a/defaults/defaults +++ b/defaults/defaults @@ -23,6 +23,7 @@ frame_opacity=100 full_width_title=true inactive_opacity=100 maximized_offset=0 +maximize_on_move=true move_opacity=100 placement_mode=center placement_ratio=20 diff --git a/settings-dialogs/tweaks-settings.c b/settings-dialogs/tweaks-settings.c index 4e9b4ef..d989a66 100644 --- a/settings-dialogs/tweaks-settings.c +++ b/settings-dialogs/tweaks-settings.c @@ -182,6 +182,7 @@ wm_tweaks_dialog_configure_widgets (GtkBuilder *builder) 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 *restore_on_move_check = GTK_WIDGET (gtk_builder_get_object (builder, "restore_on_move_check")); + GtkWidget *maximize_on_move_check = GTK_WIDGET (gtk_builder_get_object (builder, "maximize_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")); GtkWidget *urgent_blink = GTK_WIDGET (gtk_builder_get_object (builder, "urgent_blink")); @@ -299,6 +300,10 @@ wm_tweaks_dialog_configure_widgets (GtkBuilder *builder) "toggled", G_CALLBACK (cb_restore_on_move_check_button_toggled), tile_on_move_check); + g_signal_connect (G_OBJECT (restore_on_move_check), + "toggled", + G_CALLBACK (cb_restore_on_move_check_button_toggled), + maximize_on_move_check); /* Bind easy properties */ /* Cycling tab */ @@ -351,6 +356,10 @@ wm_tweaks_dialog_configure_widgets (GtkBuilder *builder) G_TYPE_BOOLEAN, (GObject *)tile_on_move_check, "active"); xfconf_g_property_bind (xfwm4_channel, + "/general/maximize_on_move", + G_TYPE_BOOLEAN, + (GObject *)maximize_on_move_check, "active"); + xfconf_g_property_bind (xfwm4_channel, "/general/snap_resist", G_TYPE_BOOLEAN, (GObject *)snap_resist_check, "active"); @@ -370,6 +379,8 @@ wm_tweaks_dialog_configure_widgets (GtkBuilder *builder) gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (urgent_blink))); gtk_widget_set_sensitive (tile_on_move_check, gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (restore_on_move_check))); + gtk_widget_set_sensitive (maximize_on_move_check, + gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (restore_on_move_check))); /* Workspaces tab */ xfconf_g_property_bind (xfwm4_channel, diff --git a/settings-dialogs/xfwm4-tweaks-dialog.glade b/settings-dialogs/xfwm4-tweaks-dialog.glade index 66a95ee..0a7dee1 100644 --- a/settings-dialogs/xfwm4-tweaks-dialog.glade +++ b/settings-dialogs/xfwm4-tweaks-dialog.glade @@ -447,6 +447,22 @@ or "skip taskbar" properties set + + Automatically _maximize windows when moving toward the top screen edge + False + True + True + False + True + True + + + False + False + 4 + + + Automatically _tile windows when moving toward the screen edge False @@ -459,7 +475,7 @@ or "skip taskbar" properties set False False - 4 + 5 @@ -475,7 +491,7 @@ or "skip taskbar" properties set False False - 5 + 6 @@ -491,7 +507,7 @@ or "skip taskbar" properties set False False - 6 + 7 @@ -507,7 +523,7 @@ or "skip taskbar" properties set False False - 7 + 8 @@ -523,7 +539,7 @@ or "skip taskbar" properties set False False - 8 + 9 diff --git a/src/moveresize.c b/src/moveresize.c index 5aa1e22..1a7f8c4 100644 --- a/src/moveresize.c +++ b/src/moveresize.c @@ -800,18 +800,21 @@ clientMoveTile (Client *c, XMotionEvent *xevent) } } - if (!screen_info->params->wrap_windows || layout.rows < 2) + if (!screen_info->params->maximize_on_move) { - if ((x >= disp_x - 1) && (x < disp_max_x + 1) && - (y >= disp_y - 1) && (y < disp_y + dist)) + if (!screen_info->params->wrap_windows || layout.rows < 2) { - return clientTile (c, x, y, TILE_UP, !screen_info->params->box_move); - } - - if ((x >= disp_x - 1) && (x < disp_max_x + 1) && - (y >= disp_max_y - dist) && (y < disp_max_y + 1)) - { - return clientTile (c, x, y, TILE_DOWN, !screen_info->params->box_move); + if ((x >= disp_x - 1) && (x < disp_max_x + 1) && + (y >= disp_y - 1) && (y < disp_y + dist)) + { + return clientTile (c, x, y, TILE_UP, !screen_info->params->box_move); + } + + if ((x >= disp_x - 1) && (x < disp_max_x + 1) && + (y >= disp_max_y - dist) && (y < disp_max_y + 1)) + { + return clientTile (c, x, y, TILE_DOWN, !screen_info->params->box_move); + } } } @@ -993,7 +996,8 @@ clientMoveEventFilter (XEvent * xevent, gpointer data) c->y = passdata->oy + (xevent->xmotion.y_root - passdata->my); clientSnapPosition (c, prev_x, prev_y); - if (screen_info->params->restore_on_move && !screen_info->params->tile_on_move) + if (screen_info->params->restore_on_move + && screen_info->params->maximize_on_move) { if ((clientConstrainPos (c, FALSE) & CLIENT_CONSTRAINED_TOP) && clientToggleMaximized (c, CLIENT_FLAG_MAXIMIZED, FALSE)) @@ -1003,7 +1007,7 @@ clientMoveEventFilter (XEvent * xevent, gpointer data) passdata->move_resized = TRUE; } } - else if (!clientMoveTile (c, (XMotionEvent *) xevent)) + if (!clientMoveTile (c, (XMotionEvent *) xevent)) { clientConstrainPos(c, FALSE); } diff --git a/src/settings.c b/src/settings.c index 5622ba7..716f622 100644 --- a/src/settings.c +++ b/src/settings.c @@ -694,6 +694,7 @@ loadSettings (ScreenInfo *screen_info) {"margin_right", NULL, G_TYPE_INT, FALSE}, {"margin_top", NULL, G_TYPE_INT, FALSE}, {"maximized_offset", NULL, G_TYPE_INT, TRUE}, + {"maximize_on_move", NULL, G_TYPE_BOOLEAN, TRUE}, {"move_opacity", NULL, G_TYPE_INT, TRUE}, {"placement_ratio", NULL, G_TYPE_INT, TRUE}, {"placement_mode", NULL, G_TYPE_STRING, TRUE}, @@ -801,6 +802,8 @@ loadSettings (ScreenInfo *screen_info) CLAMP (getIntValue ("frame_opacity", rc), 0, 100); screen_info->params->inactive_opacity = CLAMP (getIntValue ("inactive_opacity", rc), 0, 100); + screen_info->params->maximize_on_move = + getBoolValue ("maximize_on_move", rc); screen_info->params->move_opacity = CLAMP (getIntValue ("move_opacity", rc), 0, 100); screen_info->params->resize_opacity = @@ -1339,6 +1342,10 @@ cb_xfwm4_channel_property_changed(XfconfChannel *channel, const gchar *property_ { screen_info->params->tile_on_move = g_value_get_boolean (value); } + else if (!strcmp (name, "maximize_on_move")) + { + screen_info->params->maximize_on_move = g_value_get_boolean (value); + } else if (!strcmp (name, "sync_to_vblank")) { screen_info->params->sync_to_vblank = g_value_get_boolean (value); diff --git a/src/settings.h b/src/settings.h index a5038c8..9684161 100644 --- a/src/settings.h +++ b/src/settings.h @@ -209,6 +209,7 @@ struct _XfwmParams gboolean focus_hint; gboolean focus_new; gboolean full_width_title; + gboolean maximize_on_move; gboolean mousewheel_rollup; gboolean prevent_focus_stealing; gboolean raise_on_click; -- 1.9.3