summaryrefslogtreecommitdiff
path: root/src/keybindings.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/keybindings.c')
-rw-r--r--src/keybindings.c269
1 files changed, 127 insertions, 142 deletions
diff --git a/src/keybindings.c b/src/keybindings.c
index ecc8b9b6..d3aa9df0 100644
--- a/src/keybindings.c
+++ b/src/keybindings.c
@@ -1229,10 +1229,10 @@ ungrab_all_keys (MetaDisplay *display,
void
meta_screen_grab_keys (MetaScreen *screen, MetaDevInfo *dev)
{
- if (screen->all_keys_grabbed)
+ if (meta_devices_list_is_member (&screen->all_keys_grabbed, dev))
return;
- if (screen->keys_grabbed)
+ if (meta_devices_list_is_member (&screen->keys_grabbed, dev))
return;
grab_keys (dev,
@@ -1240,34 +1240,34 @@ meta_screen_grab_keys (MetaScreen *screen, MetaDevInfo *dev)
screen->display->n_screen_bindings,
screen->display, screen->xroot);
- screen->keys_grabbed = TRUE;
+ meta_devices_list_add (&screen->keys_grabbed, dev);
}
void
meta_screen_ungrab_keys (MetaScreen *screen, MetaDevInfo *dev)
{
- if (screen->keys_grabbed)
+ if (meta_devices_list_is_member (&screen->keys_grabbed, dev))
{
ungrab_all_keys (screen->display, dev, screen->xroot);
- screen->keys_grabbed = FALSE;
+ meta_devices_list_remove (&screen->keys_grabbed, dev);
}
}
void
meta_window_grab_keys (MetaWindow *window, MetaDevInfo *dev)
{
- if (window->all_keys_grabbed)
+ if (meta_devices_list_is_member(&window->all_keys_grabbed, dev))
return;
if (window->type == META_WINDOW_DOCK)
{
- if (window->keys_grabbed)
+ if (meta_devices_list_is_member(&window->keys_grabbed, dev))
ungrab_all_keys (window->display, dev, window->xwindow);
- window->keys_grabbed = FALSE;
+ meta_devices_list_remove (&window->keys_grabbed, dev);
return;
}
- if (window->keys_grabbed)
+ if (meta_devices_list_is_member (&window->keys_grabbed, dev))
{
if (window->frame && !window->grab_on_frame)
ungrab_all_keys (window->display, dev, window->xwindow);
@@ -1284,14 +1284,14 @@ meta_window_grab_keys (MetaWindow *window, MetaDevInfo *dev)
window->display,
window->frame ? window->frame->xwindow : window->xwindow);
- window->keys_grabbed = TRUE;
+ meta_devices_list_add (&window->keys_grabbed, dev);
window->grab_on_frame = window->frame != NULL;
}
void
meta_window_ungrab_keys (MetaWindow *window, MetaDevInfo *dev)
{
- if (window->keys_grabbed)
+ if (meta_devices_list_is_member (&window->keys_grabbed, dev))
{
if (window->grab_on_frame &&
window->frame != NULL)
@@ -1301,7 +1301,7 @@ meta_window_ungrab_keys (MetaWindow *window, MetaDevInfo *dev)
ungrab_all_keys (window->display, dev,
window->xwindow);
- window->keys_grabbed = FALSE;
+ meta_devices_list_remove (&window->keys_grabbed, dev);
}
}
@@ -1349,7 +1349,6 @@ grab_keyboard (MetaDisplay *display,
#ifdef MPX
/* XXX No event classes?? */
-#warning grabbing stuff with no evclasses
grab_status = XGrabDevice (display->xdisplay,
dev->xdev,
xwindow,
@@ -1403,26 +1402,22 @@ ungrab_keyboard (MetaDisplay *display,
}
gboolean
-#ifdef MPX
meta_screen_grab_all_keys (MetaScreen *screen, MetaDevInfo *dev,
guint32 timestamp)
-#else
-meta_screen_grab_all_keys (MetaScreen *screen, guint32 timestamp)
-#endif
{
gboolean retval;
- if (screen->all_keys_grabbed)
+ if (meta_devices_list_is_member(&screen->all_keys_grabbed, dev))
return FALSE;
- if (screen->keys_grabbed)
+ if (meta_devices_list_is_member(&screen->keys_grabbed, dev))
meta_screen_ungrab_keys (screen, dev);
meta_topic (META_DEBUG_KEYBINDINGS,
- "Grabbing all keys on RootWindow\n");
+ "Grabbing all keys on RootWindow for device %s\n", dev->name);
retval = grab_keyboard (screen->display, dev, screen->xroot, timestamp);
if (retval)
- screen->all_keys_grabbed = TRUE;
+ meta_devices_list_add (&screen->all_keys_grabbed, dev);
else
meta_screen_grab_keys (screen, dev);
@@ -1434,12 +1429,12 @@ meta_screen_ungrab_all_keys (MetaScreen *screen,
MetaDevInfo *dev,
guint32 timestamp)
{
- if (screen->all_keys_grabbed)
+ if (meta_devices_list_is_member (&screen->all_keys_grabbed, dev))
{
ungrab_keyboard (screen->display, dev, timestamp);
- screen->all_keys_grabbed = FALSE;
- screen->keys_grabbed = FALSE;
+ meta_devices_list_remove (&screen->all_keys_grabbed, dev);
+ meta_devices_list_remove (&screen->keys_grabbed, dev);
/* Re-establish our standard bindings */
meta_screen_grab_keys (screen, dev);
@@ -1447,22 +1442,17 @@ meta_screen_ungrab_all_keys (MetaScreen *screen,
}
gboolean
-#ifdef MPX
meta_window_grab_all_keys (MetaWindow *window,
MetaDevInfo *dev,
guint32 timestamp)
-#else
-meta_window_grab_all_keys (MetaWindow *window,
- guint32 timestamp)
-#endif
{
Window grabwindow;
gboolean retval;
- if (window->all_keys_grabbed)
+ if (meta_devices_list_is_member (&window->all_keys_grabbed, dev))
return FALSE;
- if (window->keys_grabbed)
+ if (meta_devices_list_is_member (&window->keys_grabbed, dev))
meta_window_ungrab_keys (window, dev);
/* Make sure the window is focused, otherwise the grab
@@ -1477,15 +1467,11 @@ meta_window_grab_all_keys (MetaWindow *window,
meta_topic (META_DEBUG_KEYBINDINGS,
"Grabbing all keys on window %s\n", window->desc);
-#ifdef MPX
retval = grab_keyboard (window->display, dev, grabwindow, timestamp);
-#else
- retval = grab_keyboard (window->display, grabwindow, timestamp);
-#endif
if (retval)
{
- window->keys_grabbed = FALSE;
- window->all_keys_grabbed = TRUE;
+ meta_devices_list_remove (&window->keys_grabbed, dev);
+ meta_devices_list_add (&window->all_keys_grabbed, dev);
window->grab_on_frame = window->frame != NULL;
}
@@ -1499,13 +1485,13 @@ meta_window_ungrab_all_keys (MetaWindow *window,
{
- if (window->all_keys_grabbed)
+ if (meta_devices_list_is_member (&window->all_keys_grabbed, dev))
{
ungrab_keyboard (window->display, dev, timestamp);
window->grab_on_frame = FALSE;
- window->all_keys_grabbed = FALSE;
- window->keys_grabbed = FALSE;
+ meta_devices_list_remove (&window->all_keys_grabbed, dev);
+ meta_devices_list_remove (&window->keys_grabbed, dev);
/* Re-establish our standard bindings */
meta_window_grab_keys (window, dev);
@@ -1817,7 +1803,9 @@ meta_display_process_key_event (MetaDisplay *display,
str ? str : "none", xdke->state,
window ? window->desc : "(no window)");
- all_keys_grabbed = window ? window->all_keys_grabbed : screen->all_keys_grabbed;
+ all_keys_grabbed = window ?
+ meta_devices_list_is_member(&window->all_keys_grabbed, dev):
+ meta_devices_list_is_member(&screen->all_keys_grabbed, dev);
if (!all_keys_grabbed)
{
/* Do the normal keybindings */
@@ -1835,7 +1823,7 @@ meta_display_process_key_event (MetaDisplay *display,
return;
}
- if (display->grab_op == META_GRAB_OP_NONE)
+ if (dev->grab_op == NULL)
return;
/* If we get here we have a global grab, because
@@ -1845,10 +1833,10 @@ meta_display_process_key_event (MetaDisplay *display,
handled = FALSE;
- if (window ? (window == display->grab_window) :
- (screen == display->grab_screen))
+ if (window ? (window == dev->grab_op->window) :
+ (screen == dev->grab_op->screen))
{
- switch (display->grab_op)
+ switch (dev->grab_op->op)
{
case META_GRAB_OP_MOVING:
case META_GRAB_OP_RESIZING_SE:
@@ -1916,8 +1904,8 @@ meta_display_process_key_event (MetaDisplay *display,
if (!handled)
{
meta_topic (META_DEBUG_KEYBINDINGS,
- "Ending grab op %u on key event sym %s\n",
- display->grab_op, XKeysymToString (keysym));
+ "Ending grab op %u on device %s key event sym %s\n",
+ dev->grab_op->op, dev->name, XKeysymToString (keysym));
meta_display_end_grab_op (display,
dev,
xdke->time);
@@ -1953,16 +1941,16 @@ process_mouse_move_resize_grab (MetaDisplay *display,
dev,
META_MAXIMIZE_HORIZONTAL |
META_MAXIMIZE_VERTICAL);
- else if (!display->grab_wireframe_active)
- meta_window_move_resize (display->grab_window,
+ else if (!dev->grab_op->wireframe_active)
+ meta_window_move_resize (dev->grab_op->window,
dev,
TRUE,
- display->grab_initial_window_pos.x,
- display->grab_initial_window_pos.y,
- display->grab_initial_window_pos.width,
- display->grab_initial_window_pos.height);
+ dev->grab_op->initial_window_pos.x,
+ dev->grab_op->initial_window_pos.y,
+ dev->grab_op->initial_window_pos.width,
+ dev->grab_op->initial_window_pos.height);
else
- display->grab_was_cancelled = TRUE;
+ dev->grab_op->was_cancelled = TRUE;
/* End grab, since this was an "unhandled" keypress */
return FALSE;
@@ -2000,10 +1988,10 @@ process_keyboard_move_grab (MetaDisplay *display,
if (is_modifier (display, xdke->keycode))
return TRUE;
- if (display->grab_wireframe_active)
+ if (dev->grab_op->wireframe_active)
{
- x = display->grab_wireframe_rect.x;
- y = display->grab_wireframe_rect.y;
+ x = dev->grab_op->wireframe_rect.x;
+ y = dev->grab_op->wireframe_rect.y;
}
else
{
@@ -2036,16 +2024,16 @@ process_keyboard_move_grab (MetaDisplay *display,
dev,
META_MAXIMIZE_HORIZONTAL |
META_MAXIMIZE_VERTICAL);
- else if (!display->grab_wireframe_active)
- meta_window_move_resize (display->grab_window,
+ else if (!dev->grab_op->wireframe_active)
+ meta_window_move_resize (dev->grab_op->window,
dev,
TRUE,
- display->grab_initial_window_pos.x,
- display->grab_initial_window_pos.y,
- display->grab_initial_window_pos.width,
- display->grab_initial_window_pos.height);
+ dev->grab_op->initial_window_pos.x,
+ dev->grab_op->initial_window_pos.y,
+ dev->grab_op->initial_window_pos.width,
+ dev->grab_op->initial_window_pos.height);
else
- display->grab_was_cancelled = TRUE;
+ dev->grab_op->was_cancelled = TRUE;
}
/* When moving by increments, we still snap to edges if the move
@@ -2096,12 +2084,13 @@ process_keyboard_move_grab (MetaDisplay *display,
"Computed new window location %d,%d due to keypress\n",
x, y);
- if (display->grab_wireframe_active)
- old_rect = display->grab_wireframe_rect;
+ if (dev->grab_op->wireframe_active)
+ old_rect = dev->grab_op->wireframe_rect;
else
meta_window_get_client_root_coords (window, &old_rect);
- meta_window_edge_resistance_for_move (window,
+ meta_window_edge_resistance_for_move (window,
+ dev,
old_rect.x,
old_rect.y,
&x,
@@ -2110,18 +2099,18 @@ process_keyboard_move_grab (MetaDisplay *display,
smart_snap,
TRUE);
- if (display->grab_wireframe_active)
+ if (dev->grab_op->wireframe_active)
{
- meta_window_update_wireframe (window, x, y,
- display->grab_wireframe_rect.width,
- display->grab_wireframe_rect.height);
+ meta_window_update_wireframe (window, dev, x, y,
+ dev->grab_op->wireframe_rect.width,
+ dev->grab_op->wireframe_rect.height);
}
else
{
meta_window_move (window, dev, TRUE, x, y);
}
- meta_window_update_keyboard_move (window);
+ meta_window_update_keyboard_move (dev, window);
}
return handled;
@@ -2135,31 +2124,37 @@ process_keyboard_resize_grab_op_change (MetaDisplay *display,
KeySym keysym)
{
gboolean handled;
+ MetaDevInfo *dev;
+
+ dev = meta_devices_find_keyboard_by_id (display, xdke->deviceid);
+
+ if (!dev->grab_op)
+ return FALSE;
handled = FALSE;
- switch (display->grab_op)
+ switch (dev->grab_op->op)
{
case META_GRAB_OP_KEYBOARD_RESIZING_UNKNOWN:
switch (keysym)
{
case XK_Up:
case XK_KP_Up:
- display->grab_op = META_GRAB_OP_KEYBOARD_RESIZING_N;
+ dev->grab_op->op = META_GRAB_OP_KEYBOARD_RESIZING_N;
handled = TRUE;
break;
case XK_Down:
case XK_KP_Down:
- display->grab_op = META_GRAB_OP_KEYBOARD_RESIZING_S;
+ dev->grab_op->op = META_GRAB_OP_KEYBOARD_RESIZING_S;
handled = TRUE;
break;
case XK_Left:
case XK_KP_Left:
- display->grab_op = META_GRAB_OP_KEYBOARD_RESIZING_W;
+ dev->grab_op->op = META_GRAB_OP_KEYBOARD_RESIZING_W;
handled = TRUE;
break;
case XK_Right:
case XK_KP_Right:
- display->grab_op = META_GRAB_OP_KEYBOARD_RESIZING_E;
+ dev->grab_op->op = META_GRAB_OP_KEYBOARD_RESIZING_E;
handled = TRUE;
break;
}
@@ -2170,12 +2165,12 @@ process_keyboard_resize_grab_op_change (MetaDisplay *display,
{
case XK_Left:
case XK_KP_Left:
- display->grab_op = META_GRAB_OP_KEYBOARD_RESIZING_W;
+ dev->grab_op->op = META_GRAB_OP_KEYBOARD_RESIZING_W;
handled = TRUE;
break;
case XK_Right:
case XK_KP_Right:
- display->grab_op = META_GRAB_OP_KEYBOARD_RESIZING_E;
+ dev->grab_op->op = META_GRAB_OP_KEYBOARD_RESIZING_E;
handled = TRUE;
break;
}
@@ -2186,12 +2181,12 @@ process_keyboard_resize_grab_op_change (MetaDisplay *display,
{
case XK_Left:
case XK_KP_Left:
- display->grab_op = META_GRAB_OP_KEYBOARD_RESIZING_W;
+ dev->grab_op->op = META_GRAB_OP_KEYBOARD_RESIZING_W;
handled = TRUE;
break;
case XK_Right:
case XK_KP_Right:
- display->grab_op = META_GRAB_OP_KEYBOARD_RESIZING_E;
+ dev->grab_op->op = META_GRAB_OP_KEYBOARD_RESIZING_E;
handled = TRUE;
break;
}
@@ -2202,12 +2197,12 @@ process_keyboard_resize_grab_op_change (MetaDisplay *display,
{
case XK_Up:
case XK_KP_Up:
- display->grab_op = META_GRAB_OP_KEYBOARD_RESIZING_N;
+ dev->grab_op->op = META_GRAB_OP_KEYBOARD_RESIZING_N;
handled = TRUE;
break;
case XK_Down:
case XK_KP_Down:
- display->grab_op = META_GRAB_OP_KEYBOARD_RESIZING_S;
+ dev->grab_op->op = META_GRAB_OP_KEYBOARD_RESIZING_S;
handled = TRUE;
break;
}
@@ -2218,12 +2213,12 @@ process_keyboard_resize_grab_op_change (MetaDisplay *display,
{
case XK_Up:
case XK_KP_Up:
- display->grab_op = META_GRAB_OP_KEYBOARD_RESIZING_N;
+ dev->grab_op->op = META_GRAB_OP_KEYBOARD_RESIZING_N;
handled = TRUE;
break;
case XK_Down:
case XK_KP_Down:
- display->grab_op = META_GRAB_OP_KEYBOARD_RESIZING_S;
+ dev->grab_op->op = META_GRAB_OP_KEYBOARD_RESIZING_S;
handled = TRUE;
break;
}
@@ -2242,7 +2237,7 @@ process_keyboard_resize_grab_op_change (MetaDisplay *display,
if (handled)
{
- meta_window_update_keyboard_resize (window, TRUE);
+ meta_window_update_keyboard_resize (dev, window, TRUE);
return TRUE;
}
@@ -2283,16 +2278,16 @@ process_keyboard_resize_grab (MetaDisplay *display,
* we need to avoid moveresizing to the position of the
* wireframe.
*/
- if (!display->grab_wireframe_active)
- meta_window_move_resize (display->grab_window,
+ if (!dev->grab_op->wireframe_active)
+ meta_window_move_resize (dev->grab_op->window,
dev,
TRUE,
- display->grab_initial_window_pos.x,
- display->grab_initial_window_pos.y,
- display->grab_initial_window_pos.width,
- display->grab_initial_window_pos.height);
+ dev->grab_op->initial_window_pos.x,
+ dev->grab_op->initial_window_pos.y,
+ dev->grab_op->initial_window_pos.width,
+ dev->grab_op->initial_window_pos.height);
else
- display->grab_was_cancelled = TRUE;
+ dev->grab_op->was_cancelled = TRUE;
return FALSE;
}
@@ -2301,10 +2296,10 @@ process_keyboard_resize_grab (MetaDisplay *display,
xdke, keysym))
return TRUE;
- if (display->grab_wireframe_active)
+ if (dev->grab_op->wireframe_active)
{
- width = display->grab_wireframe_rect.width;
- height = display->grab_wireframe_rect.height;
+ width = dev->grab_op->wireframe_rect.width;
+ height = dev->grab_op->wireframe_rect.height;
}
else
{
@@ -2312,7 +2307,7 @@ process_keyboard_resize_grab (MetaDisplay *display,
height = window->rect.height;
}
- gravity = meta_resize_gravity_from_grab_op (display->grab_op);
+ gravity = meta_resize_gravity_from_grab_op (dev->grab_op->op);
smart_snap = (xdke->state & ShiftMask) != 0;
@@ -2475,13 +2470,14 @@ process_keyboard_resize_grab (MetaDisplay *display,
"%dx%d, gravity %s\n",
width, height, meta_gravity_to_string (gravity));
- if (display->grab_wireframe_active)
- old_rect = display->grab_wireframe_rect;
+ if (dev->grab_op->wireframe_active)
+ old_rect = dev->grab_op->wireframe_rect;
else
old_rect = window->rect; /* Don't actually care about x,y */
/* Do any edge resistance/snapping */
meta_window_edge_resistance_for_resize (window,
+ dev,
old_rect.width,
old_rect.height,
&width,
@@ -2491,15 +2487,15 @@ process_keyboard_resize_grab (MetaDisplay *display,
smart_snap,
TRUE);
- if (display->grab_wireframe_active)
+ if (dev->grab_op->wireframe_active)
{
MetaRectangle new_position;
- meta_rectangle_resize_with_gravity (&display->grab_wireframe_rect,
+ meta_rectangle_resize_with_gravity (&dev->grab_op->wireframe_rect,
&new_position,
gravity,
width,
height);
- meta_window_update_wireframe (window,
+ meta_window_update_wireframe (window, dev,
new_position.x,
new_position.y,
new_position.width,
@@ -2518,7 +2514,7 @@ process_keyboard_resize_grab (MetaDisplay *display,
height,
gravity);
}
- meta_window_update_keyboard_resize (window, FALSE);
+ meta_window_update_keyboard_resize (dev, window, FALSE);
}
return handled;
@@ -2526,16 +2522,16 @@ process_keyboard_resize_grab (MetaDisplay *display,
static gboolean
end_keyboard_grab (MetaDisplay *display,
+ MetaDevInfo *dev,
unsigned int keycode)
{
-#warning change end_keyboard_grab prototype? I think no...
#ifdef HAVE_XKB
if (display->xkb_base_event_type > 0)
{
unsigned int primary_modifier;
XkbStateRec state;
- primary_modifier = get_primary_modifier (display, display->grab_mask);
+ primary_modifier = get_primary_modifier (display, dev->grab_op->mask);
XkbGetState (display->xdisplay, XkbUseCoreKbd, &state);
@@ -2545,7 +2541,7 @@ end_keyboard_grab (MetaDisplay *display,
else
#endif
{
- if (keycode_is_primary_modifier (display, keycode, display->grab_mask))
+ if (keycode_is_primary_modifier (display, keycode, dev->grab_op->mask))
return TRUE;
}
@@ -2565,24 +2561,16 @@ process_tab_grab (MetaDisplay *display,
Window prev_xwindow;
MetaWindow *prev_window;
MetaDevInfo *dev;
-#if 0
- int idev;
-
- xdke = (XDeviceKeyEvent *)event;
-
- for (idev = 0; idev < display->devices->keybsUsed; idev++)
- if (display->devices->keyboards[idev].xdev->device_id == xdke->deviceid)
- dev = &display->devices->keyboards[idev];
-#endif
+
dev = meta_devices_find_keyboard_by_id (display, xdke->deviceid);
- if (screen != display->grab_screen)
+ if (screen != dev->grab_op->screen)
return FALSE;
g_return_val_if_fail (screen->tab_popup != NULL, FALSE);
if (xdke->type == display->dev_key_release_type &&
- end_keyboard_grab (display, xdke->keycode))
+ end_keyboard_grab (display, dev, xdke->keycode))
{
/* We're done, move to the new window. */
Window target_xwindow;
@@ -2632,7 +2620,7 @@ process_tab_grab (MetaDisplay *display,
action = display_get_keybinding_action (display,
keysym,
xdke->keycode,
- display->grab_mask);
+ dev->grab_op->mask);
/* Cancel when alt-Escape is pressed during using alt-Tab, and vice
* versa.
@@ -2646,7 +2634,7 @@ process_tab_grab (MetaDisplay *display,
/* CYCLE_* are traditionally Escape-based actions,
* and should cancel traditionally Tab-based ones.
*/
- switch (display->grab_op)
+ switch (dev->grab_op->op)
{
case META_GRAB_OP_KEYBOARD_ESCAPING_NORMAL:
case META_GRAB_OP_KEYBOARD_ESCAPING_DOCK:
@@ -2663,7 +2651,7 @@ process_tab_grab (MetaDisplay *display,
/* SWITCH_* are traditionally Tab-based actions,
* and should cancel traditionally Escape-based ones.
*/
- switch (display->grab_op)
+ switch (dev->grab_op->op)
{
case META_GRAB_OP_KEYBOARD_TABBING_NORMAL:
case META_GRAB_OP_KEYBOARD_TABBING_DOCK:
@@ -2674,7 +2662,7 @@ process_tab_grab (MetaDisplay *display,
* we'd previously raised and unminimized.
*/
meta_stack_set_positions (screen->stack,
- screen->display->grab_old_window_stacking);
+ dev->grab_op->old_window_stacking);
if (prev_window && prev_window->tab_unminimized)
{
meta_window_minimize (prev_window);
@@ -2687,7 +2675,7 @@ process_tab_grab (MetaDisplay *display,
case META_KEYBINDING_ACTION_CYCLE_GROUP_BACKWARD:
case META_KEYBINDING_ACTION_SWITCH_GROUP:
case META_KEYBINDING_ACTION_SWITCH_GROUP_BACKWARD:
- switch (display->grab_op)
+ switch (dev->grab_op->op)
{
case META_GRAB_OP_KEYBOARD_ESCAPING_GROUP:
case META_GRAB_OP_KEYBOARD_TABBING_GROUP:
@@ -2758,7 +2746,7 @@ process_tab_grab (MetaDisplay *display,
MetaWindow *target_window;
meta_stack_set_positions (screen->stack,
- display->grab_old_window_stacking);
+ dev->grab_op->old_window_stacking);
target_xwindow =
(Window) meta_ui_tab_popup_get_selected (screen->tab_popup);
@@ -2788,7 +2776,7 @@ process_tab_grab (MetaDisplay *display,
meta_topic (META_DEBUG_KEYBINDINGS,
"Syncing to old stack positions.\n");
meta_stack_set_positions (screen->stack,
- screen->display->grab_old_window_stacking);
+ dev->grab_op->old_window_stacking);
if (prev_window && prev_window->tab_unminimized)
{
@@ -2809,6 +2797,7 @@ handle_activate_workspace (MetaDisplay *display,
{
int which;
MetaWorkspace *workspace;
+ MetaDevInfo *dev;
which = GPOINTER_TO_INT (binding->handler->data);
@@ -2825,7 +2814,8 @@ handle_activate_workspace (MetaDisplay *display,
if (workspace)
{
- meta_workspace_activate (workspace, xdke->time);
+ dev = meta_devices_find_keyboard_by_id (display, xdke->deviceid);
+ meta_workspace_activate (workspace, dev, xdke->time);
}
else
{
@@ -3213,27 +3203,19 @@ process_workspace_switch_grab (MetaDisplay *display,
KeySym keysym)
{
MetaWorkspace *workspace;
-#if 0
- XDeviceKeyEvent *xdke;
- MetaDevInfo *dev;
- int idev;
-
- if (screen != display->grab_screen)
- return FALSE;
-
- xdke = (XDeviceKeyEvent *)event;
- for (idev = 0; idev < display->devices->keybsUsed; idev++)
- if (xdke->deviceid == display->devices->keyboards[idev].xdev->device_id)
- dev = &display->devices->keyboards[idev];
-#endif
MetaDevInfo *dev;
dev = meta_devices_find_keyboard_by_id (display, xdke->deviceid);
+ if (!dev->grab_op)
+ return FALSE;
+ if (screen != dev->grab_op->screen)
+ return FALSE;
+
g_return_val_if_fail (screen->tab_popup != NULL, FALSE);
if (xdke->type == display->dev_key_release_type &&
- end_keyboard_grab (display, xdke->keycode))
+ end_keyboard_grab (display, dev, xdke->keycode))
{
/* We're done, move to the new workspace. */
MetaWorkspace *target_workspace;
@@ -3287,7 +3269,7 @@ process_workspace_switch_grab (MetaDisplay *display,
action = display_get_keybinding_action (display,
keysym,
xdke->keycode,
- display->grab_mask);
+ dev->grab_op->mask);
switch (action)
{
@@ -3326,7 +3308,7 @@ process_workspace_switch_grab (MetaDisplay *display,
meta_topic (META_DEBUG_KEYBINDINGS,
"Activating target workspace\n");
- meta_workspace_activate (target_workspace, xdke->time);
+ meta_workspace_activate (target_workspace, dev, xdke->time);
return TRUE; /* we already ended the grab */
}
@@ -3859,6 +3841,7 @@ do_handle_move_to_workspace (MetaDisplay *display,
{
int which;
MetaWorkspace *workspace;
+ MetaDevInfo *dev;
which = GPOINTER_TO_INT (binding->handler->data);
@@ -3886,7 +3869,9 @@ do_handle_move_to_workspace (MetaDisplay *display,
"Resetting mouse_mode to FALSE due to "
"do_handle_move_to_workspace() call with flip set.\n");
workspace->screen->display->mouse_mode = FALSE;
+ dev = meta_devices_find_keyboard_by_id (display, xdke->deviceid);
meta_workspace_activate_with_focus (workspace,
+ dev,
window,
xdke->time);
}
@@ -4061,7 +4046,7 @@ handle_workspace_switch (MetaDisplay *display,
meta_display_end_grab_op (display, pairedPtr, xdke->time);
}
- meta_workspace_activate (next, xdke->time);
+ meta_workspace_activate (next, kbdDev, xdke->time);
if (grabbed_before_release)
{