Compare commits
	
		
			4 Commits
		
	
	
		
			3.23.2
			...
			wip/media-
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					9e2fc32395 | ||
| 
						 | 
					53a17185a0 | ||
| 
						 | 
					fa679976e3 | ||
| 
						 | 
					f505c59a9f | 
@@ -1961,9 +1961,6 @@ event_callback (XEvent   *event,
 | 
			
		||||
    {
 | 
			
		||||
    case KeyPress:
 | 
			
		||||
    case KeyRelease:
 | 
			
		||||
      if (display->grab_op == META_GRAB_OP_COMPOSITOR)
 | 
			
		||||
        break;
 | 
			
		||||
 | 
			
		||||
      /* For key events, it's important to enforce single-handling, or
 | 
			
		||||
       * we can get into a confused state. So if a keybinding is
 | 
			
		||||
       * handled (because it's one of our hot-keys, or because we are
 | 
			
		||||
 
 | 
			
		||||
@@ -75,6 +75,8 @@ void     meta_display_process_mapping_event (MetaDisplay *display,
 | 
			
		||||
 | 
			
		||||
gboolean meta_prefs_add_keybinding          (const char           *name,
 | 
			
		||||
                                             GSettings            *settings,
 | 
			
		||||
                                             const char           *setting_key,
 | 
			
		||||
                                             const char           *hardcoded_key,
 | 
			
		||||
                                             MetaKeyBindingAction  action,
 | 
			
		||||
                                             MetaKeyBindingFlags   flags);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -99,12 +99,12 @@ meta_key_binding_get_mask (MetaKeyBinding *binding)
 | 
			
		||||
 * handler functions and have some kind of flag to say they're unbindable.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
static void handle_workspace_switch  (MetaDisplay    *display,
 | 
			
		||||
                                      MetaScreen     *screen,
 | 
			
		||||
                                      MetaWindow     *window,
 | 
			
		||||
                                      XEvent         *event,
 | 
			
		||||
                                      MetaKeyBinding *binding,
 | 
			
		||||
                                      gpointer        dummy);
 | 
			
		||||
static gboolean handle_workspace_switch  (MetaDisplay    *display,
 | 
			
		||||
                                          MetaScreen     *screen,
 | 
			
		||||
                                          MetaWindow     *window,
 | 
			
		||||
                                          XEvent         *event,
 | 
			
		||||
                                          MetaKeyBinding *binding,
 | 
			
		||||
                                          gpointer        dummy);
 | 
			
		||||
 | 
			
		||||
static gboolean process_mouse_move_resize_grab (MetaDisplay *display,
 | 
			
		||||
                                                MetaScreen  *screen,
 | 
			
		||||
@@ -539,6 +539,8 @@ static gboolean
 | 
			
		||||
add_keybinding_internal (MetaDisplay          *display,
 | 
			
		||||
                         const char           *name,
 | 
			
		||||
                         GSettings            *settings,
 | 
			
		||||
                         const char           *setting_key,
 | 
			
		||||
                         const char           *hardcoded_key,
 | 
			
		||||
                         MetaKeyBindingFlags   flags,
 | 
			
		||||
                         MetaKeyBindingAction  action,
 | 
			
		||||
                         MetaKeyHandlerFunc    func,
 | 
			
		||||
@@ -548,7 +550,7 @@ add_keybinding_internal (MetaDisplay          *display,
 | 
			
		||||
{
 | 
			
		||||
  MetaKeyHandler *handler;
 | 
			
		||||
 | 
			
		||||
  if (!meta_prefs_add_keybinding (name, settings, action, flags))
 | 
			
		||||
  if (!meta_prefs_add_keybinding (name, settings, setting_key, hardcoded_key, action, flags))
 | 
			
		||||
    return FALSE;
 | 
			
		||||
 | 
			
		||||
  handler = g_new0 (MetaKeyHandler, 1);
 | 
			
		||||
@@ -567,16 +569,20 @@ add_keybinding_internal (MetaDisplay          *display,
 | 
			
		||||
 | 
			
		||||
static gboolean
 | 
			
		||||
add_builtin_keybinding (MetaDisplay          *display,
 | 
			
		||||
                        const char           *name,
 | 
			
		||||
                        const char           *key,
 | 
			
		||||
                        GSettings            *settings,
 | 
			
		||||
                        MetaKeyBindingFlags   flags,
 | 
			
		||||
                        MetaKeyBindingAction  action,
 | 
			
		||||
                        MetaKeyHandlerFunc    handler,
 | 
			
		||||
                        int                   handler_arg)
 | 
			
		||||
{
 | 
			
		||||
  return add_keybinding_internal (display, name, settings,
 | 
			
		||||
  char *name = g_strdup_printf ("internal-keybinding-%s", key);
 | 
			
		||||
 | 
			
		||||
  return add_keybinding_internal (display, name, settings, key, NULL,
 | 
			
		||||
                                  flags | META_KEY_BINDING_BUILTIN,
 | 
			
		||||
                                  action, handler, handler_arg, NULL, NULL);
 | 
			
		||||
 | 
			
		||||
  g_free (name);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -608,22 +614,74 @@ add_builtin_keybinding (MetaDisplay          *display,
 | 
			
		||||
 */
 | 
			
		||||
gboolean
 | 
			
		||||
meta_display_add_keybinding (MetaDisplay         *display,
 | 
			
		||||
                             const char          *name,
 | 
			
		||||
                             const char          *key,
 | 
			
		||||
                             GSettings           *settings,
 | 
			
		||||
                             MetaKeyBindingFlags  flags,
 | 
			
		||||
                             MetaKeyHandlerFunc   handler,
 | 
			
		||||
                             gpointer             user_data,
 | 
			
		||||
                             GDestroyNotify       free_data)
 | 
			
		||||
{
 | 
			
		||||
  return add_keybinding_internal (display, name, settings, flags,
 | 
			
		||||
                                  META_KEYBINDING_ACTION_NONE,
 | 
			
		||||
  char *name = g_strdup_printf("custom-keybinding-%p-%s", settings, key);
 | 
			
		||||
 | 
			
		||||
  return add_keybinding_internal (display, name, settings, key, NULL,
 | 
			
		||||
                                  flags, META_KEYBINDING_ACTION_NONE,
 | 
			
		||||
                                  handler, 0, user_data, free_data);
 | 
			
		||||
 | 
			
		||||
  g_free (name);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * meta_display_add_grabbed_key:
 | 
			
		||||
 * @display: a #MetaDisplay
 | 
			
		||||
 * @name: the binding's name
 | 
			
		||||
 * @keyval: the key combination that should trigger this keybinding
 | 
			
		||||
 * @flags: flags to specify binding details
 | 
			
		||||
 * @handler: function to run when the keybinding is invoked
 | 
			
		||||
 * @user_data: the data to pass to @handler
 | 
			
		||||
 * @free_data: function to free @user_data
 | 
			
		||||
 *
 | 
			
		||||
 * This function is similar to meta_display_add_keybinding(), except
 | 
			
		||||
 * that the keybinding is hardcoded to @keyval, which should be a GTK
 | 
			
		||||
 * key string combination.
 | 
			
		||||
 */
 | 
			
		||||
gboolean
 | 
			
		||||
meta_display_add_grabbed_key (MetaDisplay         *display,
 | 
			
		||||
                              const char          *name,
 | 
			
		||||
                              const char          *keyval,
 | 
			
		||||
                              MetaKeyBindingFlags  flags,
 | 
			
		||||
                              MetaKeyHandlerFunc   handler,
 | 
			
		||||
                              gpointer             user_data,
 | 
			
		||||
                              GDestroyNotify       free_data)
 | 
			
		||||
{
 | 
			
		||||
  return add_keybinding_internal (display, name, NULL, NULL, keyval,
 | 
			
		||||
                                  flags, META_KEYBINDING_ACTION_NONE,
 | 
			
		||||
                                  handler, 0, user_data, free_data);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * meta_display_remove_grabbed_key:
 | 
			
		||||
 * @display: the #MetaDisplay
 | 
			
		||||
 * @name: the name that was passed to meta_display_add_grabbed_key()
 | 
			
		||||
 *
 | 
			
		||||
 * Undoes the effect of meta_display_add_grabbed_key()
 | 
			
		||||
 */
 | 
			
		||||
gboolean
 | 
			
		||||
meta_display_remove_grabbed_key (MetaDisplay *display,
 | 
			
		||||
                                 const char  *name)
 | 
			
		||||
{
 | 
			
		||||
  if (!meta_prefs_remove_keybinding (name))
 | 
			
		||||
    return FALSE;
 | 
			
		||||
 | 
			
		||||
  g_hash_table_remove (key_handlers, name);
 | 
			
		||||
 | 
			
		||||
  return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * meta_display_remove_keybinding:
 | 
			
		||||
 * @display: the #MetaDisplay
 | 
			
		||||
 * @name: name of the keybinding to remove
 | 
			
		||||
 * @settings: (allow-none): the #GSettings object on which the keybinding is registered
 | 
			
		||||
 *
 | 
			
		||||
 * Remove keybinding @name; the function will fail if @name is not a known
 | 
			
		||||
 * keybinding or has not been added with meta_display_add_keybinding().
 | 
			
		||||
@@ -633,14 +691,28 @@ meta_display_add_keybinding (MetaDisplay         *display,
 | 
			
		||||
 */
 | 
			
		||||
gboolean
 | 
			
		||||
meta_display_remove_keybinding (MetaDisplay *display,
 | 
			
		||||
                                const char  *name)
 | 
			
		||||
                                const char  *key,
 | 
			
		||||
                                GSettings   *settings)
 | 
			
		||||
{
 | 
			
		||||
  gboolean retval;
 | 
			
		||||
  char *name;
 | 
			
		||||
 | 
			
		||||
  if (settings)
 | 
			
		||||
    name = g_strdup_printf ("custom-keybinding-%p-%s", settings, key);
 | 
			
		||||
  else
 | 
			
		||||
    name = g_strdup (key);
 | 
			
		||||
 | 
			
		||||
  retval = FALSE;
 | 
			
		||||
  if (!meta_prefs_remove_keybinding (name))
 | 
			
		||||
    return FALSE;
 | 
			
		||||
    goto out;
 | 
			
		||||
 | 
			
		||||
  g_hash_table_remove (key_handlers, name);
 | 
			
		||||
 | 
			
		||||
  return TRUE;
 | 
			
		||||
  retval = TRUE;
 | 
			
		||||
 | 
			
		||||
 out:
 | 
			
		||||
  g_free (name);
 | 
			
		||||
  return retval;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -1344,7 +1416,7 @@ primary_modifier_still_pressed (MetaDisplay *display,
 | 
			
		||||
    return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
static gboolean
 | 
			
		||||
invoke_handler (MetaDisplay    *display,
 | 
			
		||||
                MetaScreen     *screen,
 | 
			
		||||
                MetaKeyHandler *handler,
 | 
			
		||||
@@ -1354,22 +1426,22 @@ invoke_handler (MetaDisplay    *display,
 | 
			
		||||
 | 
			
		||||
{
 | 
			
		||||
  if (handler->func)
 | 
			
		||||
    (* handler->func) (display, screen,
 | 
			
		||||
                       handler->flags & META_KEY_BINDING_PER_WINDOW ?
 | 
			
		||||
                           window : NULL,
 | 
			
		||||
                       event,
 | 
			
		||||
                       binding,
 | 
			
		||||
                       handler->user_data);
 | 
			
		||||
    return (* handler->func) (display, screen,
 | 
			
		||||
                              handler->flags & META_KEY_BINDING_PER_WINDOW ?
 | 
			
		||||
                              window : NULL,
 | 
			
		||||
                              event,
 | 
			
		||||
                              binding,
 | 
			
		||||
                              handler->user_data);
 | 
			
		||||
  else
 | 
			
		||||
    (* handler->default_func) (display, screen,
 | 
			
		||||
                               handler->flags & META_KEY_BINDING_PER_WINDOW ?
 | 
			
		||||
                                   window: NULL,
 | 
			
		||||
                               event,
 | 
			
		||||
                               binding,
 | 
			
		||||
                               NULL);
 | 
			
		||||
    return (* handler->default_func) (display, screen,
 | 
			
		||||
                                      handler->flags & META_KEY_BINDING_PER_WINDOW ?
 | 
			
		||||
                                      window: NULL,
 | 
			
		||||
                                      event,
 | 
			
		||||
                                      binding,
 | 
			
		||||
                                      NULL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
static gboolean
 | 
			
		||||
invoke_handler_by_name (MetaDisplay    *display,
 | 
			
		||||
                        MetaScreen     *screen,
 | 
			
		||||
                        const char     *handler_name,
 | 
			
		||||
@@ -1380,7 +1452,8 @@ invoke_handler_by_name (MetaDisplay    *display,
 | 
			
		||||
 | 
			
		||||
  handler = HANDLER (handler_name);
 | 
			
		||||
  if (handler)
 | 
			
		||||
    invoke_handler (display, screen, handler, window, event, NULL);
 | 
			
		||||
    return invoke_handler (display, screen, handler, window, event, NULL);
 | 
			
		||||
  return FALSE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* now called from only one place, may be worth merging */
 | 
			
		||||
@@ -1415,6 +1488,10 @@ process_event (MetaKeyBinding       *bindings,
 | 
			
		||||
           bindings[i].mask))
 | 
			
		||||
        continue;
 | 
			
		||||
 | 
			
		||||
      if (display->grab_op != META_GRAB_OP_NONE &&
 | 
			
		||||
          (handler->flags & META_KEY_BINDING_HANDLE_WHEN_GRABBED) == 0)
 | 
			
		||||
        continue;
 | 
			
		||||
 | 
			
		||||
      /*
 | 
			
		||||
       * window must be non-NULL for on_window to be true,
 | 
			
		||||
       * and so also window must be non-NULL if we get here and
 | 
			
		||||
@@ -1439,9 +1516,7 @@ process_event (MetaKeyBinding       *bindings,
 | 
			
		||||
       */
 | 
			
		||||
      display->allow_terminal_deactivation = TRUE;
 | 
			
		||||
 | 
			
		||||
      invoke_handler (display, screen, handler, window, event, &bindings[i]);
 | 
			
		||||
 | 
			
		||||
      return TRUE;
 | 
			
		||||
      return invoke_handler (display, screen, handler, window, event, &bindings[i]);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  meta_topic (META_DEBUG_KEYBINDINGS,
 | 
			
		||||
@@ -1664,6 +1739,11 @@ meta_display_process_key_event (MetaDisplay *display,
 | 
			
		||||
                          "Processing event for keyboard workspace switching\n");
 | 
			
		||||
              keep_grab = process_workspace_switch_grab (display, screen, event, keysym);
 | 
			
		||||
              break;
 | 
			
		||||
 | 
			
		||||
            case META_GRAB_OP_COMPOSITOR:
 | 
			
		||||
              /* Compositor grabs don't go through meta_display_begin_grab_op(),
 | 
			
		||||
                 so all_keys_grabbed is always false for them */
 | 
			
		||||
              g_assert_not_reached ();
 | 
			
		||||
 
 | 
			
		||||
            default:
 | 
			
		||||
              break;
 | 
			
		||||
@@ -2550,7 +2630,7 @@ process_tab_grab (MetaDisplay *display,
 | 
			
		||||
  return key_used;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
static gboolean
 | 
			
		||||
handle_switch_to_workspace (MetaDisplay    *display,
 | 
			
		||||
                           MetaScreen     *screen,
 | 
			
		||||
                           MetaWindow     *event_window,
 | 
			
		||||
@@ -2575,7 +2655,7 @@ handle_switch_to_workspace (MetaDisplay    *display,
 | 
			
		||||
       */
 | 
			
		||||
      handle_workspace_switch (display, screen, event_window, event, binding,
 | 
			
		||||
                               dummy);
 | 
			
		||||
      return;
 | 
			
		||||
      return TRUE;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  workspace = meta_screen_get_workspace_by_index (screen, which);
 | 
			
		||||
@@ -2588,10 +2668,12 @@ handle_switch_to_workspace (MetaDisplay    *display,
 | 
			
		||||
    {
 | 
			
		||||
      /* We could offer to create it I suppose */
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
static gboolean
 | 
			
		||||
handle_maximize_vertically (MetaDisplay    *display,
 | 
			
		||||
                      MetaScreen     *screen,
 | 
			
		||||
                      MetaWindow     *window,
 | 
			
		||||
@@ -2606,9 +2688,11 @@ handle_maximize_vertically (MetaDisplay    *display,
 | 
			
		||||
      else
 | 
			
		||||
        meta_window_maximize (window, META_MAXIMIZE_VERTICAL);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
static gboolean
 | 
			
		||||
handle_maximize_horizontally (MetaDisplay    *display,
 | 
			
		||||
                       MetaScreen     *screen,
 | 
			
		||||
                       MetaWindow     *window,
 | 
			
		||||
@@ -2623,6 +2707,8 @@ handle_maximize_horizontally (MetaDisplay    *display,
 | 
			
		||||
      else
 | 
			
		||||
        meta_window_maximize (window, META_MAXIMIZE_HORIZONTAL);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Move a window to a corner; to_bottom/to_right are FALSE for the
 | 
			
		||||
@@ -2672,7 +2758,7 @@ handle_move_to_corner_backend (MetaDisplay    *display,
 | 
			
		||||
                          new_y);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
static gboolean
 | 
			
		||||
handle_move_to_corner_nw  (MetaDisplay    *display,
 | 
			
		||||
                           MetaScreen     *screen,
 | 
			
		||||
                           MetaWindow     *window,
 | 
			
		||||
@@ -2681,9 +2767,10 @@ handle_move_to_corner_nw  (MetaDisplay    *display,
 | 
			
		||||
                           gpointer        dummy)
 | 
			
		||||
{
 | 
			
		||||
  handle_move_to_corner_backend (display, screen, window, TRUE, TRUE, FALSE, FALSE, dummy);
 | 
			
		||||
  return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
static gboolean
 | 
			
		||||
handle_move_to_corner_ne  (MetaDisplay    *display,
 | 
			
		||||
                           MetaScreen     *screen,
 | 
			
		||||
                           MetaWindow     *window,
 | 
			
		||||
@@ -2692,9 +2779,10 @@ handle_move_to_corner_ne  (MetaDisplay    *display,
 | 
			
		||||
                           gpointer        dummy)
 | 
			
		||||
{
 | 
			
		||||
  handle_move_to_corner_backend (display, screen, window, TRUE, TRUE, TRUE, FALSE, dummy);
 | 
			
		||||
  return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
static gboolean
 | 
			
		||||
handle_move_to_corner_sw  (MetaDisplay    *display,
 | 
			
		||||
                           MetaScreen     *screen,
 | 
			
		||||
                           MetaWindow     *window,
 | 
			
		||||
@@ -2703,9 +2791,10 @@ handle_move_to_corner_sw  (MetaDisplay    *display,
 | 
			
		||||
                           gpointer        dummy)
 | 
			
		||||
{
 | 
			
		||||
  handle_move_to_corner_backend (display, screen, window, TRUE, TRUE, FALSE, TRUE, dummy);
 | 
			
		||||
  return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
static gboolean
 | 
			
		||||
handle_move_to_corner_se  (MetaDisplay    *display,
 | 
			
		||||
                           MetaScreen     *screen,
 | 
			
		||||
                           MetaWindow     *window,
 | 
			
		||||
@@ -2714,9 +2803,10 @@ handle_move_to_corner_se  (MetaDisplay    *display,
 | 
			
		||||
                           gpointer        dummy)
 | 
			
		||||
{
 | 
			
		||||
  handle_move_to_corner_backend (display, screen, window, TRUE, TRUE, TRUE, TRUE, dummy);
 | 
			
		||||
  return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
static gboolean
 | 
			
		||||
handle_move_to_side_n     (MetaDisplay    *display,
 | 
			
		||||
                           MetaScreen     *screen,
 | 
			
		||||
                           MetaWindow     *window,
 | 
			
		||||
@@ -2725,9 +2815,10 @@ handle_move_to_side_n     (MetaDisplay    *display,
 | 
			
		||||
                           gpointer        dummy)
 | 
			
		||||
{
 | 
			
		||||
  handle_move_to_corner_backend (display, screen, window, FALSE, TRUE, FALSE, FALSE, dummy);
 | 
			
		||||
  return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
static gboolean
 | 
			
		||||
handle_move_to_side_s     (MetaDisplay    *display,
 | 
			
		||||
                           MetaScreen     *screen,
 | 
			
		||||
                           MetaWindow     *window,
 | 
			
		||||
@@ -2736,9 +2827,10 @@ handle_move_to_side_s     (MetaDisplay    *display,
 | 
			
		||||
                           gpointer        dummy)
 | 
			
		||||
{
 | 
			
		||||
  handle_move_to_corner_backend (display, screen, window, FALSE, TRUE, FALSE, TRUE, dummy);
 | 
			
		||||
  return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
static gboolean
 | 
			
		||||
handle_move_to_side_e     (MetaDisplay    *display,
 | 
			
		||||
                           MetaScreen     *screen,
 | 
			
		||||
                           MetaWindow     *window,
 | 
			
		||||
@@ -2747,9 +2839,10 @@ handle_move_to_side_e     (MetaDisplay    *display,
 | 
			
		||||
                           gpointer        dummy)
 | 
			
		||||
{
 | 
			
		||||
  handle_move_to_corner_backend (display, screen, window, TRUE, FALSE, TRUE, FALSE, dummy);
 | 
			
		||||
  return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
static gboolean
 | 
			
		||||
handle_move_to_side_w     (MetaDisplay    *display,
 | 
			
		||||
                           MetaScreen     *screen,
 | 
			
		||||
                           MetaWindow     *window,
 | 
			
		||||
@@ -2758,9 +2851,10 @@ handle_move_to_side_w     (MetaDisplay    *display,
 | 
			
		||||
                           gpointer        dummy)
 | 
			
		||||
{
 | 
			
		||||
  handle_move_to_corner_backend (display, screen, window, TRUE, FALSE, FALSE, FALSE, dummy);
 | 
			
		||||
  return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
static gboolean
 | 
			
		||||
handle_move_to_center  (MetaDisplay    *display,
 | 
			
		||||
                        MetaScreen     *screen,
 | 
			
		||||
                        MetaWindow     *window,
 | 
			
		||||
@@ -2786,6 +2880,8 @@ handle_move_to_center  (MetaDisplay    *display,
 | 
			
		||||
          work_area.y + (work_area.height+frame_height-outer.height)/2,
 | 
			
		||||
          window->rect.width,
 | 
			
		||||
          window->rect.height);
 | 
			
		||||
 | 
			
		||||
  return FALSE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static gboolean
 | 
			
		||||
@@ -2902,7 +2998,7 @@ process_workspace_switch_grab (MetaDisplay *display,
 | 
			
		||||
  return FALSE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
static gboolean
 | 
			
		||||
handle_show_desktop (MetaDisplay    *display,
 | 
			
		||||
                       MetaScreen     *screen,
 | 
			
		||||
                       MetaWindow     *window,
 | 
			
		||||
@@ -2919,9 +3015,11 @@ handle_show_desktop (MetaDisplay    *display,
 | 
			
		||||
    }
 | 
			
		||||
  else
 | 
			
		||||
    meta_screen_show_desktop (screen, event->xkey.time);
 | 
			
		||||
 | 
			
		||||
  return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
static gboolean
 | 
			
		||||
handle_panel (MetaDisplay    *display,
 | 
			
		||||
                         MetaScreen     *screen,
 | 
			
		||||
                         MetaWindow     *window,
 | 
			
		||||
@@ -2944,7 +3042,7 @@ handle_panel (MetaDisplay    *display,
 | 
			
		||||
      action_atom = display->atom__GNOME_PANEL_ACTION_RUN_DIALOG;
 | 
			
		||||
      break;
 | 
			
		||||
    default:
 | 
			
		||||
      return;
 | 
			
		||||
      return FALSE;
 | 
			
		||||
    }
 | 
			
		||||
   
 | 
			
		||||
  ev.type = ClientMessage;
 | 
			
		||||
@@ -2971,9 +3069,11 @@ handle_panel (MetaDisplay    *display,
 | 
			
		||||
	      (XEvent*) &ev);
 | 
			
		||||
 | 
			
		||||
  meta_error_trap_pop (display);
 | 
			
		||||
 | 
			
		||||
  return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
static gboolean
 | 
			
		||||
handle_activate_window_menu (MetaDisplay    *display,
 | 
			
		||||
                      MetaScreen     *screen,
 | 
			
		||||
                      MetaWindow     *event_window,
 | 
			
		||||
@@ -2996,6 +3096,8 @@ handle_activate_window_menu (MetaDisplay    *display,
 | 
			
		||||
                             0,
 | 
			
		||||
                             event->xkey.time);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static MetaGrabOp
 | 
			
		||||
@@ -3142,7 +3244,7 @@ do_choose_window (MetaDisplay    *display,
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
static gboolean
 | 
			
		||||
handle_switch (MetaDisplay    *display,
 | 
			
		||||
                    MetaScreen     *screen,
 | 
			
		||||
                    MetaWindow     *event_window,
 | 
			
		||||
@@ -3154,9 +3256,10 @@ handle_switch (MetaDisplay    *display,
 | 
			
		||||
 | 
			
		||||
  do_choose_window (display, screen, event_window, event, binding,
 | 
			
		||||
                    backwards, TRUE);
 | 
			
		||||
  return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
static gboolean
 | 
			
		||||
handle_cycle (MetaDisplay    *display,
 | 
			
		||||
                    MetaScreen     *screen,
 | 
			
		||||
                    MetaWindow     *event_window,
 | 
			
		||||
@@ -3168,9 +3271,10 @@ handle_cycle (MetaDisplay    *display,
 | 
			
		||||
 | 
			
		||||
  do_choose_window (display, screen, event_window, event, binding,
 | 
			
		||||
                    backwards, FALSE);
 | 
			
		||||
  return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
static gboolean
 | 
			
		||||
handle_tab_popup_select (MetaDisplay    *display,
 | 
			
		||||
                         MetaScreen     *screen,
 | 
			
		||||
                         MetaWindow     *window,
 | 
			
		||||
@@ -3179,9 +3283,10 @@ handle_tab_popup_select (MetaDisplay    *display,
 | 
			
		||||
                         gpointer        dummy)
 | 
			
		||||
{
 | 
			
		||||
  /* Stub for custom handlers; no default implementation */
 | 
			
		||||
  return FALSE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
static gboolean
 | 
			
		||||
handle_tab_popup_cancel (MetaDisplay    *display,
 | 
			
		||||
                         MetaScreen     *screen,
 | 
			
		||||
                         MetaWindow     *window,
 | 
			
		||||
@@ -3190,9 +3295,10 @@ handle_tab_popup_cancel (MetaDisplay    *display,
 | 
			
		||||
                         gpointer        dummy)
 | 
			
		||||
{
 | 
			
		||||
  /* Stub for custom handlers; no default implementation */
 | 
			
		||||
  return FALSE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
static gboolean
 | 
			
		||||
handle_toggle_fullscreen  (MetaDisplay    *display,
 | 
			
		||||
                           MetaScreen     *screen,
 | 
			
		||||
                           MetaWindow     *window,
 | 
			
		||||
@@ -3204,9 +3310,11 @@ handle_toggle_fullscreen  (MetaDisplay    *display,
 | 
			
		||||
    meta_window_unmake_fullscreen (window);
 | 
			
		||||
  else if (window->has_fullscreen_func)
 | 
			
		||||
    meta_window_make_fullscreen (window);
 | 
			
		||||
 | 
			
		||||
  return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
static gboolean
 | 
			
		||||
handle_toggle_above       (MetaDisplay    *display,
 | 
			
		||||
                           MetaScreen     *screen,
 | 
			
		||||
                           MetaWindow     *window,
 | 
			
		||||
@@ -3218,9 +3326,11 @@ handle_toggle_above       (MetaDisplay    *display,
 | 
			
		||||
    meta_window_unmake_above (window);
 | 
			
		||||
  else
 | 
			
		||||
    meta_window_make_above (window);
 | 
			
		||||
 | 
			
		||||
  return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
static gboolean
 | 
			
		||||
handle_toggle_tiled (MetaDisplay    *display,
 | 
			
		||||
                     MetaScreen     *screen,
 | 
			
		||||
                     MetaWindow     *window,
 | 
			
		||||
@@ -3258,9 +3368,11 @@ handle_toggle_tiled (MetaDisplay    *display,
 | 
			
		||||
      window->maximized_horizontally = FALSE;
 | 
			
		||||
      meta_window_tile (window);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
static gboolean
 | 
			
		||||
handle_toggle_maximized    (MetaDisplay    *display,
 | 
			
		||||
                           MetaScreen     *screen,
 | 
			
		||||
                           MetaWindow     *window,
 | 
			
		||||
@@ -3276,9 +3388,11 @@ handle_toggle_maximized    (MetaDisplay    *display,
 | 
			
		||||
    meta_window_maximize (window,
 | 
			
		||||
                          META_MAXIMIZE_HORIZONTAL |
 | 
			
		||||
                          META_MAXIMIZE_VERTICAL);
 | 
			
		||||
 | 
			
		||||
  return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
static gboolean
 | 
			
		||||
handle_maximize           (MetaDisplay    *display,
 | 
			
		||||
                           MetaScreen     *screen,
 | 
			
		||||
                           MetaWindow     *window,
 | 
			
		||||
@@ -3290,9 +3404,11 @@ handle_maximize           (MetaDisplay    *display,
 | 
			
		||||
    meta_window_maximize (window,
 | 
			
		||||
                          META_MAXIMIZE_HORIZONTAL |
 | 
			
		||||
                          META_MAXIMIZE_VERTICAL);
 | 
			
		||||
 | 
			
		||||
  return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
static gboolean
 | 
			
		||||
handle_unmaximize         (MetaDisplay    *display,
 | 
			
		||||
                           MetaScreen     *screen,
 | 
			
		||||
                           MetaWindow     *window,
 | 
			
		||||
@@ -3304,9 +3420,11 @@ handle_unmaximize         (MetaDisplay    *display,
 | 
			
		||||
    meta_window_unmaximize (window,
 | 
			
		||||
                            META_MAXIMIZE_HORIZONTAL |
 | 
			
		||||
                            META_MAXIMIZE_VERTICAL);
 | 
			
		||||
 | 
			
		||||
  return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
static gboolean
 | 
			
		||||
handle_toggle_shaded      (MetaDisplay    *display,
 | 
			
		||||
                           MetaScreen     *screen,
 | 
			
		||||
                           MetaWindow     *window,
 | 
			
		||||
@@ -3318,9 +3436,11 @@ handle_toggle_shaded      (MetaDisplay    *display,
 | 
			
		||||
    meta_window_unshade (window, event->xkey.time);
 | 
			
		||||
  else if (window->has_shade_func)
 | 
			
		||||
    meta_window_shade (window, event->xkey.time);
 | 
			
		||||
 | 
			
		||||
  return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
static gboolean
 | 
			
		||||
handle_close              (MetaDisplay    *display,
 | 
			
		||||
                           MetaScreen     *screen,
 | 
			
		||||
                           MetaWindow     *window,
 | 
			
		||||
@@ -3330,9 +3450,11 @@ handle_close              (MetaDisplay    *display,
 | 
			
		||||
{
 | 
			
		||||
  if (window->has_close_func)
 | 
			
		||||
    meta_window_delete (window, event->xkey.time);
 | 
			
		||||
 | 
			
		||||
  return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
static gboolean
 | 
			
		||||
handle_minimize        (MetaDisplay    *display,
 | 
			
		||||
                        MetaScreen     *screen,
 | 
			
		||||
                        MetaWindow     *window,
 | 
			
		||||
@@ -3342,9 +3464,11 @@ handle_minimize        (MetaDisplay    *display,
 | 
			
		||||
{
 | 
			
		||||
  if (window->has_minimize_func)
 | 
			
		||||
    meta_window_minimize (window);
 | 
			
		||||
 | 
			
		||||
  return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
static gboolean
 | 
			
		||||
handle_begin_move         (MetaDisplay    *display,
 | 
			
		||||
                           MetaScreen     *screen,
 | 
			
		||||
                           MetaWindow     *window,
 | 
			
		||||
@@ -3359,9 +3483,11 @@ handle_begin_move         (MetaDisplay    *display,
 | 
			
		||||
                                 FALSE,
 | 
			
		||||
                                 event->xkey.time);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
static gboolean
 | 
			
		||||
handle_begin_resize       (MetaDisplay    *display,
 | 
			
		||||
                           MetaScreen     *screen,
 | 
			
		||||
                           MetaWindow     *window,
 | 
			
		||||
@@ -3376,9 +3502,11 @@ handle_begin_resize       (MetaDisplay    *display,
 | 
			
		||||
                                 FALSE,
 | 
			
		||||
                                 event->xkey.time);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
static gboolean
 | 
			
		||||
handle_toggle_on_all_workspaces (MetaDisplay    *display,
 | 
			
		||||
                           MetaScreen     *screen,
 | 
			
		||||
                           MetaWindow     *window,
 | 
			
		||||
@@ -3390,13 +3518,15 @@ handle_toggle_on_all_workspaces (MetaDisplay    *display,
 | 
			
		||||
    meta_window_unstick (window);
 | 
			
		||||
  else
 | 
			
		||||
    meta_window_stick (window);
 | 
			
		||||
 | 
			
		||||
  return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
static gboolean
 | 
			
		||||
handle_move_to_workspace  (MetaDisplay    *display,
 | 
			
		||||
                              MetaScreen     *screen,
 | 
			
		||||
                              MetaWindow     *window,
 | 
			
		||||
                              XEvent         *event,
 | 
			
		||||
                           MetaScreen     *screen,
 | 
			
		||||
                           MetaWindow     *window,
 | 
			
		||||
                           XEvent         *event,
 | 
			
		||||
                           MetaKeyBinding *binding,
 | 
			
		||||
                           gpointer        dummy)
 | 
			
		||||
{
 | 
			
		||||
@@ -3413,11 +3543,11 @@ handle_move_to_workspace  (MetaDisplay    *display,
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  if (window->always_sticky)
 | 
			
		||||
    return;
 | 
			
		||||
  
 | 
			
		||||
    return FALSE;
 | 
			
		||||
 | 
			
		||||
  workspace = NULL;
 | 
			
		||||
  if (flip)
 | 
			
		||||
    {      
 | 
			
		||||
    {
 | 
			
		||||
      workspace = meta_workspace_get_neighbor (screen->active_workspace,
 | 
			
		||||
                                               which);
 | 
			
		||||
    }
 | 
			
		||||
@@ -3425,7 +3555,7 @@ handle_move_to_workspace  (MetaDisplay    *display,
 | 
			
		||||
    {
 | 
			
		||||
      workspace = meta_screen_get_workspace_by_index (screen, which);
 | 
			
		||||
    }
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  if (workspace)
 | 
			
		||||
    {
 | 
			
		||||
      /* Activate second, so the window is never unmapped */
 | 
			
		||||
@@ -3444,10 +3574,12 @@ handle_move_to_workspace  (MetaDisplay    *display,
 | 
			
		||||
  else
 | 
			
		||||
    {
 | 
			
		||||
      /* We could offer to create it I suppose */
 | 
			
		||||
    }  
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void 
 | 
			
		||||
static gboolean
 | 
			
		||||
handle_raise_or_lower (MetaDisplay    *display,
 | 
			
		||||
                       MetaScreen     *screen,
 | 
			
		||||
		       MetaWindow     *window,
 | 
			
		||||
@@ -3463,7 +3595,7 @@ handle_raise_or_lower (MetaDisplay    *display,
 | 
			
		||||
  if (meta_stack_get_top (window->screen->stack) == window)
 | 
			
		||||
    {
 | 
			
		||||
      meta_window_lower (window);
 | 
			
		||||
      return;
 | 
			
		||||
      return TRUE;
 | 
			
		||||
    }
 | 
			
		||||
      
 | 
			
		||||
  /* else check if windows in same layer are intersecting it */
 | 
			
		||||
@@ -3483,7 +3615,7 @@ handle_raise_or_lower (MetaDisplay    *display,
 | 
			
		||||
          if (meta_rectangle_intersect (&win_rect, &above_rect, &tmp))
 | 
			
		||||
            {
 | 
			
		||||
              meta_window_raise (window);
 | 
			
		||||
              return;
 | 
			
		||||
              return TRUE;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
	  
 | 
			
		||||
@@ -3492,9 +3624,10 @@ handle_raise_or_lower (MetaDisplay    *display,
 | 
			
		||||
 | 
			
		||||
  /* window is not obscured */
 | 
			
		||||
  meta_window_lower (window);
 | 
			
		||||
  return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
static gboolean
 | 
			
		||||
handle_raise (MetaDisplay    *display,
 | 
			
		||||
              MetaScreen     *screen,
 | 
			
		||||
              MetaWindow     *window,
 | 
			
		||||
@@ -3503,9 +3636,11 @@ handle_raise (MetaDisplay    *display,
 | 
			
		||||
              gpointer        dummy)
 | 
			
		||||
{
 | 
			
		||||
  meta_window_raise (window);
 | 
			
		||||
 | 
			
		||||
  return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
static gboolean
 | 
			
		||||
handle_lower (MetaDisplay    *display,
 | 
			
		||||
              MetaScreen     *screen,
 | 
			
		||||
              MetaWindow     *window,
 | 
			
		||||
@@ -3514,9 +3649,11 @@ handle_lower (MetaDisplay    *display,
 | 
			
		||||
              gpointer        dummy)
 | 
			
		||||
{
 | 
			
		||||
  meta_window_lower (window);
 | 
			
		||||
 | 
			
		||||
  return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
static gboolean
 | 
			
		||||
handle_workspace_switch  (MetaDisplay    *display,
 | 
			
		||||
                          MetaScreen     *screen,
 | 
			
		||||
                          MetaWindow     *window,
 | 
			
		||||
@@ -3547,7 +3684,7 @@ handle_workspace_switch  (MetaDisplay    *display,
 | 
			
		||||
                                   grab_mask,
 | 
			
		||||
                                   event->xkey.time,
 | 
			
		||||
                                   0, 0))
 | 
			
		||||
    return;
 | 
			
		||||
    return FALSE;
 | 
			
		||||
 | 
			
		||||
  next = meta_workspace_get_neighbor (screen->active_workspace, motion);
 | 
			
		||||
  g_assert (next); 
 | 
			
		||||
@@ -3570,17 +3707,21 @@ handle_workspace_switch  (MetaDisplay    *display,
 | 
			
		||||
 | 
			
		||||
  if (grabbed_before_release && !meta_prefs_get_no_tab_popup ())
 | 
			
		||||
    meta_screen_workspace_popup_create (screen, next);
 | 
			
		||||
 | 
			
		||||
  return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
static gboolean
 | 
			
		||||
handle_set_spew_mark (MetaDisplay    *display,
 | 
			
		||||
                  MetaScreen     *screen,
 | 
			
		||||
                  MetaWindow     *window,
 | 
			
		||||
                  XEvent         *event,
 | 
			
		||||
                      MetaScreen     *screen,
 | 
			
		||||
                      MetaWindow     *window,
 | 
			
		||||
                      XEvent         *event,
 | 
			
		||||
                      MetaKeyBinding *binding,
 | 
			
		||||
                      gpointer        dummy)
 | 
			
		||||
{
 | 
			
		||||
  meta_verbose ("-- MARK MARK MARK MARK --\n");
 | 
			
		||||
 | 
			
		||||
  return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
@@ -3726,28 +3867,28 @@ init_builtin_key_bindings (MetaDisplay *display)
 | 
			
		||||
  add_builtin_keybinding (display,
 | 
			
		||||
                          "switch-to-workspace-left",
 | 
			
		||||
                          common_keybindings,
 | 
			
		||||
                          META_KEY_BINDING_NONE,
 | 
			
		||||
                          META_KEY_BINDING_HANDLE_WHEN_GRABBED,
 | 
			
		||||
                          META_KEYBINDING_ACTION_WORKSPACE_LEFT,
 | 
			
		||||
                          handle_switch_to_workspace, META_MOTION_LEFT);
 | 
			
		||||
 | 
			
		||||
  add_builtin_keybinding (display,
 | 
			
		||||
                          "switch-to-workspace-right",
 | 
			
		||||
                          common_keybindings,
 | 
			
		||||
                          META_KEY_BINDING_NONE,
 | 
			
		||||
                          META_KEY_BINDING_HANDLE_WHEN_GRABBED,
 | 
			
		||||
                          META_KEYBINDING_ACTION_WORKSPACE_RIGHT,
 | 
			
		||||
                          handle_switch_to_workspace, META_MOTION_RIGHT);
 | 
			
		||||
 | 
			
		||||
  add_builtin_keybinding (display,
 | 
			
		||||
                          "switch-to-workspace-up",
 | 
			
		||||
                          common_keybindings,
 | 
			
		||||
                          META_KEY_BINDING_NONE,
 | 
			
		||||
                          META_KEY_BINDING_HANDLE_WHEN_GRABBED,
 | 
			
		||||
                          META_KEYBINDING_ACTION_WORKSPACE_UP,
 | 
			
		||||
                          handle_switch_to_workspace, META_MOTION_UP);
 | 
			
		||||
 | 
			
		||||
  add_builtin_keybinding (display,
 | 
			
		||||
                          "switch-to-workspace-down",
 | 
			
		||||
                          common_keybindings,
 | 
			
		||||
                          META_KEY_BINDING_NONE,
 | 
			
		||||
                          META_KEY_BINDING_HANDLE_WHEN_GRABBED,
 | 
			
		||||
                          META_KEYBINDING_ACTION_WORKSPACE_DOWN,
 | 
			
		||||
                          handle_switch_to_workspace, META_MOTION_DOWN);
 | 
			
		||||
 | 
			
		||||
@@ -3793,14 +3934,14 @@ init_builtin_key_bindings (MetaDisplay *display)
 | 
			
		||||
  add_builtin_keybinding (display,
 | 
			
		||||
                          "switch-panels",
 | 
			
		||||
                          common_keybindings,
 | 
			
		||||
                          META_KEY_BINDING_REVERSES,
 | 
			
		||||
                          META_KEY_BINDING_REVERSES | META_KEY_BINDING_HANDLE_WHEN_GRABBED,
 | 
			
		||||
                          META_KEYBINDING_ACTION_SWITCH_PANELS,
 | 
			
		||||
                          handle_switch, META_TAB_LIST_DOCKS);
 | 
			
		||||
 | 
			
		||||
  add_builtin_keybinding (display,
 | 
			
		||||
                          "switch-panels-backward",
 | 
			
		||||
                          common_keybindings,
 | 
			
		||||
                          REVERSES_AND_REVERSED,
 | 
			
		||||
                          REVERSES_AND_REVERSED | META_KEY_BINDING_HANDLE_WHEN_GRABBED,
 | 
			
		||||
                          META_KEYBINDING_ACTION_SWITCH_PANELS_BACKWARD,
 | 
			
		||||
                          handle_switch, META_TAB_LIST_DOCKS);
 | 
			
		||||
 | 
			
		||||
@@ -3878,14 +4019,14 @@ init_builtin_key_bindings (MetaDisplay *display)
 | 
			
		||||
  add_builtin_keybinding (display,
 | 
			
		||||
                          "panel-main-menu",
 | 
			
		||||
                          common_keybindings,
 | 
			
		||||
                          META_KEY_BINDING_NONE,
 | 
			
		||||
                          META_KEY_BINDING_HANDLE_WHEN_GRABBED,
 | 
			
		||||
                          META_KEYBINDING_ACTION_PANEL_MAIN_MENU,
 | 
			
		||||
                          handle_panel, META_KEYBINDING_ACTION_PANEL_MAIN_MENU);
 | 
			
		||||
 | 
			
		||||
  add_builtin_keybinding (display,
 | 
			
		||||
                          "panel-run-dialog",
 | 
			
		||||
                          common_keybindings,
 | 
			
		||||
                          META_KEY_BINDING_NONE,
 | 
			
		||||
                          META_KEY_BINDING_HANDLE_WHEN_GRABBED,
 | 
			
		||||
                          META_KEYBINDING_ACTION_PANEL_RUN_DIALOG,
 | 
			
		||||
                          handle_panel, META_KEYBINDING_ACTION_PANEL_RUN_DIALOG);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -110,13 +110,12 @@ static gboolean workspaces_only_on_primary = FALSE;
 | 
			
		||||
 | 
			
		||||
static gboolean no_tab_popup = FALSE;
 | 
			
		||||
 | 
			
		||||
static GHashTable *key_bindings;
 | 
			
		||||
 | 
			
		||||
static void handle_preference_update_enum (GSettings *settings,
 | 
			
		||||
                                           gchar     *key);
 | 
			
		||||
static gboolean update_binding         (MetaKeyPref *binding,
 | 
			
		||||
                                        gchar      **strokes);
 | 
			
		||||
static gboolean update_key_binding     (const char  *key,
 | 
			
		||||
                                        gchar      **strokes);
 | 
			
		||||
static gboolean update_workspace_names (void);
 | 
			
		||||
 | 
			
		||||
static void settings_changed (GSettings      *settings,
 | 
			
		||||
@@ -1052,13 +1051,30 @@ bindings_changed (GSettings *settings,
 | 
			
		||||
                  gchar *key,
 | 
			
		||||
                  gpointer data)
 | 
			
		||||
{
 | 
			
		||||
  gchar  *static_strokes[2];
 | 
			
		||||
  gchar **strokes;
 | 
			
		||||
  strokes = g_settings_get_strv (settings, key);
 | 
			
		||||
  MetaKeyPref *pref;
 | 
			
		||||
 | 
			
		||||
  if (update_key_binding (key, strokes))
 | 
			
		||||
    queue_changed (META_PREF_KEYBINDINGS);
 | 
			
		||||
  pref = g_hash_table_lookup (key_bindings, key);
 | 
			
		||||
  if (!pref)
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  g_strfreev (strokes);
 | 
			
		||||
  if (pref->is_single)
 | 
			
		||||
    {
 | 
			
		||||
      static_strokes[0] = g_settings_get_string (settings, key);
 | 
			
		||||
      static_strokes[1] = NULL;
 | 
			
		||||
      strokes = static_strokes;
 | 
			
		||||
    }
 | 
			
		||||
  else
 | 
			
		||||
    strokes = g_settings_get_strv (settings, key);
 | 
			
		||||
 | 
			
		||||
  update_binding (pref, strokes);
 | 
			
		||||
  queue_changed (META_PREF_KEYBINDINGS);
 | 
			
		||||
 | 
			
		||||
  if (strokes != static_strokes)
 | 
			
		||||
    g_strfreev(strokes);
 | 
			
		||||
  else
 | 
			
		||||
    g_free(static_strokes[0]);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -1693,7 +1709,10 @@ meta_key_pref_free (MetaKeyPref *pref)
 | 
			
		||||
  update_binding (pref, NULL);
 | 
			
		||||
 | 
			
		||||
  g_free (pref->name);
 | 
			
		||||
  g_object_unref (pref->settings);
 | 
			
		||||
  if (pref->settings)
 | 
			
		||||
    g_object_unref (pref->settings);
 | 
			
		||||
  g_free (pref->setting_key);
 | 
			
		||||
  g_free (pref->hardcoded_key);
 | 
			
		||||
 | 
			
		||||
  g_free (pref);
 | 
			
		||||
}
 | 
			
		||||
@@ -1785,18 +1804,6 @@ update_binding (MetaKeyPref *binding,
 | 
			
		||||
  return changed;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static gboolean
 | 
			
		||||
update_key_binding (const char *key,
 | 
			
		||||
                    gchar     **strokes)
 | 
			
		||||
{
 | 
			
		||||
  MetaKeyPref *pref = g_hash_table_lookup (key_bindings, key);
 | 
			
		||||
 | 
			
		||||
  if (pref)
 | 
			
		||||
    return update_binding (pref, strokes);
 | 
			
		||||
  else
 | 
			
		||||
    return FALSE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static gboolean
 | 
			
		||||
update_workspace_names (void)
 | 
			
		||||
{
 | 
			
		||||
@@ -1929,11 +1936,14 @@ meta_prefs_get_visual_bell_type (void)
 | 
			
		||||
gboolean
 | 
			
		||||
meta_prefs_add_keybinding (const char           *name,
 | 
			
		||||
                           GSettings            *settings,
 | 
			
		||||
                           const char           *setting_key,
 | 
			
		||||
                           const char           *hardcoded_key,
 | 
			
		||||
                           MetaKeyBindingAction  action,
 | 
			
		||||
                           MetaKeyBindingFlags   flags)
 | 
			
		||||
{
 | 
			
		||||
  MetaKeyPref  *pref;
 | 
			
		||||
  char        **strokes;
 | 
			
		||||
  char         *static_strokes[2];
 | 
			
		||||
  guint         id;
 | 
			
		||||
 | 
			
		||||
  if (g_hash_table_lookup (key_bindings, name))
 | 
			
		||||
@@ -1944,19 +1954,45 @@ meta_prefs_add_keybinding (const char           *name,
 | 
			
		||||
 | 
			
		||||
  pref = g_new0 (MetaKeyPref, 1);
 | 
			
		||||
  pref->name = g_strdup (name);
 | 
			
		||||
  pref->settings = g_object_ref (settings);
 | 
			
		||||
  pref->settings = settings ? g_object_ref (settings) : NULL;
 | 
			
		||||
  pref->setting_key = g_strdup (setting_key);
 | 
			
		||||
  pref->hardcoded_key = g_strdup (hardcoded_key);
 | 
			
		||||
  pref->action = action;
 | 
			
		||||
  pref->bindings = NULL;
 | 
			
		||||
  pref->add_shift = (flags & META_KEY_BINDING_REVERSES) != 0;
 | 
			
		||||
  pref->per_window = (flags & META_KEY_BINDING_PER_WINDOW) != 0;
 | 
			
		||||
  pref->builtin = (flags & META_KEY_BINDING_BUILTIN) != 0;
 | 
			
		||||
  pref->is_single = (flags & META_KEY_BINDING_IS_SINGLE) != 0;
 | 
			
		||||
 | 
			
		||||
  if (settings)
 | 
			
		||||
    {
 | 
			
		||||
      if (pref->is_single)
 | 
			
		||||
        {
 | 
			
		||||
          static_strokes[0] = g_settings_get_string (settings, setting_key);
 | 
			
		||||
          static_strokes[1] = NULL;
 | 
			
		||||
          strokes = static_strokes;
 | 
			
		||||
        }
 | 
			
		||||
      else
 | 
			
		||||
        strokes = g_settings_get_strv (settings, setting_key);
 | 
			
		||||
    }
 | 
			
		||||
  else
 | 
			
		||||
    {
 | 
			
		||||
      static_strokes[0] = (char*)hardcoded_key;
 | 
			
		||||
      static_strokes[1] = NULL;
 | 
			
		||||
      strokes = static_strokes;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  strokes = g_settings_get_strv (settings, name);
 | 
			
		||||
  update_binding (pref, strokes);
 | 
			
		||||
  g_strfreev (strokes);
 | 
			
		||||
 | 
			
		||||
  g_hash_table_insert (key_bindings, g_strdup (name), pref);
 | 
			
		||||
 | 
			
		||||
  if (strokes != static_strokes)
 | 
			
		||||
    g_strfreev (strokes);
 | 
			
		||||
  else if (static_strokes[0] != hardcoded_key)
 | 
			
		||||
    g_free (static_strokes[0]);
 | 
			
		||||
 | 
			
		||||
  if (!settings)
 | 
			
		||||
    return TRUE;
 | 
			
		||||
 | 
			
		||||
  if (pref->builtin)
 | 
			
		||||
    {
 | 
			
		||||
      if (g_object_get_data (G_OBJECT (settings), "changed-signal") == NULL)
 | 
			
		||||
@@ -1968,7 +2004,7 @@ meta_prefs_add_keybinding (const char           *name,
 | 
			
		||||
    }
 | 
			
		||||
  else
 | 
			
		||||
    {
 | 
			
		||||
      char *changed_signal = g_strdup_printf ("changed::%s", name);
 | 
			
		||||
      char *changed_signal = g_strdup_printf ("changed::%s", setting_key);
 | 
			
		||||
      id = g_signal_connect (settings, changed_signal,
 | 
			
		||||
                             G_CALLBACK (bindings_changed), NULL);
 | 
			
		||||
      g_free (changed_signal);
 | 
			
		||||
 
 | 
			
		||||
@@ -134,8 +134,18 @@ gboolean meta_display_add_keybinding    (MetaDisplay         *display,
 | 
			
		||||
                                         MetaKeyHandlerFunc   handler,
 | 
			
		||||
                                         gpointer             user_data,
 | 
			
		||||
                                         GDestroyNotify       free_data);
 | 
			
		||||
gboolean meta_display_remove_keybinding (MetaDisplay         *display,
 | 
			
		||||
gboolean meta_display_add_grabbed_key   (MetaDisplay         *display,
 | 
			
		||||
                                         const char          *name,
 | 
			
		||||
                                         const char          *keyval,
 | 
			
		||||
                                         MetaKeyBindingFlags  flags,
 | 
			
		||||
                                         MetaKeyHandlerFunc   handler,
 | 
			
		||||
                                         gpointer             user_data,
 | 
			
		||||
                                         GDestroyNotify       free_data);
 | 
			
		||||
gboolean meta_display_remove_grabbed_key(MetaDisplay         *display,
 | 
			
		||||
                                         const char          *name);
 | 
			
		||||
gboolean meta_display_remove_keybinding (MetaDisplay         *display,
 | 
			
		||||
                                         const char          *name,
 | 
			
		||||
                                         GSettings           *settings);
 | 
			
		||||
 | 
			
		||||
MetaKeyBindingAction meta_display_get_keybinding_action (MetaDisplay  *display,
 | 
			
		||||
                                                         unsigned int  keycode,
 | 
			
		||||
 
 | 
			
		||||
@@ -234,7 +234,9 @@ typedef enum
 | 
			
		||||
  META_KEY_BINDING_PER_WINDOW  = 1 << 0,
 | 
			
		||||
  META_KEY_BINDING_BUILTIN     = 1 << 1,
 | 
			
		||||
  META_KEY_BINDING_REVERSES    = 1 << 2,
 | 
			
		||||
  META_KEY_BINDING_IS_REVERSED = 1 << 3
 | 
			
		||||
  META_KEY_BINDING_IS_REVERSED = 1 << 3,
 | 
			
		||||
  META_KEY_BINDING_IS_SINGLE   = 1 << 4,
 | 
			
		||||
  META_KEY_BINDING_HANDLE_WHEN_GRABBED = 1 << 5,
 | 
			
		||||
} MetaKeyBindingFlags;
 | 
			
		||||
 | 
			
		||||
typedef struct
 | 
			
		||||
@@ -249,12 +251,12 @@ typedef struct
 | 
			
		||||
 * @event: (type gpointer):
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
typedef void (* MetaKeyHandlerFunc) (MetaDisplay    *display,
 | 
			
		||||
                                     MetaScreen     *screen,
 | 
			
		||||
                                     MetaWindow     *window,
 | 
			
		||||
                                     XEvent         *event,
 | 
			
		||||
                                     MetaKeyBinding *binding,
 | 
			
		||||
                                     gpointer        user_data);
 | 
			
		||||
typedef gboolean (* MetaKeyHandlerFunc) (MetaDisplay    *display,
 | 
			
		||||
                                         MetaScreen     *screen,
 | 
			
		||||
                                         MetaWindow     *window,
 | 
			
		||||
                                         XEvent         *event,
 | 
			
		||||
                                         MetaKeyBinding *binding,
 | 
			
		||||
                                         gpointer        user_data);
 | 
			
		||||
 | 
			
		||||
typedef struct _MetaKeyHandler MetaKeyHandler;
 | 
			
		||||
 | 
			
		||||
@@ -262,6 +264,8 @@ typedef struct
 | 
			
		||||
{
 | 
			
		||||
  char *name;
 | 
			
		||||
  GSettings *settings;
 | 
			
		||||
  char *setting_key;
 | 
			
		||||
  char *hardcoded_key;
 | 
			
		||||
 | 
			
		||||
  MetaKeyBindingAction action;
 | 
			
		||||
 | 
			
		||||
@@ -280,6 +284,10 @@ typedef struct
 | 
			
		||||
 | 
			
		||||
  /** for keybindings not added with meta_display_add_keybinding() */
 | 
			
		||||
  gboolean      builtin:1;
 | 
			
		||||
 | 
			
		||||
  /** for keybindings that are stored as a single value, not
 | 
			
		||||
      as a list */
 | 
			
		||||
  gboolean      is_single:1;
 | 
			
		||||
} MetaKeyPref;
 | 
			
		||||
 | 
			
		||||
GType meta_key_binding_get_type    (void);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user