frames: Allow for unknown mouse buttons
Commit 47131b1d
("frames: Handle touch events") introduced an assert to
make sure that all mouse button actions are handled in mutter.
However, mice can have a more than 5 buttons, so simply ignore the
"other" actions instead of aborting.
Fixes: https://gitlab.gnome.org/GNOME/mutter/issues/160
This commit is contained in:
parent
f7747e4d4f
commit
473bf38753
@ -75,7 +75,8 @@ enum {
|
|||||||
META_ACTION_CLICK,
|
META_ACTION_CLICK,
|
||||||
META_ACTION_RIGHT_CLICK,
|
META_ACTION_RIGHT_CLICK,
|
||||||
META_ACTION_MIDDLE_CLICK,
|
META_ACTION_MIDDLE_CLICK,
|
||||||
META_ACTION_DOUBLE_CLICK
|
META_ACTION_DOUBLE_CLICK,
|
||||||
|
META_ACTION_IGNORE
|
||||||
};
|
};
|
||||||
|
|
||||||
static GObject *
|
static GObject *
|
||||||
@ -974,6 +975,10 @@ get_action (const ClutterEvent *event)
|
|||||||
return META_ACTION_RIGHT_CLICK;
|
return META_ACTION_RIGHT_CLICK;
|
||||||
case CLUTTER_BUTTON_MIDDLE:
|
case CLUTTER_BUTTON_MIDDLE:
|
||||||
return META_ACTION_MIDDLE_CLICK;
|
return META_ACTION_MIDDLE_CLICK;
|
||||||
|
default:
|
||||||
|
meta_verbose ("No action triggered for button %u %s\n",
|
||||||
|
event->button.button,
|
||||||
|
(event->type == CLUTTER_BUTTON_PRESS) ? "press" : "release");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (event->type == CLUTTER_TOUCH_BEGIN ||
|
else if (event->type == CLUTTER_TOUCH_BEGIN ||
|
||||||
@ -983,7 +988,7 @@ get_action (const ClutterEvent *event)
|
|||||||
return META_ACTION_CLICK;
|
return META_ACTION_CLICK;
|
||||||
}
|
}
|
||||||
|
|
||||||
g_assert_not_reached ();
|
return META_ACTION_IGNORE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static uint32_t
|
static uint32_t
|
||||||
@ -1115,13 +1120,15 @@ handle_press_event (MetaUIFrame *frame,
|
|||||||
g_assert (event->type == CLUTTER_BUTTON_PRESS ||
|
g_assert (event->type == CLUTTER_BUTTON_PRESS ||
|
||||||
event->type == CLUTTER_TOUCH_BEGIN);
|
event->type == CLUTTER_TOUCH_BEGIN);
|
||||||
|
|
||||||
|
action = get_action (event);
|
||||||
|
if (action == META_ACTION_IGNORE)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
display = GDK_DISPLAY_XDISPLAY (gdk_display_get_default ());
|
display = GDK_DISPLAY_XDISPLAY (gdk_display_get_default ());
|
||||||
|
|
||||||
evtime = clutter_event_get_time (event);
|
evtime = clutter_event_get_time (event);
|
||||||
clutter_event_get_coords (event, &x, &y);
|
clutter_event_get_coords (event, &x, &y);
|
||||||
control = get_control (frame, x, y);
|
control = get_control (frame, x, y);
|
||||||
action = get_action (event);
|
|
||||||
|
|
||||||
/* don't do the rest of this if on client area */
|
/* don't do the rest of this if on client area */
|
||||||
if (control == META_FRAME_CONTROL_CLIENT_AREA)
|
if (control == META_FRAME_CONTROL_CLIENT_AREA)
|
||||||
return FALSE; /* not on the frame, just passed through from client */
|
return FALSE; /* not on the frame, just passed through from client */
|
||||||
|
Loading…
Reference in New Issue
Block a user