Sync with upstream r3901

Merge branch 'upstream' into clutter
This commit is contained in:
Tomas Frydrych
2008-09-17 17:12:27 +01:00
25 changed files with 9261 additions and 8955 deletions

View File

@ -520,87 +520,87 @@ meta_core_get_menu_accelerator (MetaMenuOp menu_op,
switch (menu_op)
{
case META_MENU_OP_DELETE:
name = META_KEYBINDING_CLOSE;
name = "close";
break;
case META_MENU_OP_MINIMIZE:
name = META_KEYBINDING_MINIMIZE;
name = "minimize";
break;
case META_MENU_OP_UNMAXIMIZE:
name = META_KEYBINDING_UNMAXIMIZE;
name = "unmaximize";
break;
case META_MENU_OP_MAXIMIZE:
name = META_KEYBINDING_MAXIMIZE;
name = "maximize";
break;
case META_MENU_OP_UNSHADE:
case META_MENU_OP_SHADE:
name = META_KEYBINDING_TOGGLE_SHADE;
name = "toggle_shaded";
break;
case META_MENU_OP_UNSTICK:
case META_MENU_OP_STICK:
name = META_KEYBINDING_TOGGLE_STICKY;
name = "toggle_on_all_workspaces";
break;
case META_MENU_OP_ABOVE:
case META_MENU_OP_UNABOVE:
name = META_KEYBINDING_TOGGLE_ABOVE;
name = "toggle_above";
break;
case META_MENU_OP_WORKSPACES:
switch (workspace)
{
case 1:
name = META_KEYBINDING_MOVE_WORKSPACE_1;
name = "move_to_workspace_1";
break;
case 2:
name = META_KEYBINDING_MOVE_WORKSPACE_2;
name = "move_to_workspace_2";
break;
case 3:
name = META_KEYBINDING_MOVE_WORKSPACE_3;
name = "move_to_workspace_3";
break;
case 4:
name = META_KEYBINDING_MOVE_WORKSPACE_4;
name = "move_to_workspace_4";
break;
case 5:
name = META_KEYBINDING_MOVE_WORKSPACE_5;
name = "move_to_workspace_5";
break;
case 6:
name = META_KEYBINDING_MOVE_WORKSPACE_6;
name = "move_to_workspace_6";
break;
case 7:
name = META_KEYBINDING_MOVE_WORKSPACE_7;
name = "move_to_workspace_7";
break;
case 8:
name = META_KEYBINDING_MOVE_WORKSPACE_8;
name = "move_to_workspace_8";
break;
case 9:
name = META_KEYBINDING_MOVE_WORKSPACE_9;
name = "move_to_workspace_9";
break;
case 10:
name = META_KEYBINDING_MOVE_WORKSPACE_10;
name = "move_to_workspace_10";
break;
case 11:
name = META_KEYBINDING_MOVE_WORKSPACE_11;
name = "move_to_workspace_11";
break;
case 12:
name = META_KEYBINDING_MOVE_WORKSPACE_12;
name = "move_to_workspace_12";
break;
}
break;
case META_MENU_OP_MOVE:
name = META_KEYBINDING_BEGIN_MOVE;
name = "begin_move";
break;
case META_MENU_OP_RESIZE:
name = META_KEYBINDING_BEGIN_RESIZE;
name = "begin_resize";
break;
case META_MENU_OP_MOVE_LEFT:
name = META_KEYBINDING_MOVE_WORKSPACE_LEFT;
name = "move_to_workspace_left";
break;
case META_MENU_OP_MOVE_RIGHT:
name = META_KEYBINDING_MOVE_WORKSPACE_RIGHT;
name = "move_to_workspace_right";
break;
case META_MENU_OP_MOVE_UP:
name = META_KEYBINDING_MOVE_WORKSPACE_UP;
name = "move_to_workspace_up";
break;
case META_MENU_OP_MOVE_DOWN:
name = META_KEYBINDING_MOVE_WORKSPACE_DOWN;
name = "move_to_workspace_down";
break;
case META_MENU_OP_RECOVER:
/* No keybinding for this one */

View File

@ -54,16 +54,22 @@ typedef void (* MetaKeyHandlerFunc) (MetaDisplay *display,
XEvent *event,
MetaKeyBinding *binding);
/* Prototypes for handlers */
#define item(name, suffix, param, short, long, stroke) \
static void \
handle_##name (MetaDisplay *display,\
MetaScreen *screen,\
MetaWindow *window,\
XEvent *event,\
MetaKeyBinding *binding);
#include "window-bindings.h"
#undef item
static void handle_activate_workspace (MetaDisplay *display,
MetaScreen *screen,
MetaWindow *window,
XEvent *event,
MetaKeyBinding *binding);
static void handle_activate_menu (MetaDisplay *display,
MetaScreen *screen,
MetaWindow *window,
XEvent *event,
MetaKeyBinding *binding);
static void handle_tab_forward (MetaDisplay *display,
MetaScreen *screen,
MetaWindow *window,
@ -99,146 +105,16 @@ static void handle_panel_keybinding (MetaDisplay *display,
MetaWindow *window,
XEvent *event,
MetaKeyBinding *binding);
static void handle_toggle_above (MetaDisplay *display,
MetaScreen *screen,
MetaWindow *window,
XEvent *event,
MetaKeyBinding *binding);
static void handle_toggle_maximize (MetaDisplay *display,
MetaScreen *screen,
MetaWindow *window,
XEvent *event,
MetaKeyBinding *binding);
static void handle_maximize (MetaDisplay *display,
MetaScreen *screen,
MetaWindow *window,
XEvent *event,
MetaKeyBinding *binding);
static void handle_unmaximize (MetaDisplay *display,
MetaScreen *screen,
MetaWindow *window,
XEvent *event,
MetaKeyBinding *binding);
static void handle_toggle_shade (MetaDisplay *display,
MetaScreen *screen,
MetaWindow *window,
XEvent *event,
MetaKeyBinding *binding);
static void handle_close_window (MetaDisplay *display,
MetaScreen *screen,
MetaWindow *window,
XEvent *event,
MetaKeyBinding *binding);
static void handle_minimize_window (MetaDisplay *display,
MetaScreen *screen,
MetaWindow *window,
XEvent *event,
MetaKeyBinding *binding);
static void handle_begin_move (MetaDisplay *display,
MetaScreen *screen,
MetaWindow *window,
XEvent *event,
MetaKeyBinding *binding);
static void handle_begin_resize (MetaDisplay *display,
MetaScreen *screen,
MetaWindow *window,
XEvent *event,
MetaKeyBinding *binding);
static void handle_toggle_sticky (MetaDisplay *display,
MetaScreen *screen,
MetaWindow *window,
XEvent *event,
MetaKeyBinding *binding);
static void handle_move_to_workspace (MetaDisplay *display,
MetaScreen *screen,
MetaWindow *window,
XEvent *event,
MetaKeyBinding *binding);
static void handle_move_to_workspace_flip (MetaDisplay *display,
MetaScreen *screen,
MetaWindow *window,
XEvent *event,
MetaKeyBinding *binding);
static void handle_workspace_switch (MetaDisplay *display,
MetaScreen *screen,
MetaWindow *window,
XEvent *event,
MetaKeyBinding *binding);
static void handle_raise_or_lower (MetaDisplay *display,
MetaScreen *screen,
MetaWindow *window,
XEvent *event,
MetaKeyBinding *binding);
static void handle_raise (MetaDisplay *display,
MetaScreen *screen,
MetaWindow *window,
XEvent *event,
MetaKeyBinding *binding);
static void handle_lower (MetaDisplay *display,
MetaScreen *screen,
MetaWindow *window,
XEvent *event,
MetaKeyBinding *binding);
static void handle_run_command (MetaDisplay *display,
MetaScreen *screen,
MetaWindow *window,
XEvent *event,
MetaKeyBinding *binding);
static void handle_maximize_vert (MetaDisplay *display,
MetaScreen *screen,
MetaWindow *window,
XEvent *event,
MetaKeyBinding *binding);
static void handle_maximize_horiz (MetaDisplay *display,
MetaScreen *screen,
MetaWindow *window,
XEvent *event,
MetaKeyBinding *binding);
static void handle_move_to_side_n (MetaDisplay *display,
MetaScreen *screen,
MetaWindow *window,
XEvent *event,
MetaKeyBinding *binding);
static void handle_move_to_side_w (MetaDisplay *display,
MetaScreen *screen,
MetaWindow *window,
XEvent *event,
MetaKeyBinding *binding);
static void handle_move_to_side_s (MetaDisplay *display,
MetaScreen *screen,
MetaWindow *window,
XEvent *event,
MetaKeyBinding *binding);
static void handle_move_to_side_e (MetaDisplay *display,
MetaScreen *screen,
MetaWindow *window,
XEvent *event,
MetaKeyBinding *binding);
static void handle_move_to_corner_nw (MetaDisplay *display,
MetaScreen *screen,
MetaWindow *window,
XEvent *event,
MetaKeyBinding *binding);
static void handle_move_to_corner_ne (MetaDisplay *display,
MetaScreen *screen,
MetaWindow *window,
XEvent *event,
MetaKeyBinding *binding);
static void handle_move_to_corner_sw (MetaDisplay *display,
MetaScreen *screen,
MetaWindow *window,
XEvent *event,
MetaKeyBinding *binding);
static void handle_move_to_corner_se (MetaDisplay *display,
MetaScreen *screen,
MetaWindow *window,
XEvent *event,
MetaKeyBinding *binding);
static void handle_move_to_center (MetaDisplay *display,
MetaScreen *screen,
MetaWindow *window,
XEvent *event,
MetaKeyBinding *binding);
static void handle_spew_mark (MetaDisplay *display,
MetaScreen *screen,
MetaWindow *window,
@ -437,65 +313,17 @@ static const MetaKeyHandler screen_handlers[] = {
};
static const MetaKeyHandler window_handlers[] = {
{ META_KEYBINDING_WINDOW_MENU, handle_activate_menu, NULL },
{ META_KEYBINDING_TOGGLE_FULLSCREEN, handle_toggle_fullscreen, NULL },
{ META_KEYBINDING_TOGGLE_ABOVE, handle_toggle_above, NULL },
{ META_KEYBINDING_TOGGLE_MAXIMIZE, handle_toggle_maximize, NULL },
{ META_KEYBINDING_MAXIMIZE, handle_maximize, NULL },
{ META_KEYBINDING_UNMAXIMIZE, handle_unmaximize, NULL },
{ META_KEYBINDING_TOGGLE_SHADE, handle_toggle_shade, NULL },
{ META_KEYBINDING_CLOSE, handle_close_window, NULL },
{ META_KEYBINDING_MINIMIZE, handle_minimize_window, NULL },
{ META_KEYBINDING_BEGIN_MOVE, handle_begin_move, },
{ META_KEYBINDING_BEGIN_RESIZE, handle_begin_resize, },
{ META_KEYBINDING_TOGGLE_STICKY, handle_toggle_sticky, },
{ META_KEYBINDING_MOVE_WORKSPACE_1, handle_move_to_workspace,
GINT_TO_POINTER (0) },
{ META_KEYBINDING_MOVE_WORKSPACE_2, handle_move_to_workspace,
GINT_TO_POINTER (1) },
{ META_KEYBINDING_MOVE_WORKSPACE_3, handle_move_to_workspace,
GINT_TO_POINTER (2) },
{ META_KEYBINDING_MOVE_WORKSPACE_4, handle_move_to_workspace,
GINT_TO_POINTER (3) },
{ META_KEYBINDING_MOVE_WORKSPACE_5, handle_move_to_workspace,
GINT_TO_POINTER (4) },
{ META_KEYBINDING_MOVE_WORKSPACE_6, handle_move_to_workspace,
GINT_TO_POINTER (5) },
{ META_KEYBINDING_MOVE_WORKSPACE_7, handle_move_to_workspace,
GINT_TO_POINTER (6) },
{ META_KEYBINDING_MOVE_WORKSPACE_8, handle_move_to_workspace,
GINT_TO_POINTER (7) },
{ META_KEYBINDING_MOVE_WORKSPACE_9, handle_move_to_workspace,
GINT_TO_POINTER (8) },
{ META_KEYBINDING_MOVE_WORKSPACE_10, handle_move_to_workspace,
GINT_TO_POINTER (9) },
{ META_KEYBINDING_MOVE_WORKSPACE_11, handle_move_to_workspace,
GINT_TO_POINTER (10) },
{ META_KEYBINDING_MOVE_WORKSPACE_12, handle_move_to_workspace,
GINT_TO_POINTER (11) },
{ META_KEYBINDING_MOVE_WORKSPACE_LEFT, handle_move_to_workspace_flip,
GINT_TO_POINTER (META_MOTION_LEFT) },
{ META_KEYBINDING_MOVE_WORKSPACE_RIGHT, handle_move_to_workspace_flip,
GINT_TO_POINTER (META_MOTION_RIGHT) },
{ META_KEYBINDING_MOVE_WORKSPACE_UP, handle_move_to_workspace_flip,
GINT_TO_POINTER (META_MOTION_UP) },
{ META_KEYBINDING_MOVE_WORKSPACE_DOWN, handle_move_to_workspace_flip,
GINT_TO_POINTER (META_MOTION_DOWN) },
{ META_KEYBINDING_RAISE_OR_LOWER, handle_raise_or_lower, NULL},
{ META_KEYBINDING_RAISE, handle_raise, NULL},
{ META_KEYBINDING_LOWER, handle_lower, NULL},
{ META_KEYBINDING_MAXIMIZE_VERTICALLY, handle_maximize_vert, NULL },
{ META_KEYBINDING_MAXIMIZE_HORIZONTALLY, handle_maximize_horiz, NULL },
{ META_KEYBINDING_MOVE_TO_SIDE_N, handle_move_to_side_n, NULL },
{ META_KEYBINDING_MOVE_TO_SIDE_S, handle_move_to_side_s, NULL },
{ META_KEYBINDING_MOVE_TO_SIDE_E, handle_move_to_side_e, NULL },
{ META_KEYBINDING_MOVE_TO_SIDE_W, handle_move_to_side_w, NULL },
{ META_KEYBINDING_MOVE_TO_CORNER_NW, handle_move_to_corner_nw, NULL },
{ META_KEYBINDING_MOVE_TO_CORNER_NE, handle_move_to_corner_ne, NULL },
{ META_KEYBINDING_MOVE_TO_CORNER_SW, handle_move_to_corner_sw, NULL },
{ META_KEYBINDING_MOVE_TO_CORNER_SE, handle_move_to_corner_se, NULL },
{ META_KEYBINDING_MOVE_TO_CENTER, handle_move_to_center, NULL },
{ NULL, NULL, NULL }
/* TODO: Eventually, we should stop using GINT_TO_POINTER here, because
* they're always integers.
*
* TODO: Are window bindings only ever called on non-null windows?
* If so, we can remove the check from all of them.
*/
#define item(name, suffix, param, a, b, c) { #name, handle_##name, \
GINT_TO_POINTER (param) },
#include "window-bindings.h"
#undef item
{ NULL, NULL, NULL }
};
static void
@ -2856,7 +2684,7 @@ handle_run_command (MetaDisplay *display,
static void
handle_maximize_vert (MetaDisplay *display,
handle_maximize_vertically (MetaDisplay *display,
MetaScreen *screen,
MetaWindow *window,
XEvent *event,
@ -2872,7 +2700,7 @@ handle_maximize_vert (MetaDisplay *display,
}
static void
handle_maximize_horiz (MetaDisplay *display,
handle_maximize_horizontally (MetaDisplay *display,
MetaScreen *screen,
MetaWindow *window,
XEvent *event,
@ -3265,7 +3093,7 @@ handle_panel_keybinding (MetaDisplay *display,
}
static void
handle_activate_menu (MetaDisplay *display,
handle_activate_window_menu (MetaDisplay *display,
MetaScreen *screen,
MetaWindow *event_window,
XEvent *event,
@ -3502,7 +3330,7 @@ handle_toggle_above (MetaDisplay *display,
}
static void
handle_toggle_maximize (MetaDisplay *display,
handle_toggle_maximized (MetaDisplay *display,
MetaScreen *screen,
MetaWindow *window,
XEvent *event,
@ -3554,7 +3382,7 @@ handle_unmaximize (MetaDisplay *display,
}
static void
handle_toggle_shade (MetaDisplay *display,
handle_toggle_shaded (MetaDisplay *display,
MetaScreen *screen,
MetaWindow *window,
XEvent *event,
@ -3570,7 +3398,7 @@ handle_toggle_shade (MetaDisplay *display,
}
static void
handle_close_window (MetaDisplay *display,
handle_close (MetaDisplay *display,
MetaScreen *screen,
MetaWindow *window,
XEvent *event,
@ -3582,7 +3410,7 @@ handle_close_window (MetaDisplay *display,
}
static void
handle_minimize_window (MetaDisplay *display,
handle_minimize (MetaDisplay *display,
MetaScreen *screen,
MetaWindow *window,
XEvent *event,
@ -3626,7 +3454,7 @@ handle_begin_resize (MetaDisplay *display,
}
static void
handle_toggle_sticky (MetaDisplay *display,
handle_toggle_on_all_workspaces (MetaDisplay *display,
MetaScreen *screen,
MetaWindow *window,
XEvent *event,
@ -3642,23 +3470,31 @@ handle_toggle_sticky (MetaDisplay *display,
}
static void
do_handle_move_to_workspace (MetaDisplay *display,
handle_move_to_workspace (MetaDisplay *display,
MetaScreen *screen,
MetaWindow *window,
XEvent *event,
MetaKeyBinding *binding,
gboolean flip)
MetaKeyBinding *binding)
{
int which;
gboolean flip;
MetaWorkspace *workspace;
which = GPOINTER_TO_INT (binding->handler->data);
/* If which is zero or positive, it's a workspace number, and the window
* should move to the workspace with that number.
*
* However, if it's negative, it's a direction with respect to the current
* position; it's expressed as a member of the MetaMotionDirection enum,
* all of whose members are negative. Such a change is called a flip.
*/
flip = (which < 0);
if (window == NULL || window->always_sticky)
return;
workspace = NULL;
if (which < 0)
if (flip)
{
workspace = meta_workspace_get_neighbor (screen->active_workspace,
which);
@ -3676,7 +3512,7 @@ do_handle_move_to_workspace (MetaDisplay *display,
{
meta_topic (META_DEBUG_FOCUS,
"Resetting mouse_mode to FALSE due to "
"do_handle_move_to_workspace() call with flip set.\n");
"handle_move_to_workspace() call with flip set.\n");
workspace->screen->display->mouse_mode = FALSE;
meta_workspace_activate_with_focus (workspace,
window,
@ -3689,35 +3525,6 @@ do_handle_move_to_workspace (MetaDisplay *display,
}
}
static void
handle_move_to_workspace (MetaDisplay *display,
MetaScreen *screen,
MetaWindow *window,
XEvent *event,
MetaKeyBinding *binding)
{
do_handle_move_to_workspace (display,
screen,
window,
event,
binding,
FALSE);
}
static void
handle_move_to_workspace_flip (MetaDisplay *display,
MetaScreen *screen,
MetaWindow *window,
XEvent *event,
MetaKeyBinding *binding)
{
do_handle_move_to_workspace (display,
screen,
window,
event,
binding,
TRUE);
}
static void
handle_raise_or_lower (MetaDisplay *display,
MetaScreen *screen,

View File

@ -1888,48 +1888,10 @@ static MetaKeyPref screen_bindings[] = {
};
static MetaKeyPref window_bindings[] = {
{ META_KEYBINDING_WINDOW_MENU, NULL, FALSE },
{ META_KEYBINDING_TOGGLE_FULLSCREEN, NULL, FALSE },
{ META_KEYBINDING_TOGGLE_MAXIMIZE, NULL, FALSE },
{ META_KEYBINDING_TOGGLE_ABOVE, NULL, FALSE },
{ META_KEYBINDING_MAXIMIZE, NULL, FALSE },
{ META_KEYBINDING_UNMAXIMIZE, NULL, FALSE },
{ META_KEYBINDING_TOGGLE_SHADE, NULL, FALSE },
{ META_KEYBINDING_MINIMIZE, NULL, FALSE },
{ META_KEYBINDING_CLOSE, NULL, FALSE },
{ META_KEYBINDING_BEGIN_MOVE, NULL, FALSE },
{ META_KEYBINDING_BEGIN_RESIZE, NULL, FALSE },
{ META_KEYBINDING_TOGGLE_STICKY, NULL, FALSE },
{ META_KEYBINDING_MOVE_WORKSPACE_1, NULL, FALSE },
{ META_KEYBINDING_MOVE_WORKSPACE_2, NULL, FALSE },
{ META_KEYBINDING_MOVE_WORKSPACE_3, NULL, FALSE },
{ META_KEYBINDING_MOVE_WORKSPACE_4, NULL, FALSE },
{ META_KEYBINDING_MOVE_WORKSPACE_5, NULL, FALSE },
{ META_KEYBINDING_MOVE_WORKSPACE_6, NULL, FALSE },
{ META_KEYBINDING_MOVE_WORKSPACE_7, NULL, FALSE },
{ META_KEYBINDING_MOVE_WORKSPACE_8, NULL, FALSE },
{ META_KEYBINDING_MOVE_WORKSPACE_9, NULL, FALSE },
{ META_KEYBINDING_MOVE_WORKSPACE_10, NULL, FALSE },
{ META_KEYBINDING_MOVE_WORKSPACE_11, NULL, FALSE },
{ META_KEYBINDING_MOVE_WORKSPACE_12, NULL, FALSE },
{ META_KEYBINDING_MOVE_WORKSPACE_LEFT, NULL, FALSE },
{ META_KEYBINDING_MOVE_WORKSPACE_RIGHT, NULL, FALSE },
{ META_KEYBINDING_MOVE_WORKSPACE_UP, NULL, FALSE },
{ META_KEYBINDING_MOVE_WORKSPACE_DOWN, NULL, FALSE },
{ META_KEYBINDING_RAISE_OR_LOWER, NULL, FALSE },
{ META_KEYBINDING_RAISE, NULL, FALSE },
{ META_KEYBINDING_LOWER, NULL, FALSE },
{ META_KEYBINDING_MAXIMIZE_VERTICALLY, NULL, FALSE },
{ META_KEYBINDING_MAXIMIZE_HORIZONTALLY, NULL, FALSE },
{ META_KEYBINDING_MOVE_TO_CORNER_NW, NULL, FALSE },
{ META_KEYBINDING_MOVE_TO_CORNER_NE, NULL, FALSE },
{ META_KEYBINDING_MOVE_TO_CORNER_SW, NULL, FALSE },
{ META_KEYBINDING_MOVE_TO_CORNER_SE, NULL, FALSE },
{ META_KEYBINDING_MOVE_TO_SIDE_N, NULL, FALSE },
{ META_KEYBINDING_MOVE_TO_SIDE_S, NULL, FALSE },
{ META_KEYBINDING_MOVE_TO_SIDE_E, NULL, FALSE },
{ META_KEYBINDING_MOVE_TO_SIDE_W, NULL, FALSE },
{ META_KEYBINDING_MOVE_TO_CENTER, NULL, FALSE },
#define item(name, suffix, param, a, b, c) \
{ #name suffix, NULL, FALSE },
#include "window-bindings.h"
#undef item
{ NULL, NULL, FALSE }
};
@ -1961,23 +1923,16 @@ static MetaSimpleKeyMapping screen_string_bindings[] = {
{ NULL, NULL }
};
/* Name field must occur in the same order as window_bindings, though entries
* can be skipped
*/
static MetaSimpleKeyMapping window_string_bindings[] = {
{ META_KEYBINDING_WINDOW_MENU, "<Alt>Print" },
{ META_KEYBINDING_MAXIMIZE, "<Alt>F10" },
{ META_KEYBINDING_UNMAXIMIZE, "<Alt>F5" },
{ META_KEYBINDING_MINIMIZE, "<Alt>F9" },
{ META_KEYBINDING_CLOSE, "<Alt>F4" },
{ META_KEYBINDING_BEGIN_MOVE, "<Alt>F7" },
{ META_KEYBINDING_BEGIN_RESIZE, "<Alt>F8" },
{ META_KEYBINDING_MOVE_WORKSPACE_LEFT, "<Control><Shift><Alt>Left" },
{ META_KEYBINDING_MOVE_WORKSPACE_RIGHT, "<Control><Shift><Alt>Right" },
{ META_KEYBINDING_MOVE_WORKSPACE_UP, "<Control><Shift><Alt>Up" },
{ META_KEYBINDING_MOVE_WORKSPACE_DOWN, "<Control><Shift><Alt>Down" },
#define ONLY_BOUND_BY_DEFAULT
#define item(name, suffix, param, short, long, keystroke) \
{ #name suffix, keystroke },
#include "window-bindings.h"
#undef item
#undef ONLY_BOUND_BY_DEFAULT
{ NULL, NULL }
};
#endif /* NOT HAVE_GCONF */
static void
@ -2949,6 +2904,7 @@ meta_prefs_get_compositing_manager (void)
void
meta_prefs_set_compositing_manager (gboolean whether)
{
#ifdef HAVE_GCONF
GError *err = NULL;
gconf_client_set_bool (default_client,
@ -2962,6 +2918,9 @@ meta_prefs_set_compositing_manager (gboolean whether)
err->message);
g_error_free (err);
}
#else
compositing_manager = whether;
#endif
}
#ifndef HAVE_GCONF

View File

@ -0,0 +1,88 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
/*
* Copyright (C) 2008 Thomas Thurman
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
/** \file Schema bindings generator.
*
* This program simply takes the items given in the binding lists in
* window-bindings.h and turns them into a portion of
* the GConf .schemas file.
*/
#include <stdio.h>
#include <glib.h>
#define _(x) x
char *liberal;
const char* window_string = \
" <schema>\n" \
" <key>/schemas/apps/metacity/%s_keybindings/%s%s</key>\n" \
" <applyto>/apps/metacity/%s_keybindings/%s%s</applyto>\n" \
" <owner>metacity</owner>\n" \
" <type>string</type>\n" \
" <default>%s</default>\n" \
" <locale name=\"C\">\n" \
" <short>%s</short>\n" \
" <long>\n" \
" %s %s\n" \
" </long>\n" \
" </locale>\n" \
" </schema>\n\n\n";
void
produce_window_bindings ()
{
/* Escaped versions of each of these fields (i.e. > => &gt;, etc) */
gchar *esc_short, *esc_long, *esc_key;
#define item(name, suffix, param, short, long, keystroke) \
esc_short = g_markup_escape_text (short, -1);\
esc_long = g_markup_escape_text (long, -1);\
if (keystroke) esc_key = g_markup_escape_text (keystroke, -1);\
printf(\
window_string, \
"window", #name, suffix? suffix:"", \
"window", #name, suffix? suffix:"",\
keystroke? esc_key: "disabled", \
esc_short, esc_long, liberal);\
g_free (esc_short);\
g_free (esc_long);\
if (keystroke) g_free (esc_key);
#include "../src/core/window-bindings.h"
#undef item
}
int
main ()
{
liberal = g_markup_escape_text(_("The parser is fairly liberal and allows "\
"lower or upper case, and also abbreviations such as \"<Ctl>\" and " \
"\"<Ctrl>\". If you set the option to the special string " \
"\"disabled\", then there will be no keybinding for this action."), -1);
produce_window_bindings ();
g_free (liberal);
}
/* eof schema-bindings.c */

293
src/core/window-bindings.h Normal file
View File

@ -0,0 +1,293 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
/*
* Copyright (C) 2008 Thomas Thurman
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
/**
* \file A list of window binding information.
*
* Each action which can have a keystroke bound to it is listed below.
* To use this file, define "item" to be a six-argument macro (you can
* throw any of the arguments you please away), include this file,
* and then undefine the macro again.
*
* (If you aren't familiar with this technique, sometimes called "x-macros",
* see DDJ of May 2001: <http://www.ddj.com/cpp/184401387>.)
*
* This makes it possible to keep all information about all the keybindings
* in the same place. The only exception is the code to run when an action
* is actually invoked; while we *could* have put that in this file, it would
* have made debugging ridiculously difficult. Instead, each action should
* have a corresponding static function named handle_<name>() in
* keybindings.c.
*
* Currently, the GConf schemas in src/metacity.schemas also need to be
* updated separately. There is a program called schema-bindings.c in this
* directory which will fix that, but it needs integrating into the build
* process.
*
* The arguments to item() are:
* 1) name: the name of the binding; a bareword identifier
* 2) suffix: a string to add to the binding name to make the handler name
* (usually the empty string)
* 3) param: an integer parameter to pass to the handler
* 4) short: a short description. Mostly, you won't use this.
* It must be marked translatable (i.e. inside "_(...)").
* 5) long: like short, except long. Don't include all the stuff about
* the parser being fairly liberal.
* 6) keystroke: a string representing the default binding.
* If this is NULL, the action is unbound by default.
*
* Don't try to do XML entity escaping anywhere in the strings.
*
* Some code out there wants only the entries which have a default
* binding (i.e. whose sixth parameter is not NULL). You can get only these
* by defining ONLY_BOUND_BY_DEFAULT before you include this file.
*/
#ifndef item
#error "item () must be defined when you include window-bindings.h"
#endif
item (activate_window_menu, "", 0,
_("Activate window menu"),
_("The keybinding used to activate the window menu."),
"<Alt>Print")
#ifndef ONLY_BOUND_BY_DEFAULT
item (toggle_fullscreen, "", 0,
_("Toggle fullscreen mode"),
_("The keybinding used to toggle fullscreen mode."),
NULL)
item (toggle_maximized, "", 0,
_("Toggle maximization state"),
_("The keybinding used to toggle maximization."),
NULL)
item (toggle_above, "", 0,
_("Toggle always on top state"),
_("The keybinding used to toggle always on top. A window that is "
"always on top will always be visible over other overlapping "
"windows."),
NULL)
#endif /* ONLY_BOUND_BY_DEFAULT */
item (maximize, "", 0,
_("Maximize window"),
_("The keybinding used to maximize a window."),
"<Alt>F10")
item (unmaximize, "", 0,
_("Unmaximize window"),
_("The keybinding used to unmaximize a window."),
"<Alt>F5")
#ifndef ONLY_BOUND_BY_DEFAULT
item (toggle_shaded, "", 0,
_("Toggle shaded state"),
_("The keybinding used to toggle shaded/unshaded state."),
NULL)
#endif /* ONLY_BOUND_BY_DEFAULT */
item (minimize, "", 0,
_("Minimize window"),
_("The keybinding used to minimize a window."),
"<Alt>F9")
item (close, "", 0,
_("Close window"),
_("The keybinding used to close a window."),
"<Alt>F4")
item (begin_move, "", 0,
_("Move window"),
_("The keybinding used to enter \"move mode\" "
"and begin moving a window using the keyboard."),
"<Alt>F7")
item (begin_resize, "", 0,
_("Resize window"),
("The keybinding used to enter \"resize mode\" "
"and begin resizing a window using the keyboard."),
"<Alt>F8")
#ifndef ONLY_BOUND_BY_DEFAULT
item (toggle_on_all_workspaces, "", 0,
_("Toggle window on all workspaces"),
_("The keybinding used to toggle whether the window is on all "
"workspaces or just one."),
NULL)
item (move_to_workspace, "_1", 1,
_("Move window to workspace 1"),
_("The keybinding used to move a window to workspace 1."),
NULL)
item (move_to_workspace, "_2", 2,
_("Move window to workspace 2"),
_("The keybinding used to move a window to workspace 2."),
NULL)
item (move_to_workspace, "_3", 3,
_("Move window to workspace 3"),
_("The keybinding used to move a window to workspace 3."),
NULL)
item (move_to_workspace, "_4", 4,
_("Move window to workspace 4"),
_("The keybinding used to move a window to workspace 4."),
NULL)
item (move_to_workspace, "_5", 5,
_("Move window to workspace 5"),
_("The keybinding used to move a window to workspace 5."),
NULL)
item (move_to_workspace, "_6", 6,
_("Move window to workspace 6"),
_("The keybinding used to move a window to workspace 6."),
NULL)
item (move_to_workspace, "_7", 7,
_("Move window to workspace 7"),
_("The keybinding used to move a window to workspace 7."),
NULL)
item (move_to_workspace, "_8", 8,
_("Move window to workspace 8"),
_("The keybinding used to move a window to workspace 8."),
NULL)
item (move_to_workspace, "_9", 9,
_("Move window to workspace 9"),
_("The keybinding used to move a window to workspace 9."),
NULL)
item (move_to_workspace, "_10", 10,
_("Move window to workspace 10"),
_("The keybinding used to move a window to workspace 10."),
NULL)
item (move_to_workspace, "_11", 11,
_("Move window to workspace 11"),
_("The keybinding used to move a window to workspace 11."),
NULL)
item (move_to_workspace, "_12", 12,
_("Move window to workspace 12"),
_("The keybinding used to move a window to workspace 12."),
NULL)
#endif /* ONLY_BOUND_BY_DEFAULT */
/* META_MOTION_* are negative, and so distinct from workspace numbers,
* which are always zero or positive.
* If you make use of these constants, you will need to include workspace.h
* (which you're probably using already for other reasons anyway).
* If your definition of item() throws them away, you don't need to include
* workspace.h, of course.
*/
item (move_to_workspace, "_left", META_MOTION_LEFT,
_("Move window one workspace to the left"),
_("The keybinding used to move a window one workspace to the left."),
"<Control><Shift><Alt>Left")
item (move_to_workspace, "_right", META_MOTION_RIGHT,
_("Move window one workspace to the right"),
_("The keybinding used to move a window one workspace to the right."),
"<Control><Shift><Alt>Right")
item (move_to_workspace, "_up", META_MOTION_UP,
_("Move window one workspace up"),
_("The keybinding used to move a window one workspace up."),
"<Control><Shift><Alt>Up")
item (move_to_workspace, "_down", META_MOTION_DOWN,
_("Move window one workspace down"),
_("The keybinding used to move a window one workspace down."),
"<Control><Shift><Alt>Down")
#ifndef ONLY_BOUND_BY_DEFAULT
item (raise_or_lower, "", 0,
_("Raise obscured window, otherwise lower"),
_("This keybinding changes whether a window is above or below "
"other windows. If the window is covered by another one, it "
"raises the window above all others, and if the window is "
"already fully visible, it lowers it below all others."),
NULL)
item (raise, "", 0,
_("Raise window above other windows"),
_("This keybinding raises the window above other windows."),
NULL)
item (lower, "", 0,
_("Lower window below other windows"),
_("This keybinding lowers a window below other windows."),
NULL)
item (maximize_vertically, "", 0,
_("Maximize window vertically"),
_("This keybinding resizes a window to fill available "
"vertical space."),
NULL)
item (maximize_horizontally, "", 0,
_("Maximize window horizontally"),
_("This keybinding resizes a window to fill available "
"horizontal space."),
NULL)
item (move_to_corner_nw, "", 0,
_("Move window to north-west corner"),
_("This keybinding moves a window into the north-west (top left) "
"corner of the screen."),
NULL)
item (move_to_corner_ne, "", 0,
_("Move window to north-east corner"),
_("This keybinding moves a window into the north-east (top right) "
"corner of the screen."),
NULL)
item (move_to_corner_sw, "", 0,
_("Move window to south-west corner"),
_("This keybinding moves a window into the north-east (bottom left) "
"corner of the screen."),
NULL)
item (move_to_corner_se, "", 0,
_("Move window to south-east corner"),
_("This keybinding moves a window into the north-east (bottom right) "
"corner of the screen."),
NULL)
item (move_to_side_n, "", 0,
_("Move window to north side of screen"),
_("This keybinding moves a window against the north (top) "
"side of the screen."),
NULL)
item (move_to_side_s, "", 0,
_("Move window to south side of screen"),
_("This keybinding moves a window against the south (bottom) "
"side of the screen."),
NULL)
item (move_to_side_e, "", 0,
_("Move window to east side of screen"),
_("This keybinding moves a window against the east (right) "
"side of the screen."),
NULL)
item (move_to_side_w, "", 0,
_("Move window to west side of screen"),
_("This keybinding moves a window against the west (left) "
"side of the screen."),
NULL)
item (move_to_center, "", 0,
_("Move window to center of screen"),
_("This keybinding moves a window into the center "
"of the screen."),
NULL)
#endif /* ONLY_BOUND_BY_DEFAULT */
/* eof window-bindings.h */