Fix various initialization and default issues, especially for

2006-01-20  Elijah Newren  <newren gmail com>

	Fix various initialization and default issues, especially for
	--disable-gconf.  Make --disable-gconf actually work.  #326661.

	* configure.in: Fix compilation with --disable-gconf
	* src/metacity.schemas.in: Add a note that if any defaults are
	  changed in this file, src/prefs.c may need to be updated to
	  reflect the change
	* src/prefs.c: set various static global vars to the right default
	value, (meta_prefs_init): get the titlebar_font and current_theme
	handled better when not using gconf, (struct MetaSimpleKeyMapping,
	screen_string_bindings, window_string_bindings): helper vars to
	allow some keybindings to work even without gconf,
	(init_bindings): initialize bindings for the without-gconf case
	too, (init_commands): make sure these are all NULL for the
	non-gconf case so that we don't access random memory,
	(init_workspace_names): just give these all a default name for the
	non-gconf case,
	(meta_prefs_change_workspace_name): actually change the name for
	the non-gconf case too
This commit is contained in:
Elijah Newren 2006-01-20 22:42:25 +00:00 committed by Elijah Newren
parent a556a7334a
commit e272295976
4 changed files with 151 additions and 17 deletions

View File

@ -1,3 +1,25 @@
2006-01-20 Elijah Newren <newren gmail com>
Fix various initialization and default issues, especially for
--disable-gconf. Make --disable-gconf actually work. #326661.
* configure.in: Fix compilation with --disable-gconf
* src/metacity.schemas.in: Add a note that if any defaults are
changed in this file, src/prefs.c may need to be updated to
reflect the change
* src/prefs.c: set various static global vars to the right default
value, (meta_prefs_init): get the titlebar_font and current_theme
handled better when not using gconf, (struct MetaSimpleKeyMapping,
screen_string_bindings, window_string_bindings): helper vars to
allow some keybindings to work even without gconf,
(init_bindings): initialize bindings for the without-gconf case
too, (init_commands): make sure these are all NULL for the
non-gconf case so that we don't access random memory,
(init_workspace_names): just give these all a default name for the
non-gconf case,
(meta_prefs_change_workspace_name): actually change the name for
the non-gconf case too
2006-01-20 Elijah Newren <newren gmail com> 2006-01-20 Elijah Newren <newren gmail com>
More careful error handling of values returned by GConf. Fixes More careful error handling of values returned by GConf. Fixes

View File

