diff options
Diffstat (limited to 'src/core/main.c')
-rw-r--r-- | src/core/main.c | 113 |
1 files changed, 105 insertions, 8 deletions
diff --git a/src/core/main.c b/src/core/main.c index 7e6d58ec..5b62b461 100644 --- a/src/core/main.c +++ b/src/core/main.c @@ -178,8 +178,79 @@ typedef struct gboolean composite; gboolean no_composite; gboolean no_force_fullscreen; + + MetaCompositorType compositor; + gboolean compositor_set; } MetaArguments; +static gboolean +option_composite_cb (const char *option_name, + const char *value, + gpointer data, + GError **error) +{ + MetaArguments *args; + + args = data; + args->composite = TRUE; + + g_warning (_("Option “%s” is deprecated, use the “--compositor” instead."), + option_name); + + return TRUE; +} + +static gboolean +option_no_composite_cb (const char *option_name, + const char *value, + gpointer data, + GError **error) +{ + MetaArguments *args; + + args = data; + args->no_composite = TRUE; + + g_warning (_("Option “%s” is deprecated, use the “--compositor” instead."), + option_name); + + return TRUE; +} + +static gboolean +option_compositior_cb (const char *option_name, + const char *value, + gpointer data, + GError **error) +{ + MetaArguments *args; + + args = data; + + if (g_strcmp0 (value, "none") == 0) + { + args->compositor = META_COMPOSITOR_TYPE_NONE; + } + else if (g_strcmp0 (value, "xrender") == 0) + { + args->compositor = META_COMPOSITOR_TYPE_XRENDER; + } + else + { + g_set_error (error, + G_OPTION_ERROR, + G_OPTION_ERROR_FAILED, + _("“%s” is not a valid compositor"), + value); + + return FALSE; + } + + args->compositor_set = TRUE; + + return TRUE; +} + /** * Parses argc and argv and returns the * arguments that Metacity understands in meta_args. @@ -196,8 +267,7 @@ static void meta_parse_options (int *argc, char ***argv, MetaArguments *meta_args) { - MetaArguments my_args = {NULL, NULL, NULL, - FALSE, FALSE, FALSE, FALSE, FALSE}; + MetaArguments my_args = { 0 }; GOptionEntry options[] = { { "sm-disable", 0, 0, G_OPTION_ARG_NONE, @@ -241,18 +311,33 @@ meta_parse_options (int *argc, char ***argv, NULL }, { - "composite", 'c', G_OPTION_ARG_NONE, G_OPTION_ARG_NONE, - &my_args.composite, + "composite", + 'c', + G_OPTION_FLAG_NO_ARG, + G_OPTION_ARG_CALLBACK, + option_composite_cb, N_("Turn compositing on"), NULL }, { - "no-composite", 0, G_OPTION_ARG_NONE, G_OPTION_ARG_NONE, - &my_args.no_composite, + "no-composite", + 0, + G_OPTION_FLAG_NO_ARG, + G_OPTION_ARG_CALLBACK, + option_no_composite_cb, N_("Turn compositing off"), NULL }, { + "compositor", + 0, + G_OPTION_FLAG_NONE, + G_OPTION_ARG_CALLBACK, + option_compositior_cb, + N_("Compositor to use"), + "COMPOSITOR" + }, + { "no-force-fullscreen", 0, G_OPTION_ARG_NONE, G_OPTION_ARG_NONE, &my_args.no_force_fullscreen, N_("Don't make fullscreen windows that are maximized and have no decorations"), @@ -261,9 +346,12 @@ meta_parse_options (int *argc, char ***argv, {NULL} }; GOptionContext *ctx; + GOptionGroup *group; GError *error = NULL; ctx = g_option_context_new (NULL); + group = g_option_group_new (NULL, NULL, NULL, &my_args, NULL); + g_option_context_set_main_group (ctx, group); g_option_context_add_main_entries (ctx, options, "metacity"); if (!g_option_context_parse (ctx, argc, argv, &error)) { @@ -455,8 +543,17 @@ main (int argc, char **argv) g_free (meta_args.display_name); g_free (meta_args.client_id); - if (meta_args.composite || meta_args.no_composite) - meta_prefs_set_compositing_manager (meta_args.composite); + if (meta_args.compositor_set) + { + meta_prefs_set_compositor (meta_args.compositor); + } + else if (meta_args.composite || meta_args.no_composite) + { + if (meta_args.composite) + meta_prefs_set_compositor (META_COMPOSITOR_TYPE_XRENDER); + else + meta_prefs_set_compositor (META_COMPOSITOR_TYPE_NONE); + } if (meta_args.no_force_fullscreen) meta_prefs_set_force_fullscreen (FALSE); |