[gnome-flashback] input-sources: remove status icon
- From: Alberts Muktupāvels <muktupavels src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-flashback] input-sources: remove status icon
- Date: Sun, 22 Dec 2019 22:43:39 +0000 (UTC)
commit ca6928bd169902897cfee222f01fbfceb92512f8
Author: Alberts Muktupāvels <alberts muktupavels gmail com>
Date: Mon Dec 23 00:41:10 2019 +0200
input-sources: remove status icon
Functionality has been moved to system indicators applet.
data/schemas/Makefile.am | 1 -
data/schemas/org.gnome.gnome-flashback.gschema.xml | 1 -
...gnome.gnome-flashback.input-sources.gschema.xml | 32 -
.../libinput-sources/gf-input-sources.c | 872 +--------------------
po/POTFILES.in | 1 -
5 files changed, 4 insertions(+), 903 deletions(-)
---
diff --git a/data/schemas/Makefile.am b/data/schemas/Makefile.am
index 633b9db..7597273 100644
--- a/data/schemas/Makefile.am
+++ b/data/schemas/Makefile.am
@@ -13,7 +13,6 @@ gsettings_SCHEMAS = \
org.gnome.gnome-flashback.desktop.gschema.xml \
org.gnome.gnome-flashback.desktop.background.gschema.xml \
org.gnome.gnome-flashback.desktop.icons.gschema.xml \
- org.gnome.gnome-flashback.input-sources.gschema.xml \
$(NULL)
if WITH_SYSTEM_INDICATORS
diff --git a/data/schemas/org.gnome.gnome-flashback.gschema.xml
b/data/schemas/org.gnome.gnome-flashback.gschema.xml
index 51c7f17..ecda05e 100644
--- a/data/schemas/org.gnome.gnome-flashback.gschema.xml
+++ b/data/schemas/org.gnome.gnome-flashback.gschema.xml
@@ -116,6 +116,5 @@
</key>
<child schema="org.gnome.gnome-flashback.desktop" name="desktop" />
- <child schema="org.gnome.gnome-flashback.input-sources" name="input-sources" />
</schema>
</schemalist>
diff --git a/gnome-flashback/libinput-sources/gf-input-sources.c
b/gnome-flashback/libinput-sources/gf-input-sources.c
index c60e2a7..9942914 100644
--- a/gnome-flashback/libinput-sources/gf-input-sources.c
+++ b/gnome-flashback/libinput-sources/gf-input-sources.c
@@ -29,8 +29,6 @@
#include "gf-input-source-manager.h"
#include "gf-input-source.h"
-#define STATUS_ICON_SCHEMA "org.gnome.gnome-flashback.input-sources.status-icon"
-
struct _GfInputSources
{
GObject parent;
@@ -41,856 +39,25 @@ struct _GfInputSources
GfIBusManager *ibus_manager;
GfInputSourceManager *input_source_manager;
- GSettings *status_icon_settings;
-
- gchar *icon_theme_path;
-
GfInputSource *current_source;
GtkStatusIcon *status_icon;
};
G_DEFINE_TYPE (GfInputSources, gf_input_sources, G_TYPE_OBJECT)
-static void update_status_icon (GfInputSources *sources);
-
-static GString *
-cairo_path_to_string (cairo_path_t *path,
- cairo_matrix_t *matrix)
-{
- gchar *locale;
- GString *string;
- gint i;
-
- locale = g_strdup (setlocale (LC_NUMERIC, NULL));
- setlocale (LC_NUMERIC, "C");
-
- string = g_string_new (NULL);
- for (i = 0; i < path->num_data; i += path->data[i].header.length)
- {
- cairo_path_data_t *data;
- gdouble x1, y1;
- gdouble x2, y2;
- gdouble x3, y3;
-
- data = &path->data[i];
-
- switch (data->header.type)
- {
- case CAIRO_PATH_MOVE_TO:
- x1 = data[1].point.x;
- y1 = data[1].point.y;
-
- cairo_matrix_transform_point (matrix, &x1, &y1);
-
- g_string_append_printf (string, "M %f,%f ", x1, y1);
- break;
-
- case CAIRO_PATH_LINE_TO:
- x1 = data[1].point.x;
- y1 = data[1].point.y;
-
- cairo_matrix_transform_point (matrix, &x1, &y1);
-
- g_string_append_printf (string, "L %f,%f ", x1, y1);
- break;
-
- case CAIRO_PATH_CURVE_TO:
- x1 = data[1].point.x;
- y1 = data[1].point.y;
- x2 = data[2].point.x;
- y2 = data[2].point.y;
- x3 = data[3].point.x;
- y3 = data[3].point.y;
-
- cairo_matrix_transform_point (matrix, &x1, &y1);
- cairo_matrix_transform_point (matrix, &x2, &y2);
- cairo_matrix_transform_point (matrix, &x3, &y3);
-
- g_string_append_printf (string, "C %f,%f %f,%f %f,%f ",
- x1, y1, x2, y2, x3, y3);
- break;
-
- case CAIRO_PATH_CLOSE_PATH:
- g_string_append (string, "Z ");
- break;
-
- default:
- break;
- }
- }
-
- setlocale (LC_NUMERIC, locale);
- g_free (locale);
-
- return string;
-}
-
-static PangoLayout *
-get_pango_layout (const gchar *text,
- const gchar *font_family,
- gint font_weight,
- gint font_size)
-{
- GdkScreen *screen;
- PangoContext *context;
- PangoFontDescription *font_desc;
- PangoLayout *layout;
-
- screen = gdk_screen_get_default ();
- context = gdk_pango_context_get_for_screen (screen);
- font_desc = pango_font_description_new ();
-
- pango_font_description_set_family (font_desc, font_family);
- pango_font_description_set_absolute_size (font_desc, font_size * PANGO_SCALE);
- pango_font_description_set_weight (font_desc, font_weight);
- pango_font_description_set_stretch (font_desc, PANGO_STRETCH_NORMAL);
- pango_font_description_set_style (font_desc, PANGO_STYLE_NORMAL);
- pango_font_description_set_variant (font_desc, PANGO_VARIANT_NORMAL);
-
- layout = pango_layout_new (context);
- g_object_unref (context);
-
- pango_layout_set_text (layout, text, -1);
- pango_layout_set_font_description (layout, font_desc);
- pango_font_description_free (font_desc);
-
- return layout;
-}
-
-static cairo_path_t *
-get_cairo_path (const gchar *text,
- const gchar *font_family,
- gint font_weight,
- gint font_size,
- cairo_matrix_t *matrix)
-{
- PangoLayout *layout;
- cairo_surface_t *surface;
- cairo_t *cr;
- gint width;
- gint height;
- gdouble scale;
- cairo_path_t *path;
-
- layout = get_pango_layout (text, font_family, font_weight, font_size);
- surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, 16, 16);
- cr = cairo_create (surface);
-
- pango_layout_get_pixel_size (layout, &width, &height);
-
- scale = MIN (1.0, MIN (14.0 / width, 14.0 / height));
- cairo_scale (cr, scale, scale);
-
- cairo_move_to (cr, (16 - width * scale) / 2.0, (16 - height * scale) / 2.0);
-
- pango_cairo_layout_path (cr, layout);
- path = cairo_copy_path (cr);
- cairo_get_matrix (cr, matrix);
-
- cairo_destroy (cr);
- cairo_surface_destroy (surface);
- g_object_unref (layout);
-
- return path;
-}
-
-static gchar *
-generate_path_description (const gchar *text,
- const gchar *font_family,
- gint font_weight,
- gint font_size)
-{
- cairo_path_t *path;
- cairo_matrix_t matrix;
- GString *string;
-
- path = get_cairo_path (text, font_family, font_weight, font_size, &matrix);
- string = cairo_path_to_string (path, &matrix);
- cairo_path_destroy (path);
-
- return g_string_free (string, FALSE);
-}
-
-static GString *
-generate_svg (const gchar *text,
- const gchar *font_family,
- gint font_weight,
- gint font_size,
- const gchar *bg_color,
- const gchar *fg_color,
- gboolean symbolic)
-{
- gchar *path_d;
- GString *svg;
-
- path_d = generate_path_description (text, font_family, font_weight, font_size);
- svg = g_string_new ("<?xml version='1.0' encoding='utf-8' standalone='no'?>");
-
- g_string_append (svg,
- "<svg xmlns='http://www.w3.org/2000/svg' "
- "width='16' height='16' viewBox='0 0 16 16'>");
-
- if (symbolic)
- {
- g_string_append (svg, "<defs><mask id='m'>");
- g_string_append (svg,
- "<rect width='16' height='16' "
- "style='fill:#ffffff!important'/>");
-
- g_string_append_printf (svg,
- "<path d='%s' style='fill:#000000!important'/>",
- path_d);
-
- g_string_append (svg, "</mask></defs>");
- }
-
- g_string_append_printf (svg,
- "<rect x='0' y='0' width='16' height='16' "
- "rx='2.0' ry='2.0' mask='%s' style='fill:%s;'/>",
- symbolic ? "url(#m)" : "none",
- symbolic ? "#bebebe" : bg_color);
-
- if (!symbolic)
- {
- g_string_append_printf (svg, "<path d='%s' style='fill:%s'/>",
- path_d, fg_color);
- }
-
- g_free (path_d);
-
- return g_string_append (svg, "</svg>");
-}
-
-static void
-ensure_file_exists (const gchar *icon_theme_path,
- const gchar *icon_name,
- const gchar *text,
- const gchar *font_family,
- gint font_weight,
- gint font_size,
- const gchar *bg_color,
- const gchar *fg_color,
- gboolean symbolic)
-{
- gchar *filename;
- gchar *path;
-
- filename = g_strdup_printf ("%s.svg", icon_name);
- path = g_build_filename (icon_theme_path, "hicolor", "scalable",
- "status", filename, NULL);
-
- if (!g_file_test (path, G_FILE_TEST_EXISTS))
- {
- GFile *file;
- GFile *parent;
- GString *svg;
-
- file = g_file_new_for_path (path);
- parent = g_file_get_parent (file);
- svg = generate_svg (text, font_family, font_weight, font_size,
- bg_color, fg_color, symbolic);
-
- g_file_make_directory_with_parents (parent, NULL, NULL);
- g_file_replace_contents (file, svg->str, svg->len, NULL, FALSE,
- G_FILE_CREATE_NONE, NULL, NULL, NULL);
-
- utime (icon_theme_path, NULL);
- gtk_icon_theme_rescan_if_needed (gtk_icon_theme_get_default ());
-
- g_string_free (svg, TRUE);
- g_object_unref (parent);
- g_object_unref (file);
- }
-
- g_free (filename);
- g_free (path);
-}
-
-static gchar *
-generate_icon_name (const gchar *text,
- const gchar *font_family,
- gint font_weight,
- gint font_size,
- const gchar *bg_color,
- const gchar *fg_color,
- gboolean symbolic)
-{
- gchar *str;
- gchar *hash;
- GString *icon_name;
-
- str = g_strdup_printf ("%s-%s-%d-%d-%s-%s", text,
- font_family, font_weight, font_size,
- bg_color, fg_color);
-
- hash = g_compute_checksum_for_string (G_CHECKSUM_MD5, str, -1);
- g_free (str);
-
- icon_name = g_string_new (hash);
- g_free (hash);
-
- if (symbolic)
- g_string_append (icon_name, "-symbolic");
-
- return g_string_free (icon_name, FALSE);
-}
-
-static gchar *
-get_icon_name (GfInputSources *sources)
-{
- const gchar *text;
- gint font_size;
- IBusPropList *prop_list;
- gchar *font_family;
- gint font_weight;
- gchar *bg_color;
- gchar *fg_color;
- gboolean symbolic;
- gchar *icon_name;
-
- text = gf_input_source_get_short_name (sources->current_source);
- font_size = 8;
-
- prop_list = gf_input_source_get_properties (sources->current_source);
- if (prop_list != NULL)
- {
- IBusProperty *prop;
- guint index;
-
- index = 0;
- while ((prop = ibus_prop_list_get (prop_list, index++)) != NULL)
- {
- const gchar *key;
- IBusText *symbol;
- IBusText *label;
- const gchar *tmp;
-
- if (!ibus_property_get_visible (prop))
- continue;
-
- key = ibus_property_get_key (prop);
-
- if (g_strcmp0 (key, "InputMode") != 0)
- continue;
-
- symbol = ibus_property_get_symbol (prop);
- label = ibus_property_get_label (prop);
-
- if (symbol != NULL)
- tmp = ibus_text_get_text (symbol);
- else
- tmp = ibus_text_get_text (label);
-
- if (tmp != NULL && *tmp != '\0' && g_utf8_strlen (tmp, -1) < 3)
- text = tmp;
- }
- }
-
- font_family = g_settings_get_string (sources->status_icon_settings, "font-family");
- font_weight = g_settings_get_int (sources->status_icon_settings, "font-weight");
- bg_color = g_settings_get_string (sources->status_icon_settings, "bg-color");
- fg_color = g_settings_get_string (sources->status_icon_settings, "fg-color");
- symbolic = g_settings_get_boolean (sources->status_icon_settings, "symbolic");
-
- icon_name = generate_icon_name (text, font_family, font_weight, font_size,
- bg_color, fg_color, symbolic);
-
- ensure_file_exists (sources->icon_theme_path, icon_name, text,
- font_family, font_weight, font_size,
- bg_color, fg_color, symbolic);
-
- g_free (font_family);
- g_free (bg_color);
- g_free (fg_color);
-
- return icon_name;
-}
-
static void
-normal_activate_cb (GtkMenuItem *item,
- GfInputSources *sources)
-{
- IBusProperty *prop;
- const gchar *key;
- guint state;
-
- prop = g_object_get_data (G_OBJECT (item), "prop");
- if (prop == NULL)
- return;
-
- key = ibus_property_get_key (prop);
- state = ibus_property_get_state (prop);
-
- gf_ibus_manager_activate_property (sources->ibus_manager, key, state);
-}
-
-static void
-toggle_activate_cb (GtkMenuItem *item,
- GfInputSources *sources)
-{
- IBusProperty *prop;
-
- prop = g_object_get_data (G_OBJECT (item), "prop");
- if (prop == NULL)
- return;
-
- if (gtk_check_menu_item_get_active (GTK_CHECK_MENU_ITEM (item)))
- {
- ibus_property_set_state (prop, PROP_STATE_CHECKED);
- gf_ibus_manager_activate_property (sources->ibus_manager,
- ibus_property_get_key (prop),
- PROP_STATE_CHECKED);
- }
- else
- {
- ibus_property_set_state (prop, PROP_STATE_UNCHECKED);
- gf_ibus_manager_activate_property (sources->ibus_manager,
- ibus_property_get_key (prop),
- PROP_STATE_UNCHECKED);
- }
-}
-
-static void
-radio_activate_cb (GtkMenuItem *item,
- GfInputSources *sources)
-{
- IBusProperty *prop;
- gboolean active;
- IBusPropState state;
-
- prop = g_object_get_data (G_OBJECT (item), "prop");
- if (prop == NULL)
- return;
-
- active = gtk_check_menu_item_get_active (GTK_CHECK_MENU_ITEM (item));
- state = ibus_property_get_state (prop);
-
- if (active && state == PROP_STATE_CHECKED)
- return;
-
- if (!active && state == PROP_STATE_UNCHECKED)
- return;
-
- if (active)
- {
- ibus_property_set_state (prop, PROP_STATE_CHECKED);
- gf_ibus_manager_activate_property (sources->ibus_manager,
- ibus_property_get_key (prop),
- PROP_STATE_CHECKED);
-
- update_status_icon (sources);
- }
- else
- {
- ibus_property_set_state (prop, PROP_STATE_UNCHECKED);
- gf_ibus_manager_activate_property (sources->ibus_manager,
- ibus_property_get_key (prop),
- PROP_STATE_UNCHECKED);
- }
-}
-
-static GPtrArray *
-get_prop_section_items (GfInputSources *sources,
- IBusPropList *prop_list)
-{
- GPtrArray *items;
- GSList *radio_group;
- IBusProperty *prop;
- guint index;
-
- items = g_ptr_array_new ();
- radio_group = NULL;
- index = 0;
-
- while ((prop = ibus_prop_list_get (prop_list, index++)) != NULL)
- {
- IBusPropType prop_type;
- const gchar *prop_key;
- IBusText *label;
- const gchar *text;
- GtkWidget *item;
-
- if (!ibus_property_get_visible (prop))
- continue;
-
- prop_type = ibus_property_get_prop_type (prop);
- prop_key = ibus_property_get_key (prop);
- label = ibus_property_get_label (prop);
- text = ibus_text_get_text (label);
- item = NULL;
-
- switch (prop_type)
- {
- case PROP_TYPE_NORMAL:
- item = gtk_menu_item_new_with_label (text);
-
- g_signal_connect (item, "activate",
- G_CALLBACK (normal_activate_cb),
- sources);
- break;
-
- case PROP_TYPE_TOGGLE:
- item = gtk_check_menu_item_new_with_label (text);
-
- if (ibus_property_get_state (prop) == PROP_STATE_CHECKED)
- gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (item), TRUE);
-
- g_signal_connect (item, "activate",
- G_CALLBACK (toggle_activate_cb),
- sources);
- break;
-
- case PROP_TYPE_RADIO:
- item = gtk_radio_menu_item_new_with_label (radio_group, text);
- radio_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (item));
-
- if (ibus_property_get_state (prop) == PROP_STATE_CHECKED)
- gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (item), TRUE);
-
- g_signal_connect (item, "activate",
- G_CALLBACK (radio_activate_cb),
- sources);
- break;
-
- case PROP_TYPE_MENU:
- {
- IBusPropList *sub_props;
- GPtrArray *menu_items;
-
- sub_props = ibus_property_get_sub_props (prop);
- menu_items = get_prop_section_items (sources, sub_props);
-
- if (menu_items->len > 0)
- {
- GtkWidget *submenu;
- guint i;
-
- submenu = gtk_menu_new ();
- for (i = 0; i < menu_items->len; i++)
- {
- GtkWidget *submenu_item;
-
- submenu_item = g_ptr_array_index (menu_items, i);
- gtk_menu_shell_append (GTK_MENU_SHELL (submenu), submenu_item);
- }
-
- item = gtk_menu_item_new_with_label (text);
- gtk_menu_item_set_submenu (GTK_MENU_ITEM (item), submenu);
- }
-
- g_ptr_array_unref (menu_items);
- }
- break;
-
- case PROP_TYPE_SEPARATOR:
- item = gtk_separator_menu_item_new ();
- break;
-
- default:
- g_warning ("IBus property %s has invalid type %d",
- prop_key, prop_type);
- break;
- }
-
- if (item != NULL)
- {
- gboolean sensitive;
-
- g_object_set_data (G_OBJECT (item), "prop", prop);
-
- sensitive = ibus_property_get_sensitive (prop);
- gtk_widget_set_sensitive (item, sensitive);
-
- g_ptr_array_add (items, item);
- }
- }
-
- return items;
-}
-
-static void
-build_prop_section (GfInputSources *sources,
- GtkMenu *menu)
-{
- IBusPropList *prop_list;
- GPtrArray *items;
-
- prop_list = gf_input_source_get_properties (sources->current_source);
-
- if (!prop_list)
- return;
-
- items = get_prop_section_items (sources, prop_list);
-
- if (items->len > 0)
- {
- GtkWidget *separator;
- guint i;
-
- separator = gtk_separator_menu_item_new ();
- gtk_menu_shell_append (GTK_MENU_SHELL (menu), separator);
-
- for (i = 0; i < items->len; i++)
- {
- GtkWidget *item;
-
- item = g_ptr_array_index (items, i);
- gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
- }
- }
-
- g_ptr_array_unref (items);
-}
-
-static void
-watch_child (GPid pid,
- gint status,
- gpointer user_data)
-{
-}
-
-static void
-spawn_keyboard_display (const gchar *description)
-{
- gchar **argv;
- GSpawnFlags flags;
- GPid pid;
- GError *error;
-
- argv = g_new0 (gchar *, 4);
- flags = G_SPAWN_SEARCH_PATH | G_SPAWN_DO_NOT_REAP_CHILD;
- error = NULL;
-
- argv[0] = g_strdup ("gkbd-keyboard-display");
- argv[1] = g_strdup ("-l");
- argv[2] = g_strdup (description);
- argv[3] = NULL;
-
- g_spawn_async (NULL, argv, NULL, flags, NULL, NULL, &pid, &error);
- g_strfreev (argv);
-
- if (error != NULL)
- {
- g_warning ("%s", error->message);
- g_error_free (error);
-
- return;
- }
-
- g_child_watch_add (pid, watch_child, NULL);
-}
-
-static void
-activate_cb (GtkMenuItem *menuitem,
- GfInputSource *source)
-{
- gf_input_source_activate (source, TRUE);
-}
-
-static void
-show_layout_cb (GtkMenuItem *menuitem,
- gpointer user_data)
-{
- GfInputSources *sources;
- GfInputSource *source;
- const gchar *type;
- const gchar *id;
- GnomeXkbInfo *info;
- const gchar *xkb_layout;
- const gchar *xkb_variant;
- gchar *description;
-
- sources = GF_INPUT_SOURCES (user_data);
- source = sources->current_source;
-
- type = gf_input_source_get_source_type (source);
- id = gf_input_source_get_id (source);
-
- info = NULL;
- xkb_layout = "";
- xkb_variant = "";
-
- if (g_strcmp0 (type, INPUT_SOURCE_TYPE_XKB) == 0)
- {
- info = gnome_xkb_info_new ();
-
- gnome_xkb_info_get_layout_info (info, id, NULL, NULL,
- &xkb_layout, &xkb_variant);
- }
- else if (g_strcmp0 (type, INPUT_SOURCE_TYPE_IBUS) == 0)
- {
- IBusEngineDesc *engine_desc;
-
- engine_desc = gf_ibus_manager_get_engine_desc (sources->ibus_manager, id);
-
- if (engine_desc)
- {
- xkb_layout = ibus_engine_desc_get_layout (engine_desc);
- xkb_variant = ibus_engine_desc_get_layout_variant (engine_desc);
- }
- }
-
- if (!xkb_layout || *xkb_layout == '\0')
- return;
-
- if (xkb_variant && *xkb_variant != '\0')
- description = g_strdup_printf ("%s\t%s", xkb_layout, xkb_variant);
- else
- description = g_strdup (xkb_layout);
-
- g_clear_object (&info);
-
- spawn_keyboard_display (description);
- g_free (description);
-}
-
-static void
-status_icon_activate_cb (GtkStatusIcon *status_icon,
- gpointer user_data)
-{
- GfInputSources *sources;
- GtkWidget *menu;
- GfInputSourceManager *manager;
- GList *input_sources;
- GList *is;
- GtkWidget *item;
- GtkWidget *separator;
-
- sources = GF_INPUT_SOURCES (user_data);
-
- menu = gtk_menu_new ();
-
- manager = sources->input_source_manager;
- input_sources = gf_input_source_manager_get_input_sources (manager);
-
- for (is = input_sources; is != NULL; is = g_list_next (is))
- {
- GfInputSource *source;
- GtkWidget *hbox;
- const gchar *text;
- GtkWidget *label;
-
- source = GF_INPUT_SOURCE (is->data);
-
- item = gtk_check_menu_item_new ();
-
- hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
- gtk_container_add (GTK_CONTAINER (item), hbox);
-
- text = gf_input_source_get_display_name (source);
- label = gtk_label_new (text);
- gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 10);
- gtk_label_set_xalign (GTK_LABEL (label), 0.0);
-
- text = gf_input_source_get_short_name (source);
- label = gtk_label_new (text);
- gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 10);
- gtk_label_set_xalign (GTK_LABEL (label), 0.0);
-
- if (source == sources->current_source)
- gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (item), TRUE);
- gtk_check_menu_item_set_draw_as_radio (GTK_CHECK_MENU_ITEM (item), TRUE);
-
- g_signal_connect (item, "activate", G_CALLBACK (activate_cb), source);
- gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
- }
-
- g_list_free (input_sources);
-
- build_prop_section (sources, GTK_MENU (menu));
-
- separator = gtk_separator_menu_item_new ();
- gtk_menu_shell_append (GTK_MENU_SHELL (menu), separator);
-
- item = gtk_menu_item_new_with_label (_("Show Keyboard Layout"));
- g_signal_connect (item, "activate", G_CALLBACK (show_layout_cb), sources);
- gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
-
- G_GNUC_BEGIN_IGNORE_DEPRECATIONS
-
- gtk_widget_show_all (menu);
- gtk_menu_popup (GTK_MENU (menu), NULL, NULL,
- gtk_status_icon_position_menu, status_icon,
- 0, gtk_get_current_event_time ());
-
- G_GNUC_END_IGNORE_DEPRECATIONS
-}
-
-static void
-update_status_icon (GfInputSources *sources)
+current_source_changed_cb (GfInputSourceManager *manager,
+ GfInputSource *old_source,
+ GfInputSources *sources)
{
- GfInputSourceManager *manager;
GfInputSource *source;
- GList *input_sources;
- IBusPropList *prop_list;
- const gchar *display_name;
- gchar *icon_name;
-
- manager = sources->input_source_manager;
- g_clear_object (&sources->current_source);
source = gf_input_source_manager_get_current_source (manager);
- if (source == NULL)
- {
- g_clear_object (&sources->status_icon);
- return;
- }
-
- input_sources = gf_input_source_manager_get_input_sources (manager);
- prop_list = gf_input_source_get_properties (source);
-
- if (g_list_length (input_sources) < 2 && !prop_list)
- {
- g_list_free (input_sources);
- return;
- }
- else
- {
- g_list_free (input_sources);
- }
-
+ g_clear_object (&sources->current_source);
sources->current_source = g_object_ref (source);
- if (sources->status_icon == NULL)
- {
- G_GNUC_BEGIN_IGNORE_DEPRECATIONS
- sources->status_icon = gtk_status_icon_new ();
- G_GNUC_END_IGNORE_DEPRECATIONS
-
- g_signal_connect_swapped (sources->status_icon, "size-changed",
- G_CALLBACK (update_status_icon), sources);
- g_signal_connect (sources->status_icon, "activate",
- G_CALLBACK (status_icon_activate_cb), sources);
- }
-
- display_name = gf_input_source_get_display_name (source);
- icon_name = get_icon_name (sources);
-
- G_GNUC_BEGIN_IGNORE_DEPRECATIONS
- gtk_status_icon_set_title (sources->status_icon, _("Keyboard"));
- gtk_status_icon_set_tooltip_text (sources->status_icon, display_name);
- gtk_status_icon_set_from_icon_name (sources->status_icon, icon_name);
- G_GNUC_END_IGNORE_DEPRECATIONS
-
- g_free (icon_name);
-}
-
-static void
-current_source_changed_cb (GfInputSourceManager *manager,
- GfInputSource *old_source,
- GfInputSources *sources)
-{
gf_input_sources_gen_emit_changed (sources->input_sources);
- update_status_icon (sources);
-}
-
-static void
-status_icon_settings_changed_cb (GSettings *settings,
- const gchar *key,
- GfInputSources *sources)
-{
- update_status_icon (sources);
}
static void
@@ -1442,26 +609,11 @@ gf_input_sources_dispose (GObject *object)
g_clear_object (&sources->ibus_manager);
g_clear_object (&sources->input_source_manager);
- g_clear_object (&sources->status_icon_settings);
-
g_clear_object (&sources->current_source);
- g_clear_object (&sources->status_icon);
G_OBJECT_CLASS (gf_input_sources_parent_class)->dispose (object);
}
-static void
-gf_input_sources_finalize (GObject *object)
-{
- GfInputSources *sources;
-
- sources = GF_INPUT_SOURCES (object);
-
- g_clear_pointer (&sources->icon_theme_path, g_free);
-
- G_OBJECT_CLASS (gf_input_sources_parent_class)->finalize (object);
-}
-
static void
gf_input_sources_class_init (GfInputSourcesClass *sources_class)
{
@@ -1470,14 +622,11 @@ gf_input_sources_class_init (GfInputSourcesClass *sources_class)
object_class = G_OBJECT_CLASS (sources_class);
object_class->dispose = gf_input_sources_dispose;
- object_class->finalize = gf_input_sources_finalize;
}
static void
gf_input_sources_init (GfInputSources *sources)
{
- const gchar *cache_dir;
-
sources->input_sources = gf_input_sources_gen_skeleton_new ();
sources->bus_name_id = g_bus_own_name (G_BUS_TYPE_SESSION,
@@ -1493,22 +642,9 @@ gf_input_sources_init (GfInputSources *sources)
sources->ibus_manager = gf_ibus_manager_new ();
sources->input_source_manager = gf_input_source_manager_new (sources->ibus_manager);
- sources->status_icon_settings = g_settings_new (STATUS_ICON_SCHEMA);
-
- cache_dir = g_get_user_cache_dir ();
- sources->icon_theme_path = g_build_filename (cache_dir, "gnome-flashback",
- "input-sources", "icons",
- NULL);
-
- gtk_icon_theme_append_search_path (gtk_icon_theme_get_default (),
- sources->icon_theme_path);
-
g_signal_connect (sources->input_source_manager, "current-source-changed",
G_CALLBACK (current_source_changed_cb), sources);
- g_signal_connect (sources->status_icon_settings, "changed",
- G_CALLBACK (status_icon_settings_changed_cb), sources);
-
gf_input_source_manager_reload (sources->input_source_manager);
}
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 48d78b5..e40930e 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -10,7 +10,6 @@ data/schemas/org.gnome.gnome-flashback.gschema.xml
data/schemas/org.gnome.gnome-flashback.desktop.gschema.xml
data/schemas/org.gnome.gnome-flashback.desktop.background.gschema.xml
data/schemas/org.gnome.gnome-flashback.desktop.icons.gschema.xml
-data/schemas/org.gnome.gnome-flashback.input-sources.gschema.xml
data/schemas/org.gnome.gnome-flashback.system-indicators.input-source.gschema.xml
data/ui/gf-confirm-display-change-dialog.ui
data/xsessions/gnome-flashback-compiz.desktop.in.in
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]