1 /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ 2 3 /* Metacity preferences */ 4 5 /* 6 * Copyright (C) 2001 Havoc Pennington 7 * Copyright (C) 2006 Elijah Newren 8 * 9 * This program is free software; you can redistribute it and/or 10 * modify it under the terms of the GNU General Public License as 11 * published by the Free Software Foundation; either version 2 of the 12 * License, or (at your option) any later version. 13 * 14 * This program is distributed in the hope that it will be useful, but 15 * WITHOUT ANY WARRANTY; without even the implied warranty of 16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 17 * General Public License for more details. 18 * 19 * You should have received a copy of the GNU General Public License 20 * along with this program; if not, see <http://www.gnu.org/licenses/>. 21 */ 22 23 #ifndef META_PREFS_H 24 #define META_PREFS_H 25 26 /* This header is a "common" one between the UI and core side */ 27 #include "common.h" 28 #include "meta-compositor.h" 29 #include "types.h" 30 #include <libmetacity/meta-theme.h> 31 #include <pango/pango-font.h> 32 #include <gdesktop-enums.h> 33 34 /* Keep in sync with GSettings schemas! */ 35 typedef enum 36 { 37 META_PREF_MOUSE_BUTTON_MODS, 38 META_PREF_FOCUS_MODE, 39 META_PREF_FOCUS_NEW_WINDOWS, 40 META_PREF_ATTACH_MODAL_DIALOGS, 41 META_PREF_RAISE_ON_CLICK, 42 META_PREF_ACTION_DOUBLE_CLICK_TITLEBAR, 43 META_PREF_ACTION_MIDDLE_CLICK_TITLEBAR, 44 META_PREF_ACTION_RIGHT_CLICK_TITLEBAR, 45 META_PREF_AUTO_RAISE, 46 META_PREF_AUTO_RAISE_DELAY, 47 META_PREF_THEME_NAME, 48 META_PREF_THEME_TYPE, 49 META_PREF_TITLEBAR_FONT, 50 META_PREF_NUM_WORKSPACES, 51 META_PREF_KEYBINDINGS, 52 META_PREF_DISABLE_WORKAROUNDS, 53 META_PREF_BUTTON_LAYOUT, 54 META_PREF_WORKSPACE_NAMES, 55 META_PREF_VISUAL_BELL, 56 META_PREF_AUDIBLE_BELL, 57 META_PREF_VISUAL_BELL_TYPE, 58 META_PREF_GNOME_ACCESSIBILITY, 59 META_PREF_GNOME_ANIMATIONS, 60 META_PREF_CURSOR_THEME, 61 META_PREF_CURSOR_SIZE, 62 META_PREF_COMPOSITOR, 63 META_PREF_RESIZE_WITH_RIGHT_BUTTON, 64 META_PREF_EDGE_TILING, 65 META_PREF_FORCE_FULLSCREEN, 66 META_PREF_PLACEMENT_MODE, 67 META_PREF_ALT_TAB_THUMBNAILS 68 } MetaPreference; 69 70 typedef enum 71 { 72 META_PLACEMENT_MODE_SMART, 73 META_PLACEMENT_MODE_CASCADE, 74 META_PLACEMENT_MODE_CENTER, 75 META_PLACEMENT_MODE_ORIGIN, 76 META_PLACEMENT_MODE_RANDOM 77 } MetaPlacementMode; 78 79 typedef void (* MetaPrefsChangedFunc) (MetaPreference pref, 80 gpointer data); 81 82 void meta_prefs_add_listener (MetaPrefsChangedFunc func, 83 gpointer data); 84 void meta_prefs_remove_listener (MetaPrefsChangedFunc func, 85 gpointer data); 86 87 void meta_prefs_init (void); 88 const char* meta_preference_to_string (MetaPreference pref); 89 90 MetaVirtualModifier meta_prefs_get_mouse_button_mods (void); 91 guint meta_prefs_get_mouse_button_resize (void); 92 guint meta_prefs_get_mouse_button_menu (void); 93 GDesktopFocusMode meta_prefs_get_focus_mode (void); 94 GDesktopFocusNewWindows meta_prefs_get_focus_new_windows (void); 95 gboolean meta_prefs_get_attach_modal_dialogs (void); 96 gboolean meta_prefs_get_raise_on_click (void); 97 98 const gchar *meta_prefs_get_theme_name (void); 99 MetaThemeType meta_prefs_get_theme_type (void); 100 101 /* returns NULL if GTK default should be used */ 102 const PangoFontDescription* meta_prefs_get_titlebar_font (void); 103 int meta_prefs_get_num_workspaces (void); 104 gboolean meta_prefs_get_disable_workarounds (void); 105 gboolean meta_prefs_get_auto_raise (void); 106 int meta_prefs_get_auto_raise_delay (void); 107 gboolean meta_prefs_get_gnome_accessibility (void); 108 gboolean meta_prefs_get_gnome_animations (void); 109 gboolean meta_prefs_get_edge_tiling (void); 110 111 const char* meta_prefs_get_screenshot_command (void); 112 113 const char* meta_prefs_get_window_screenshot_command (void); 114 115 const char* meta_prefs_get_terminal_command (void); 116 117 const gchar* meta_prefs_get_button_layout (void); 118 119 /* Double, right, middle click can be configured to any titlebar meta-action */ 120 GDesktopTitlebarAction meta_prefs_get_action_double_click_titlebar (void); 121 GDesktopTitlebarAction meta_prefs_get_action_middle_click_titlebar (void); 122 GDesktopTitlebarAction meta_prefs_get_action_right_click_titlebar (void); 123 124 void meta_prefs_set_num_workspaces (int n_workspaces); 125 126 const char* meta_prefs_get_workspace_name (int i); 127 void meta_prefs_change_workspace_name (int i, 128 const char *name); 129 130 const char* meta_prefs_get_cursor_theme (void); 131 int meta_prefs_get_cursor_size (void); 132 gboolean meta_prefs_get_force_fullscreen (void); 133 134 MetaPlacementMode meta_prefs_get_placement_mode (void); 135 136 gboolean meta_prefs_get_alt_tab_thumbnails (void); 137 138 MetaCompositorType meta_prefs_get_compositor (void); 139 140 void meta_prefs_set_compositor (MetaCompositorType compositor); 141 142 void meta_prefs_set_force_fullscreen (gboolean whether); 143 144 /* XXX FIXME This should be x-macroed, but isn't yet because it would be 145 * difficult (or perhaps impossible) to add the suffixes using the current 146 * system. It needs some more thought, perhaps after the current system 147 * evolves a little. 148 */ 149 typedef enum _MetaKeyBindingAction 150 { 151 META_KEYBINDING_ACTION_NONE = -1, 152 META_KEYBINDING_ACTION_WORKSPACE_1, 153 META_KEYBINDING_ACTION_WORKSPACE_2, 154 META_KEYBINDING_ACTION_WORKSPACE_3, 155 META_KEYBINDING_ACTION_WORKSPACE_4, 156 META_KEYBINDING_ACTION_WORKSPACE_5, 157 META_KEYBINDING_ACTION_WORKSPACE_6, 158 META_KEYBINDING_ACTION_WORKSPACE_7, 159 META_KEYBINDING_ACTION_WORKSPACE_8, 160 META_KEYBINDING_ACTION_WORKSPACE_9, 161 META_KEYBINDING_ACTION_WORKSPACE_10, 162 META_KEYBINDING_ACTION_WORKSPACE_11, 163 META_KEYBINDING_ACTION_WORKSPACE_12, 164 META_KEYBINDING_ACTION_WORKSPACE_LEFT, 165 META_KEYBINDING_ACTION_WORKSPACE_RIGHT, 166 META_KEYBINDING_ACTION_WORKSPACE_UP, 167 META_KEYBINDING_ACTION_WORKSPACE_DOWN, 168 META_KEYBINDING_ACTION_SWITCH_APPLICATIONS, 169 META_KEYBINDING_ACTION_SWITCH_APPLICATIONS_BACKWARD, 170 META_KEYBINDING_ACTION_SWITCH_GROUP, 171 META_KEYBINDING_ACTION_SWITCH_GROUP_BACKWARD, 172 META_KEYBINDING_ACTION_SWITCH_WINDOWS, 173 META_KEYBINDING_ACTION_SWITCH_WINDOWS_BACKWARD, 174 META_KEYBINDING_ACTION_SWITCH_PANELS, 175 META_KEYBINDING_ACTION_SWITCH_PANELS_BACKWARD, 176 META_KEYBINDING_ACTION_CYCLE_GROUP, 177 META_KEYBINDING_ACTION_CYCLE_GROUP_BACKWARD, 178 META_KEYBINDING_ACTION_CYCLE_WINDOWS, 179 META_KEYBINDING_ACTION_CYCLE_WINDOWS_BACKWARD, 180 META_KEYBINDING_ACTION_CYCLE_PANELS, 181 META_KEYBINDING_ACTION_CYCLE_PANELS_BACKWARD, 182 META_KEYBINDING_ACTION_SHOW_DESKTOP, 183 META_KEYBINDING_ACTION_PANEL_MAIN_MENU, 184 META_KEYBINDING_ACTION_PANEL_RUN_DIALOG, 185 META_KEYBINDING_ACTION_SET_SPEW_MARK, 186 META_KEYBINDING_ACTION_ACTIVATE_WINDOW_MENU, 187 META_KEYBINDING_ACTION_TOGGLE_FULLSCREEN, 188 META_KEYBINDING_ACTION_TOGGLE_MAXIMIZED, 189 META_KEYBINDING_ACTION_TOGGLE_TILED_LEFT, 190 META_KEYBINDING_ACTION_TOGGLE_TILED_RIGHT, 191 META_KEYBINDING_ACTION_TOGGLE_ABOVE, 192 META_KEYBINDING_ACTION_MAXIMIZE, 193 META_KEYBINDING_ACTION_UNMAXIMIZE, 194 META_KEYBINDING_ACTION_TOGGLE_SHADED, 195 META_KEYBINDING_ACTION_MINIMIZE, 196 META_KEYBINDING_ACTION_CLOSE, 197 META_KEYBINDING_ACTION_BEGIN_MOVE, 198 META_KEYBINDING_ACTION_BEGIN_RESIZE, 199 META_KEYBINDING_ACTION_TOGGLE_ON_ALL_WORKSPACES, 200 META_KEYBINDING_ACTION_MOVE_TO_WORKSPACE_1, 201 META_KEYBINDING_ACTION_MOVE_TO_WORKSPACE_2, 202 META_KEYBINDING_ACTION_MOVE_TO_WORKSPACE_3, 203 META_KEYBINDING_ACTION_MOVE_TO_WORKSPACE_4, 204 META_KEYBINDING_ACTION_MOVE_TO_WORKSPACE_5, 205 META_KEYBINDING_ACTION_MOVE_TO_WORKSPACE_6, 206 META_KEYBINDING_ACTION_MOVE_TO_WORKSPACE_7, 207 META_KEYBINDING_ACTION_MOVE_TO_WORKSPACE_8, 208 META_KEYBINDING_ACTION_MOVE_TO_WORKSPACE_9, 209 META_KEYBINDING_ACTION_MOVE_TO_WORKSPACE_10, 210 META_KEYBINDING_ACTION_MOVE_TO_WORKSPACE_11, 211 META_KEYBINDING_ACTION_MOVE_TO_WORKSPACE_12, 212 META_KEYBINDING_ACTION_MOVE_TO_WORKSPACE_LEFT, 213 META_KEYBINDING_ACTION_MOVE_TO_WORKSPACE_RIGHT, 214 META_KEYBINDING_ACTION_MOVE_TO_WORKSPACE_UP, 215 META_KEYBINDING_ACTION_MOVE_TO_WORKSPACE_DOWN, 216 META_KEYBINDING_ACTION_RAISE_OR_LOWER, 217 META_KEYBINDING_ACTION_RAISE, 218 META_KEYBINDING_ACTION_LOWER, 219 META_KEYBINDING_ACTION_MAXIMIZE_VERTICALLY, 220 META_KEYBINDING_ACTION_MAXIMIZE_HORIZONTALLY, 221 META_KEYBINDING_ACTION_MOVE_TO_CORNER_NW, 222 META_KEYBINDING_ACTION_MOVE_TO_CORNER_NE, 223 META_KEYBINDING_ACTION_MOVE_TO_CORNER_SW, 224 META_KEYBINDING_ACTION_MOVE_TO_CORNER_SE, 225 META_KEYBINDING_ACTION_MOVE_TO_SIDE_N, 226 META_KEYBINDING_ACTION_MOVE_TO_SIDE_S, 227 META_KEYBINDING_ACTION_MOVE_TO_SIDE_E, 228 META_KEYBINDING_ACTION_MOVE_TO_SIDE_W, 229 META_KEYBINDING_ACTION_MOVE_TO_CENTER, 230 } MetaKeyBindingAction; 231 232 typedef enum 233 { 234 META_KEY_BINDING_NONE, 235 META_KEY_BINDING_PER_WINDOW = 1 << 0, 236 META_KEY_BINDING_REVERSES = 1 << 1, 237 META_KEY_BINDING_IS_REVERSED = 1 << 2 238 } MetaKeyBindingFlags; 239 240 typedef struct 241 { 242 unsigned int keysym; 243 unsigned int keycode; 244 MetaVirtualModifier modifiers; 245 } MetaKeyCombo; 246 247 /** 248 * MetaKeyHandlerFunc: (skip) 249 * 250 */ 251 typedef void (* MetaKeyHandlerFunc) (MetaDisplay *display, 252 MetaScreen *screen, 253 MetaWindow *window, 254 XEvent *event, 255 MetaKeyBinding *binding); 256 257 typedef struct _MetaKeyHandler MetaKeyHandler; 258 259 typedef struct 260 { 261 char *name; 262 char *schema; 263 264 MetaKeyBindingAction action; 265 266 /** 267 * A list of MetaKeyCombos. Each of them is bound to 268 * this keypref. If one has keysym==modifiers==0, it is 269 * ignored. For historical reasons, the first entry is 270 * governed by the pref FOO and the remainder are 271 * governed by the pref FOO_list. 272 */ 273 GSList *bindings; 274 275 /** for keybindings that can have shift or not like Alt+Tab */ 276 gboolean add_shift:1; 277 278 /** for keybindings that apply only to a window */ 279 gboolean per_window:1; 280 } MetaKeyPref; 281 282 GList *meta_prefs_get_keybindings (void); 283 284 MetaKeyBindingAction meta_prefs_get_keybinding_action (const char *name); 285 286 void meta_prefs_get_window_binding (const char *name, 287 unsigned int *keysym, 288 MetaVirtualModifier *modifiers); 289 290 gboolean meta_prefs_get_visual_bell (void); 291 gboolean meta_prefs_bell_is_audible (void); 292 GDesktopVisualBellType meta_prefs_get_visual_bell_type (void); 293 294 #endif 295