diff options
author | Benjamin Valentin <[email protected]> | 2012-01-08 07:49:32 +0100 |
---|---|---|
committer | Benjamin Valentin <benpicco@rechenknecht2k7.(none)> | 2012-03-16 00:26:43 +0100 |
commit | 01aeeb15748062b183c5ec400ef7bad67cf60f27 (patch) | |
tree | cd01d43a7de7e3f8d365b5d9cc6ac43beb6892fe | |
parent | 6e5c6ab190ca9bddf0e2b694abd0100ab5fcc11c (diff) | |
download | marco-01aeeb15748062b183c5ec400ef7bad67cf60f27.tar.bz2 marco-01aeeb15748062b183c5ec400ef7bad67cf60f27.tar.xz |
Change the behavior of the maximize button so that a middle click on it will maximize the window vertically, a right click horizontally.
-rw-r--r-- | src/include/common.h | 4 | ||||
-rw-r--r-- | src/ui/frames.c | 53 |
2 files changed, 45 insertions, 12 deletions
diff --git a/src/include/common.h b/src/include/common.h index ccb592f6..b0308f42 100644 --- a/src/include/common.h +++ b/src/include/common.h @@ -131,7 +131,11 @@ typedef enum /* Frame button ops */ META_GRAB_OP_CLICKING_MINIMIZE, META_GRAB_OP_CLICKING_MAXIMIZE, + META_GRAB_OP_CLICKING_MAXIMIZE_VERTICAL, + META_GRAB_OP_CLICKING_MAXIMIZE_HORIZONTAL, META_GRAB_OP_CLICKING_UNMAXIMIZE, + META_GRAB_OP_CLICKING_UNMAXIMIZE_VERTICAL, + META_GRAB_OP_CLICKING_UNMAXIMIZE_HORIZONTAL, META_GRAB_OP_CLICKING_DELETE, META_GRAB_OP_CLICKING_MENU, META_GRAB_OP_CLICKING_SHADE, diff --git a/src/ui/frames.c b/src/ui/frames.c index bb4c863c..c3cfc0ea 100644 --- a/src/ui/frames.c +++ b/src/ui/frames.c @@ -1443,10 +1443,8 @@ meta_frames_button_press_event (GtkWidget *widget, META_GRAB_OP_NONE) return FALSE; /* already up to something */ - if (event->button == 1 && - (control == META_FRAME_CONTROL_MAXIMIZE || - control == META_FRAME_CONTROL_UNMAXIMIZE || - control == META_FRAME_CONTROL_MINIMIZE || + if ((event->button == 1 && + (control == META_FRAME_CONTROL_MINIMIZE || control == META_FRAME_CONTROL_DELETE || control == META_FRAME_CONTROL_SHADE || control == META_FRAME_CONTROL_UNSHADE || @@ -1454,7 +1452,9 @@ meta_frames_button_press_event (GtkWidget *widget, control == META_FRAME_CONTROL_UNABOVE || control == META_FRAME_CONTROL_STICK || control == META_FRAME_CONTROL_UNSTICK || - control == META_FRAME_CONTROL_MENU)) + control == META_FRAME_CONTROL_MENU)) || + (control == META_FRAME_CONTROL_MAXIMIZE || + control == META_FRAME_CONTROL_UNMAXIMIZE)) { MetaGrabOp op = META_GRAB_OP_NONE; @@ -1464,9 +1464,12 @@ meta_frames_button_press_event (GtkWidget *widget, op = META_GRAB_OP_CLICKING_MINIMIZE; break; case META_FRAME_CONTROL_MAXIMIZE: - op = META_GRAB_OP_CLICKING_MAXIMIZE; + op = META_GRAB_OP_CLICKING_MAXIMIZE + event->button - 1; + op = op > META_GRAB_OP_CLICKING_MAXIMIZE_HORIZONTAL ? META_GRAB_OP_CLICKING_MAXIMIZE : op; break; case META_FRAME_CONTROL_UNMAXIMIZE: + op = META_GRAB_OP_CLICKING_UNMAXIMIZE + event->button - 1; + op = op > META_GRAB_OP_CLICKING_UNMAXIMIZE_HORIZONTAL ? META_GRAB_OP_CLICKING_UNMAXIMIZE : op; op = META_GRAB_OP_CLICKING_UNMAXIMIZE; break; case META_FRAME_CONTROL_DELETE: @@ -1710,20 +1713,36 @@ meta_frames_button_release_event (GtkWidget *widget, break; case META_GRAB_OP_CLICKING_MAXIMIZE: + case META_GRAB_OP_CLICKING_MAXIMIZE_VERTICAL: + case META_GRAB_OP_CLICKING_MAXIMIZE_HORIZONTAL: if (control == META_FRAME_CONTROL_MAXIMIZE) { /* Focus the window on the maximize */ meta_core_user_focus (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), frame->xwindow, event->time); - meta_core_maximize (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), frame->xwindow); + + if (op == META_GRAB_OP_CLICKING_MAXIMIZE) + meta_core_maximize (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), frame->xwindow); + if (op == META_GRAB_OP_CLICKING_MAXIMIZE_VERTICAL) + meta_core_toggle_maximize_vertically (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), frame->xwindow); + if (op == META_GRAB_OP_CLICKING_MAXIMIZE_HORIZONTAL) + meta_core_toggle_maximize_horizontally (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), frame->xwindow); } meta_core_end_grab_op (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), event->time); break; case META_GRAB_OP_CLICKING_UNMAXIMIZE: - if (control == META_FRAME_CONTROL_UNMAXIMIZE) - meta_core_unmaximize (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), frame->xwindow); + case META_GRAB_OP_CLICKING_UNMAXIMIZE_VERTICAL: + case META_GRAB_OP_CLICKING_UNMAXIMIZE_HORIZONTAL: + if (control == META_FRAME_CONTROL_UNMAXIMIZE) { + if (op == META_GRAB_OP_CLICKING_UNMAXIMIZE) + meta_core_unmaximize (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), frame->xwindow); + if (op == META_GRAB_OP_CLICKING_UNMAXIMIZE_VERTICAL) + meta_core_toggle_maximize_vertically (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), frame->xwindow); + if (op == META_GRAB_OP_CLICKING_UNMAXIMIZE_HORIZONTAL) + meta_core_toggle_maximize_horizontally (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), frame->xwindow); + } meta_core_end_grab_op (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), event->time); break; @@ -1930,7 +1949,11 @@ meta_frames_motion_notify_event (GtkWidget *widget, case META_GRAB_OP_CLICKING_DELETE: case META_GRAB_OP_CLICKING_MINIMIZE: case META_GRAB_OP_CLICKING_MAXIMIZE: + case META_GRAB_OP_CLICKING_MAXIMIZE_VERTICAL: + case META_GRAB_OP_CLICKING_MAXIMIZE_HORIZONTAL: case META_GRAB_OP_CLICKING_UNMAXIMIZE: + case META_GRAB_OP_CLICKING_UNMAXIMIZE_VERTICAL: + case META_GRAB_OP_CLICKING_UNMAXIMIZE_HORIZONTAL: case META_GRAB_OP_CLICKING_SHADE: case META_GRAB_OP_CLICKING_UNSHADE: case META_GRAB_OP_CLICKING_ABOVE: @@ -1956,7 +1979,11 @@ meta_frames_motion_notify_event (GtkWidget *widget, ((control == META_FRAME_CONTROL_MAXIMIZE || control == META_FRAME_CONTROL_UNMAXIMIZE) && (grab_op == META_GRAB_OP_CLICKING_MAXIMIZE || - grab_op == META_GRAB_OP_CLICKING_UNMAXIMIZE)) || + grab_op == META_GRAB_OP_CLICKING_MAXIMIZE_VERTICAL || + grab_op == META_GRAB_OP_CLICKING_MAXIMIZE_HORIZONTAL || + grab_op == META_GRAB_OP_CLICKING_UNMAXIMIZE || + grab_op == META_GRAB_OP_CLICKING_UNMAXIMIZE_VERTICAL || + grab_op == META_GRAB_OP_CLICKING_UNMAXIMIZE_HORIZONTAL)) || (control == META_FRAME_CONTROL_SHADE && grab_op == META_GRAB_OP_CLICKING_SHADE) || (control == META_FRAME_CONTROL_UNSHADE && @@ -2387,13 +2414,15 @@ meta_frames_paint_to_drawable (MetaFrames *frames, button_states[META_BUTTON_TYPE_MINIMIZE] = META_BUTTON_STATE_PRELIGHT; break; case META_FRAME_CONTROL_MAXIMIZE: - if (grab_op == META_GRAB_OP_CLICKING_MAXIMIZE) + if (grab_op == META_GRAB_OP_CLICKING_MAXIMIZE || grab_op == META_GRAB_OP_CLICKING_MAXIMIZE_VERTICAL || + grab_op == META_GRAB_OP_CLICKING_MAXIMIZE_HORIZONTAL) button_states[META_BUTTON_TYPE_MAXIMIZE] = META_BUTTON_STATE_PRESSED; else button_states[META_BUTTON_TYPE_MAXIMIZE] = META_BUTTON_STATE_PRELIGHT; break; case META_FRAME_CONTROL_UNMAXIMIZE: - if (grab_op == META_GRAB_OP_CLICKING_UNMAXIMIZE) + if (grab_op == META_GRAB_OP_CLICKING_UNMAXIMIZE || grab_op == META_GRAB_OP_CLICKING_UNMAXIMIZE_VERTICAL || + grab_op == META_GRAB_OP_CLICKING_UNMAXIMIZE_HORIZONTAL) button_states[META_BUTTON_TYPE_MAXIMIZE] = META_BUTTON_STATE_PRESSED; else button_states[META_BUTTON_TYPE_MAXIMIZE] = META_BUTTON_STATE_PRELIGHT; |