events: Replace a switch statement with a simple if test
This commit is contained in:
parent
f56cc1f733
commit
df642b96e2
@ -1926,167 +1926,159 @@ meta_display_handle_event (MetaDisplay *display,
|
|||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (event->type)
|
if (window && event->type == CLUTTER_BUTTON_PRESS && display->grab_op == META_GRAB_OP_NONE)
|
||||||
{
|
{
|
||||||
case CLUTTER_BUTTON_PRESS:
|
ClutterModifierType grab_mask;
|
||||||
if (window && display->grab_op == META_GRAB_OP_NONE)
|
gboolean unmodified;
|
||||||
|
gboolean fully_modified;
|
||||||
|
|
||||||
|
grab_mask = display->window_grab_modifiers;
|
||||||
|
if (g_getenv ("MUTTER_DEBUG_BUTTON_GRABS"))
|
||||||
|
grab_mask |= CLUTTER_CONTROL_MASK;
|
||||||
|
|
||||||
|
/* We have three passive button grabs:
|
||||||
|
* - on any button, without modifiers => focuses and maybe raises the window
|
||||||
|
* - on resize button, with modifiers => start an interactive resizing
|
||||||
|
* (normally <Super>middle)
|
||||||
|
* - on move button, with modifiers => start an interactive move
|
||||||
|
* (normally <Super>left)
|
||||||
|
* - on menu button, with modifiers => show the window menu
|
||||||
|
* (normally <Super>right)
|
||||||
|
*
|
||||||
|
* We may get here because we actually have a button
|
||||||
|
* grab on the window, or because we're a wayland
|
||||||
|
* compositor and thus we see all the events, so we
|
||||||
|
* need to check if the event is interesting.
|
||||||
|
* We want an event that is not modified for a window.
|
||||||
|
*
|
||||||
|
* We may have other events on the window, for example
|
||||||
|
* a click on a frame button, but that's not for us to
|
||||||
|
* care about. Just let the event through.
|
||||||
|
*/
|
||||||
|
unmodified = (event->button.modifier_state & grab_mask) == 0;
|
||||||
|
fully_modified = grab_mask && (event->button.modifier_state & grab_mask) == grab_mask;
|
||||||
|
|
||||||
|
if (unmodified)
|
||||||
{
|
{
|
||||||
ClutterModifierType grab_mask;
|
if (meta_prefs_get_raise_on_click ())
|
||||||
gboolean unmodified;
|
meta_window_raise (window);
|
||||||
gboolean fully_modified;
|
else
|
||||||
|
meta_topic (META_DEBUG_FOCUS,
|
||||||
|
"Not raising window on click due to don't-raise-on-click option\n");
|
||||||
|
|
||||||
grab_mask = display->window_grab_modifiers;
|
/* Don't focus panels--they must explicitly request focus.
|
||||||
if (g_getenv ("MUTTER_DEBUG_BUTTON_GRABS"))
|
* See bug 160470
|
||||||
grab_mask |= CLUTTER_CONTROL_MASK;
|
|
||||||
|
|
||||||
/* We have three passive button grabs:
|
|
||||||
* - on any button, without modifiers => focuses and maybe raises the window
|
|
||||||
* - on resize button, with modifiers => start an interactive resizing
|
|
||||||
* (normally <Super>middle)
|
|
||||||
* - on move button, with modifiers => start an interactive move
|
|
||||||
* (normally <Super>left)
|
|
||||||
* - on menu button, with modifiers => show the window menu
|
|
||||||
* (normally <Super>right)
|
|
||||||
*
|
|
||||||
* We may get here because we actually have a button
|
|
||||||
* grab on the window, or because we're a wayland
|
|
||||||
* compositor and thus we see all the events, so we
|
|
||||||
* need to check if the event is interesting.
|
|
||||||
* We want an event that is not modified for a window.
|
|
||||||
*
|
|
||||||
* We may have other events on the window, for example
|
|
||||||
* a click on a frame button, but that's not for us to
|
|
||||||
* care about. Just let the event through.
|
|
||||||
*/
|
*/
|
||||||
unmodified = (event->button.modifier_state & grab_mask) == 0;
|
if (window->type != META_WINDOW_DOCK)
|
||||||
fully_modified = grab_mask && (event->button.modifier_state & grab_mask) == grab_mask;
|
|
||||||
|
|
||||||
if (unmodified)
|
|
||||||
{
|
{
|
||||||
if (meta_prefs_get_raise_on_click ())
|
meta_topic (META_DEBUG_FOCUS,
|
||||||
meta_window_raise (window);
|
"Focusing %s due to unmodified button %u press (display.c)\n",
|
||||||
else
|
window->desc, event->button.button);
|
||||||
meta_topic (META_DEBUG_FOCUS,
|
meta_window_focus (window, event->any.time);
|
||||||
"Not raising window on click due to don't-raise-on-click option\n");
|
}
|
||||||
|
else
|
||||||
|
/* However, do allow terminals to lose focus due to new
|
||||||
|
* window mappings after the user clicks on a panel.
|
||||||
|
*/
|
||||||
|
display->allow_terminal_deactivation = TRUE;
|
||||||
|
|
||||||
/* Don't focus panels--they must explicitly request focus.
|
meta_verbose ("Allowing events time %u\n",
|
||||||
* See bug 160470
|
(unsigned int)event->button.time);
|
||||||
*/
|
|
||||||
if (window->type != META_WINDOW_DOCK)
|
|
||||||
{
|
|
||||||
meta_topic (META_DEBUG_FOCUS,
|
|
||||||
"Focusing %s due to unmodified button %u press (display.c)\n",
|
|
||||||
window->desc, event->button.button);
|
|
||||||
meta_window_focus (window, event->any.time);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
/* However, do allow terminals to lose focus due to new
|
|
||||||
* window mappings after the user clicks on a panel.
|
|
||||||
*/
|
|
||||||
display->allow_terminal_deactivation = TRUE;
|
|
||||||
|
|
||||||
meta_verbose ("Allowing events time %u\n",
|
|
||||||
(unsigned int)event->button.time);
|
|
||||||
|
|
||||||
|
{
|
||||||
|
MetaBackend *backend = meta_get_backend ();
|
||||||
|
if (META_IS_BACKEND_X11 (backend))
|
||||||
{
|
{
|
||||||
MetaBackend *backend = meta_get_backend ();
|
Display *xdisplay = meta_backend_x11_get_xdisplay (META_BACKEND_X11 (backend));
|
||||||
if (META_IS_BACKEND_X11 (backend))
|
XIAllowEvents (xdisplay, clutter_input_device_get_device_id (event->button.device),
|
||||||
{
|
XIReplayDevice, event->button.time);
|
||||||
Display *xdisplay = meta_backend_x11_get_xdisplay (META_BACKEND_X11 (backend));
|
|
||||||
XIAllowEvents (xdisplay, clutter_input_device_get_device_id (event->button.device),
|
|
||||||
XIReplayDevice, event->button.time);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bypass_clutter = TRUE;
|
bypass_clutter = TRUE;
|
||||||
}
|
|
||||||
else if (fully_modified && (int) event->button.button == meta_prefs_get_mouse_button_resize ())
|
|
||||||
{
|
|
||||||
if (window->has_resize_func)
|
|
||||||
{
|
|
||||||
gboolean north, south;
|
|
||||||
gboolean west, east;
|
|
||||||
MetaRectangle frame_rect;
|
|
||||||
MetaGrabOp op;
|
|
||||||
|
|
||||||
meta_window_get_frame_rect (window, &frame_rect);
|
|
||||||
|
|
||||||
west = event->button.x < (frame_rect.x + 1 * frame_rect.width / 3);
|
|
||||||
east = event->button.x > (frame_rect.x + 2 * frame_rect.width / 3);
|
|
||||||
north = event->button.y < (frame_rect.y + 1 * frame_rect.height / 3);
|
|
||||||
south = event->button.y > (frame_rect.y + 2 * frame_rect.height / 3);
|
|
||||||
|
|
||||||
if (north && west)
|
|
||||||
op = META_GRAB_OP_RESIZING_NW;
|
|
||||||
else if (north && east)
|
|
||||||
op = META_GRAB_OP_RESIZING_NE;
|
|
||||||
else if (south && west)
|
|
||||||
op = META_GRAB_OP_RESIZING_SW;
|
|
||||||
else if (south && east)
|
|
||||||
op = META_GRAB_OP_RESIZING_SE;
|
|
||||||
else if (north)
|
|
||||||
op = META_GRAB_OP_RESIZING_N;
|
|
||||||
else if (west)
|
|
||||||
op = META_GRAB_OP_RESIZING_W;
|
|
||||||
else if (east)
|
|
||||||
op = META_GRAB_OP_RESIZING_E;
|
|
||||||
else if (south)
|
|
||||||
op = META_GRAB_OP_RESIZING_S;
|
|
||||||
else /* Middle region is no-op to avoid user triggering wrong action */
|
|
||||||
op = META_GRAB_OP_NONE;
|
|
||||||
|
|
||||||
if (op != META_GRAB_OP_NONE)
|
|
||||||
meta_display_begin_grab_op (display,
|
|
||||||
window->screen,
|
|
||||||
window,
|
|
||||||
op,
|
|
||||||
TRUE,
|
|
||||||
FALSE,
|
|
||||||
event->button.button,
|
|
||||||
0,
|
|
||||||
event->any.time,
|
|
||||||
event->button.x,
|
|
||||||
event->button.y);
|
|
||||||
}
|
|
||||||
bypass_clutter = TRUE;
|
|
||||||
bypass_wayland = TRUE;
|
|
||||||
}
|
|
||||||
else if (fully_modified && (int) event->button.button == meta_prefs_get_mouse_button_menu ())
|
|
||||||
{
|
|
||||||
if (meta_prefs_get_raise_on_click ())
|
|
||||||
meta_window_raise (window);
|
|
||||||
meta_window_show_menu (window,
|
|
||||||
event->button.x,
|
|
||||||
event->button.y,
|
|
||||||
event->button.button,
|
|
||||||
event->any.time);
|
|
||||||
bypass_clutter = TRUE;
|
|
||||||
bypass_wayland = TRUE;
|
|
||||||
}
|
|
||||||
else if (fully_modified && (int) event->button.button == 1)
|
|
||||||
{
|
|
||||||
if (window->has_move_func)
|
|
||||||
{
|
|
||||||
meta_display_begin_grab_op (display,
|
|
||||||
window->screen,
|
|
||||||
window,
|
|
||||||
META_GRAB_OP_MOVING,
|
|
||||||
TRUE,
|
|
||||||
FALSE,
|
|
||||||
event->button.button,
|
|
||||||
0,
|
|
||||||
event->any.time,
|
|
||||||
event->button.x,
|
|
||||||
event->button.y);
|
|
||||||
}
|
|
||||||
bypass_clutter = TRUE;
|
|
||||||
bypass_wayland = TRUE;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
break;
|
else if (fully_modified && (int) event->button.button == meta_prefs_get_mouse_button_resize ())
|
||||||
|
{
|
||||||
|
if (window->has_resize_func)
|
||||||
|
{
|
||||||
|
gboolean north, south;
|
||||||
|
gboolean west, east;
|
||||||
|
MetaRectangle frame_rect;
|
||||||
|
MetaGrabOp op;
|
||||||
|
|
||||||
default:
|
meta_window_get_frame_rect (window, &frame_rect);
|
||||||
break;
|
|
||||||
|
west = event->button.x < (frame_rect.x + 1 * frame_rect.width / 3);
|
||||||
|
east = event->button.x > (frame_rect.x + 2 * frame_rect.width / 3);
|
||||||
|
north = event->button.y < (frame_rect.y + 1 * frame_rect.height / 3);
|
||||||
|
south = event->button.y > (frame_rect.y + 2 * frame_rect.height / 3);
|
||||||
|
|
||||||
|
if (north && west)
|
||||||
|
op = META_GRAB_OP_RESIZING_NW;
|
||||||
|
else if (north && east)
|
||||||
|
op = META_GRAB_OP_RESIZING_NE;
|
||||||
|
else if (south && west)
|
||||||
|
op = META_GRAB_OP_RESIZING_SW;
|
||||||
|
else if (south && east)
|
||||||
|
op = META_GRAB_OP_RESIZING_SE;
|
||||||
|
else if (north)
|
||||||
|
op = META_GRAB_OP_RESIZING_N;
|
||||||
|
else if (west)
|
||||||
|
op = META_GRAB_OP_RESIZING_W;
|
||||||
|
else if (east)
|
||||||
|
op = META_GRAB_OP_RESIZING_E;
|
||||||
|
else if (south)
|
||||||
|
op = META_GRAB_OP_RESIZING_S;
|
||||||
|
else /* Middle region is no-op to avoid user triggering wrong action */
|
||||||
|
op = META_GRAB_OP_NONE;
|
||||||
|
|
||||||
|
if (op != META_GRAB_OP_NONE)
|
||||||
|
meta_display_begin_grab_op (display,
|
||||||
|
window->screen,
|
||||||
|
window,
|
||||||
|
op,
|
||||||
|
TRUE,
|
||||||
|
FALSE,
|
||||||
|
event->button.button,
|
||||||
|
0,
|
||||||
|
event->any.time,
|
||||||
|
event->button.x,
|
||||||
|
event->button.y);
|
||||||
|
}
|
||||||
|
bypass_clutter = TRUE;
|
||||||
|
bypass_wayland = TRUE;
|
||||||
|
}
|
||||||
|
else if (fully_modified && (int) event->button.button == meta_prefs_get_mouse_button_menu ())
|
||||||
|
{
|
||||||
|
if (meta_prefs_get_raise_on_click ())
|
||||||
|
meta_window_raise (window);
|
||||||
|
meta_window_show_menu (window,
|
||||||
|
event->button.x,
|
||||||
|
event->button.y,
|
||||||
|
event->button.button,
|
||||||
|
event->any.time);
|
||||||
|
bypass_clutter = TRUE;
|
||||||
|
bypass_wayland = TRUE;
|
||||||
|
}
|
||||||
|
else if (fully_modified && (int) event->button.button == 1)
|
||||||
|
{
|
||||||
|
if (window->has_move_func)
|
||||||
|
{
|
||||||
|
meta_display_begin_grab_op (display,
|
||||||
|
window->screen,
|
||||||
|
window,
|
||||||
|
META_GRAB_OP_MOVING,
|
||||||
|
TRUE,
|
||||||
|
FALSE,
|
||||||
|
event->button.button,
|
||||||
|
0,
|
||||||
|
event->any.time,
|
||||||
|
event->button.x,
|
||||||
|
event->button.y);
|
||||||
|
}
|
||||||
|
bypass_clutter = TRUE;
|
||||||
|
bypass_wayland = TRUE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
out:
|
out:
|
||||||
|
Loading…
Reference in New Issue
Block a user