@ -463,6 +463,9 @@ if test x$enable_gconf = xyes; then
fi fi
AM_GCONF_SOURCE_2 AM_GCONF_SOURCE_2
else
GCONF_SCHEMAS_INSTALL_TRUE='#'
GCONF_SCHEMAS_INSTALL_FALSE=
fi fi
AC_CONFIG_FILES([ AC_CONFIG_FILES([

View File

@ -1,3 +1,8 @@
<!-- WARNING: If you change _any_ defaults here, you MUST update the
corresponding static global var in prefs.c so that
running-without-GConf has the same defaults as running with
GConf. -->
<gconfschemafile> <gconfschemafile>
<schemalist> <schemalist>
@ -300,14 +305,14 @@
<locale name="C"> <locale name="C">
<short>If true, trade off usability for less resource usage</short> <short>If true, trade off usability for less resource usage</short>
<long> <long>
If true, metacity will give the user less feedback and If true, metacity will give the user less feedback and less
less sense of "direct manipulation", by using wireframes, sense of "direct manipulation", by using wireframes,
avoiding animations, or other means. This is a significant avoiding animations, or other means. This is a significant
reduction in usability for many users, but may allow reduction in usability for many users, but may allow legacy
legacy applications and terminal servers to function applications and terminal servers to function when they
when they would otherwise be impractical. However, the wireframe would otherwise be impractical. However, the wireframe
feature is disabled when accessibility is on to avoid weird desktop feature is disabled when accessibility is on to avoid weird
breakages. desktop breakages.
</long> </long>
</locale> </locale>
</schema> </schema>

View File

@ -78,7 +78,7 @@ static guint changed_idle;
#endif #endif
static GList *listeners = NULL; static GList *listeners = NULL;
static gboolean use_system_font = TRUE; static gboolean use_system_font = FALSE;
static PangoFontDescription *titlebar_font = NULL; static PangoFontDescription *titlebar_font = NULL;
static MetaVirtualModifier mouse_button_mods = Mod1Mask; static MetaVirtualModifier mouse_button_mods = Mod1Mask;
static MetaFocusMode focus_mode = META_FOCUS_MODE_CLICK; static MetaFocusMode focus_mode = META_FOCUS_MODE_CLICK;
@ -86,19 +86,19 @@ static gboolean raise_on_click = TRUE;
static char* current_theme = NULL; static char* current_theme = NULL;
static int num_workspaces = 4; static int num_workspaces = 4;
static MetaActionDoubleClickTitlebar action_double_click_titlebar = static MetaActionDoubleClickTitlebar action_double_click_titlebar =
META_ACTION_DOUBLE_CLICK_TITLEBAR_TOGGLE_SHADE; META_ACTION_DOUBLE_CLICK_TITLEBAR_TOGGLE_MAXIMIZE;
static gboolean application_based = FALSE; static gboolean application_based = FALSE;
static gboolean disable_workarounds = FALSE; static gboolean disable_workarounds = FALSE;
static gboolean auto_raise = FALSE; static gboolean auto_raise = FALSE;
static gboolean auto_raise_delay = 500; static gboolean auto_raise_delay = 500;
static gboolean provide_visual_bell = TRUE; static gboolean provide_visual_bell = FALSE;
static gboolean bell_is_audible = TRUE; static gboolean bell_is_audible = TRUE;
static gboolean reduced_resources = FALSE; static gboolean reduced_resources = FALSE;
static gboolean gnome_accessibility = FALSE; static gboolean gnome_accessibility = FALSE;
static char *cursor_theme = NULL; static char *cursor_theme = NULL;
static int cursor_size = 24; static int cursor_size = 24;
static MetaVisualBellType visual_bell_type = META_VISUAL_BELL_INVALID; static MetaVisualBellType visual_bell_type = META_VISUAL_BELL_FULLSCREEN_FLASH;
static MetaButtonLayout button_layout = { static MetaButtonLayout button_layout = {
{ {
META_BUTTON_FUNCTION_MENU, META_BUTTON_FUNCTION_MENU,
@ -141,8 +141,6 @@ static gboolean update_window_binding (const char *name,
const char *value); const char *value);
static gboolean update_screen_binding (const char *name, static gboolean update_screen_binding (const char *name,
const char *value); const char *value);
static gboolean update_binding (MetaKeyPref *binding,
const char *value);
static gboolean update_command (const char *name, static gboolean update_command (const char *name,
const char *value); const char *value);
static gboolean update_terminal_command (const char *value); static gboolean update_terminal_command (const char *value);
@ -162,6 +160,8 @@ static char* gconf_key_for_workspace_name (int i);
static void queue_changed (MetaPreference pref); static void queue_changed (MetaPreference pref);
#endif /* HAVE_GCONF */ #endif /* HAVE_GCONF */
static gboolean update_binding (MetaKeyPref *binding,
const char *value);
static void init_bindings (void); static void init_bindings (void);
static void init_commands (void); static void init_commands (void);
@ -467,6 +467,14 @@ meta_prefs_init (void)
&err); &err);
cleanup_error (&err); cleanup_error (&err);
update_cursor_size (int_val); update_cursor_size (int_val);
#else /* HAVE_GCONF */
/* Set defaults for some values that can't be set at initialization time of
* the static globals. In the case of the theme, note that there is code
* elsewhere that will do everything possible to fallback to an existing theme
* if the one here does not exist.
*/
titlebar_font = pango_font_description_from_string ("Sans Bold 10");
current_theme = g_strdup ("Atlanta");
#endif /* HAVE_GCONF */ #endif /* HAVE_GCONF */
/* Load keybindings prefs */ /* Load keybindings prefs */
@ -1173,7 +1181,6 @@ update_visual_bell_type (const char *value)
return (visual_bell_type != old_bell_type); return (visual_bell_type != old_bell_type);
} }
#endif /* HAVE_GCONF */
static gboolean static gboolean
update_visual_bell (gboolean visual_bell, gboolean audible_bell) update_visual_bell (gboolean visual_bell, gboolean audible_bell)
@ -1189,6 +1196,7 @@ update_visual_bell (gboolean visual_bell, gboolean audible_bell)
return has_changed; return has_changed;
} }
#endif /* HAVE_GCONF */
#ifdef HAVE_GCONF #ifdef HAVE_GCONF
static gboolean static gboolean
@ -1761,6 +1769,52 @@ static MetaKeyPref window_bindings[] = {
{ NULL, 0, 0, FALSE } { NULL, 0, 0, FALSE }
}; };
#ifndef HAVE_GCONF
typedef struct
{
const char *name;
const char *keybinding;
} MetaSimpleKeyMapping;
/* Name field must occur in the same order as screen_bindings, though entries
* can be skipped
*/
static MetaSimpleKeyMapping screen_string_bindings[] = {
{ META_KEYBINDING_WORKSPACE_LEFT, "<Control><Alt>Left" },
{ META_KEYBINDING_WORKSPACE_RIGHT, "<Control><Alt>Right" },
{ META_KEYBINDING_WORKSPACE_UP, "<Control><Alt>Up" },
{ META_KEYBINDING_WORKSPACE_DOWN, "<Control><Alt>Down" },
{ META_KEYBINDING_SWITCH_WINDOWS, "<Alt>Tab" },
{ META_KEYBINDING_SWITCH_PANELS, "<Control><Alt>Tab" },
{ META_KEYBINDING_CYCLE_WINDOWS, "<Alt>Escape" },
{ META_KEYBINDING_CYCLE_PANELS, "<Control><Alt>Escape" },
{ META_KEYBINDING_SHOW_DESKTOP, "<Control><Alt>d" },
{ META_KEYBINDING_PANEL_MAIN_MENU, "<Alt>F1" },
{ META_KEYBINDING_PANEL_RUN_DIALOG, "<Alt>F2" },
{ META_KEYBINDING_COMMAND_SCREENSHOT, "Print" },
{ META_KEYBINDING_COMMAND_WIN_SCREENSHOT, "<Alt>Print" },
{ 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" },
{ NULL, NULL }
};
#endif /* NOT HAVE_GCONF */
static void static void
init_bindings (void) init_bindings (void)
{ {
@ -1807,6 +1861,42 @@ init_bindings (void)
g_free (str_val); g_free (str_val);
g_free (key); g_free (key);
++i;
}
#else /* HAVE_GCONF */
int i = 0;
int which = 0;
while (window_string_bindings[i].name)
{
/* Find which window_bindings entry this window_string_bindings entry
* corresponds to.
*/
while (strcmp(window_bindings[which].name,
window_string_bindings[i].name) != 0)
which++;
/* Set the binding */
update_binding (&window_bindings[which],
window_string_bindings[i].keybinding);
++i;
}
i = 0;
which = 0;
while (screen_string_bindings[i].name)
{
/* Find which window_bindings entry this window_string_bindings entry
* corresponds to.
*/
while (strcmp(screen_bindings[which].name,
screen_string_bindings[i].name) != 0)
which++;
/* Set the binding */
update_binding (&screen_bindings[which],
screen_string_bindings[i].keybinding);
++i; ++i;
} }
#endif /* HAVE_GCONF */ #endif /* HAVE_GCONF */
@ -1838,6 +1928,10 @@ init_commands (void)
++i; ++i;
} }
#else
int i;
for (i = 0; i < MAX_COMMANDS; i++)
commands[i] = NULL;
#endif /* HAVE_GCONF */ #endif /* HAVE_GCONF */
} }
@ -1869,10 +1963,16 @@ init_workspace_names (void)
++i; ++i;
} }
#else
int i;
for (i = 0; i < MAX_REASONABLE_WORKSPACES; i++)
workspace_names[i] = g_strdup_printf (_("Workspace %d"), i + 1);
meta_topic (META_DEBUG_PREFS,
"Initialized workspace names\n");
#endif /* HAVE_GCONF */ #endif /* HAVE_GCONF */
} }
#ifdef HAVE_GCONF
static gboolean static gboolean
update_binding (MetaKeyPref *binding, update_binding (MetaKeyPref *binding,
const char *value) const char *value)
@ -1920,6 +2020,7 @@ update_binding (MetaKeyPref *binding,
return changed; return changed;
} }
#ifdef HAVE_GCONF
static const gchar* static const gchar*
relative_key (const gchar* key) relative_key (const gchar* key)
{ {
@ -2254,6 +2355,9 @@ meta_prefs_change_workspace_name (int i,
} }
g_free (key); g_free (key);
#else
g_free (workspace_names[i]);
workspace_names[i] = g_strdup (name);
#endif /* HAVE_GCONF */ #endif /* HAVE_GCONF */
} }