extensions-tool: Add '--prefs' list option

We are about to add a 'prefs' command for launching an extension's
preference dialog. As that command only makes sense for extensions
that actually have preferences, shell completion should filter the
list of extensions accordingly. To allow that, add an appropriate
list option.

https://gitlab.gnome.org/fmuellner/gnome-extensions-tool/merge_requests/2
https://gitlab.gnome.org/GNOME/gnome-shell/issues/1234
This commit is contained in:
Florian Müllner 2019-01-11 12:18:14 +01:00
parent a429fdbd08
commit d9fa389079
2 changed files with 17 additions and 1 deletions

View File

@ -31,7 +31,8 @@ typedef enum {
LIST_FLAGS_USER = 1 << 0, LIST_FLAGS_USER = 1 << 0,
LIST_FLAGS_SYSTEM = 1 << 1, LIST_FLAGS_SYSTEM = 1 << 1,
LIST_FLAGS_ENABLED = 1 << 2, LIST_FLAGS_ENABLED = 1 << 2,
LIST_FLAGS_DISABLED = 1 << 3 LIST_FLAGS_DISABLED = 1 << 3,
LIST_FLAGS_NO_PREFS = 1 << 4
} ListFilterFlags; } ListFilterFlags;
static gboolean static gboolean
@ -67,10 +68,12 @@ list_extensions (ListFilterFlags filter, DisplayFormat format)
{ {
g_autoptr (GVariantDict) info = NULL; g_autoptr (GVariantDict) info = NULL;
double type, state; double type, state;
gboolean has_prefs;
info = g_variant_dict_new (value); info = g_variant_dict_new (value);
g_variant_dict_lookup (info, "type", "d", &type); g_variant_dict_lookup (info, "type", "d", &type);
g_variant_dict_lookup (info, "state", "d", &state); g_variant_dict_lookup (info, "state", "d", &state);
g_variant_dict_lookup (info, "hasPrefs", "b", &has_prefs);
if (type == TYPE_USER && (filter & LIST_FLAGS_USER) == 0) if (type == TYPE_USER && (filter & LIST_FLAGS_USER) == 0)
continue; continue;
@ -84,6 +87,9 @@ list_extensions (ListFilterFlags filter, DisplayFormat format)
if (state != STATE_ENABLED && (filter & LIST_FLAGS_DISABLED) == 0) if (state != STATE_ENABLED && (filter & LIST_FLAGS_DISABLED) == 0)
continue; continue;
if (!has_prefs && (filter & LIST_FLAGS_NO_PREFS) == 0)
continue;
if (needs_newline) if (needs_newline)
g_print ("\n"); g_print ("\n");
@ -105,6 +111,7 @@ handle_list (int argc, char *argv[], gboolean do_help)
gboolean system = FALSE; gboolean system = FALSE;
gboolean enabled = FALSE; gboolean enabled = FALSE;
gboolean disabled = FALSE; gboolean disabled = FALSE;
gboolean has_prefs = FALSE;
GOptionEntry entries[] = { GOptionEntry entries[] = {
{ .long_name = "user", { .long_name = "user",
.arg = G_OPTION_ARG_NONE, .arg_data = &user, .arg = G_OPTION_ARG_NONE, .arg_data = &user,
@ -118,6 +125,9 @@ handle_list (int argc, char *argv[], gboolean do_help)
{ .long_name = "disabled", { .long_name = "disabled",
.arg = G_OPTION_ARG_NONE, .arg_data = &disabled, .arg = G_OPTION_ARG_NONE, .arg_data = &disabled,
.description = _("Show disabled extensions") }, .description = _("Show disabled extensions") },
{ .long_name = "prefs",
.arg = G_OPTION_ARG_NONE, .arg_data = &has_prefs,
.description = _("Show extensions with preferences") },
{ .long_name = "details", .short_name = 'd', { .long_name = "details", .short_name = 'd',
.arg = G_OPTION_ARG_NONE, .arg_data = &details, .arg = G_OPTION_ARG_NONE, .arg_data = &details,
.description = _("Print extension details") }, .description = _("Print extension details") },
@ -161,6 +171,9 @@ handle_list (int argc, char *argv[], gboolean do_help)
if (disabled || !enabled) if (disabled || !enabled)
flags |= LIST_FLAGS_DISABLED; flags |= LIST_FLAGS_DISABLED;
if (!has_prefs)
flags |= LIST_FLAGS_NO_PREFS;
return list_extensions (flags, details ? DISPLAY_DETAILED return list_extensions (flags, details ? DISPLAY_DETAILED
: DISPLAY_ONELINE) ? 0 : 2; : DISPLAY_ONELINE) ? 0 : 2;
} }

View File

@ -81,6 +81,9 @@ Displays a list of installed extensions.
*--disabled*;; *--disabled*;;
Include disabled extensions Include disabled extensions
*--prefs*;;
Only include extensions with preferences
*-d*;; *-d*;;
*--details*;; *--details*;;
Show some extra information for each extension Show some extra information for each extension