This is an automated email from the git hooks/post-receive script. b l u e s a b r e p u s h e d a c o m m i t t o b r a n c h m a s t e r in repository apps/xfce4-screensaver.
commit ee49e733a1329f3be3e6455be1686ad665f1bfe5 Author: Alexander Butenko <a.bute...@gmail.com> Date: Sun Jun 16 18:39:42 2019 -0400 cleanup kbd indicator logic Signed-off-by: Sean Davis <smd.seanda...@gmail.com> --- src/xfcekbd-config-private.h | 71 ---------- src/xfcekbd-desktop-config.c | 244 ---------------------------------- src/xfcekbd-desktop-config.h | 73 ---------- src/xfcekbd-indicator-config.c | 88 ------------ src/xfcekbd-indicator-config.h | 62 --------- src/xfcekbd-indicator-marshal.list | 1 - src/xfcekbd-indicator.c | 265 +++++-------------------------------- src/xfcekbd-keyboard-config.c | 218 ------------------------------ src/xfcekbd-keyboard-config.h | 64 --------- 9 files changed, 34 insertions(+), 1052 deletions(-) diff --git a/src/xfcekbd-config-private.h b/src/xfcekbd-config-private.h deleted file mode 100644 index df0fd62..0000000 --- a/src/xfcekbd-config-private.h +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright (C) 2006 Sergey V. Udaltsov <s...@gnome.org> - * Copyright (C) 2018 Sean Davis <bluesa...@xfce.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; see the file COPYING.LGPL. If not, - * write to the Free Software Foundation, Inc., 51 Franklin St, - * Fifth Floor, Boston, MA 02110-1301, USA. - */ - -#ifndef SRC_XFCEKBD_CONFIG_PRIVATE_H_ -#define SRC_XFCEKBD_CONFIG_PRIVATE_H_ - -#include "xfcekbd-desktop-config.h" -#include "xfcekbd-keyboard-config.h" - -#define SETTINGS_XFCONF_CHANNEL "xfce4-screensaver" - -/** - * KBD/General: Default group, assigned on window creation - */ -#define KEY_KBD_DEFAULT_GROUP "/xkb/default-group" -#define DEFAULT_KEY_KBD_DEFAULT_GROUP -1 - -/** - * KBD/General: Keep and manage separate group per window - */ -#define KEY_KBD_GROUP_PER_WINDOW "/xkb/group-per-window" -#define DEFAULT_KEY_KBD_GROUP_PER_WINDOW TRUE - -/** - * KBD/General: Save/restore indicators together with layout groups - */ -#define KEY_KBD_HANDLE_INDICATORS "/xkb/handle-indicators" -#define DEFAULT_KEY_KBD_HANDLE_INDICATORS FALSE - -/** - * KBD/General: Load extra configuration items - * Load exotic, rarely used layouts and options - */ -#define KEY_KBD_LOAD_EXTRA_ITEMS "/xkb/load-extra-items" -#define DEFAULT_KEY_KBD_LOAD_EXTRA_ITEMS FALSE - -/** - * KBD/Indicator: Secondary groups - */ -#define KEY_KBD_SECONDARY_GROUPS "/xkb/secondary-groups" -#define DEFAULT_KEY_KBD_SECONDARY_GROUPS 0 - -/** - * General config functions (private) - */ -extern void xfcekbd_keyboard_config_model_set (XfcekbdKeyboardConfig *kbd_config, - const gchar *model_name); - -extern void xfcekbd_keyboard_config_options_set (XfcekbdKeyboardConfig *kbd_config, - gint idx, - const gchar *group_name, - const gchar *option_name); - -#endif /* SRC_XFCEKBD_CONFIG_PRIVATE_H_ */ diff --git a/src/xfcekbd-desktop-config.c b/src/xfcekbd-desktop-config.c deleted file mode 100644 index 88322aa..0000000 --- a/src/xfcekbd-desktop-config.c +++ /dev/null @@ -1,244 +0,0 @@ -/* - * Copyright (C) 2006 Sergey V. Udaltsov <s...@gnome.org> - * Copyright (C) 2018 Sean Davis <bluesa...@xfce.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; see the file COPYING.LGPL. If not, - * write to the Free Software Foundation, Inc., 51 Franklin St, - * Fifth Floor, Boston, MA 02110-1301, USA. - */ - -#include <config.h> - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> - -#include <X11/keysym.h> - -#include <gio/gio.h> - -#include <libxfce4util/libxfce4util.h> -#include <xfconf/xfconf.h> - -#include "gs-debug.h" -#include "xfcekbd-desktop-config.h" -#include "xfcekbd-config-private.h" - -/* - * static common functions - */ - -static gboolean -xfcekbd_desktop_config_get_lv_descriptions (XfcekbdDesktopConfig *config, - XklConfigRegistry *registry, - const gchar **layout_ids, - const gchar **variant_ids, - gchar ***short_layout_descriptions, - gchar ***long_layout_descriptions, - gchar ***short_variant_descriptions, - gchar ***long_variant_descriptions) { - const gchar **pl, **pv; - guint total_layouts; - gchar **sld, **lld, **svd, **lvd; - XklConfigItem *item = xkl_config_item_new (); - - if (!(xkl_engine_get_features (config->engine) & XKLF_MULTIPLE_LAYOUTS_SUPPORTED)) - return FALSE; - - pl = layout_ids; - pv = variant_ids; - total_layouts = g_strv_length ((char **) layout_ids); - sld = *short_layout_descriptions = g_new0 (gchar *, total_layouts + 1); - lld = *long_layout_descriptions = g_new0 (gchar *, total_layouts + 1); - svd = *short_variant_descriptions = g_new0 (gchar *, total_layouts + 1); - lvd = *long_variant_descriptions = g_new0 (gchar *, total_layouts + 1); - - while (pl != NULL && *pl != NULL) { - xkl_debug (100, "ids: [%s][%s]\n", *pl, pv == NULL ? NULL : *pv); - - g_snprintf (item->name, sizeof item->name, "%s", *pl); - if (xkl_config_registry_find_layout (registry, item)) { - *sld = g_strdup (item->short_description); - *lld = g_strdup (item->description); - } else { - *sld = g_strdup (""); - *lld = g_strdup (""); - } - - if (pv != NULL && *pv != NULL) { - g_snprintf (item->name, sizeof item->name, "%s", *pv); - if (xkl_config_registry_find_variant (registry, *pl, item)) { - *svd = g_strdup (item->short_description); - *lvd = g_strdup (item->description); - } else { - *svd = g_strdup (""); - *lvd = g_strdup (""); - } - } else { - *svd = g_strdup (""); - *lvd = g_strdup (""); - } - - xkl_debug (100, "description: [%s][%s][%s][%s]\n", *sld, *lld, *svd, *lvd); - sld++; - lld++; - svd++; - lvd++; - - pl++; - - if (pv != NULL && *pv != NULL) - pv++; - } - - g_object_unref (item); - return TRUE; -} - -/* - * extern XfcekbdDesktopConfig config functions - */ -void -xfcekbd_desktop_config_init (XfcekbdDesktopConfig *config, - XklEngine *engine) { - memset (config, 0, sizeof (*config)); - config->channel = xfconf_channel_get (SETTINGS_XFCONF_CHANNEL); - config->engine = engine; -} - -void -xfcekbd_desktop_config_term (XfcekbdDesktopConfig *config) { - g_object_unref (config->channel); - config->channel = NULL; -} - -void -xfcekbd_desktop_config_load_from_xfconf (XfcekbdDesktopConfig *config) { - config->group_per_app = - xfconf_channel_get_bool(config->channel, - KEY_KBD_GROUP_PER_WINDOW, - DEFAULT_KEY_KBD_GROUP_PER_WINDOW); - gs_debug("group_per_app: %d\n", config->group_per_app); - - config->handle_indicators = - xfconf_channel_get_bool(config->channel, - KEY_KBD_HANDLE_INDICATORS, - DEFAULT_KEY_KBD_HANDLE_INDICATORS); - gs_debug("handle_indicators: %d\n", config->handle_indicators); - - config->load_extra_items = - xfconf_channel_get_bool(config->channel, - KEY_KBD_LOAD_EXTRA_ITEMS, - DEFAULT_KEY_KBD_LOAD_EXTRA_ITEMS); - gs_debug("load_extra_items: %d\n", config->load_extra_items); - - config->default_group = - xfconf_channel_get_int(config->channel, - KEY_KBD_DEFAULT_GROUP, - DEFAULT_KEY_KBD_DEFAULT_GROUP); - - if (config->default_group < -1 - || config->default_group >= - xkl_engine_get_max_num_groups (config->engine)) { - config->default_group = -1; - } - gs_debug("default_group: %d\n", config->default_group); -} - -gboolean -xfcekbd_desktop_config_activate (XfcekbdDesktopConfig *config) { - gboolean rv = TRUE; - - xkl_engine_set_group_per_toplevel_window (config->engine, - config->group_per_app); - xkl_engine_set_indicators_handling (config->engine, - config->handle_indicators); - xkl_engine_set_default_group (config->engine, - config->default_group); - - return rv; -} - -void -xfcekbd_desktop_config_lock_next_group (XfcekbdDesktopConfig *config) { - int group = xkl_engine_get_next_group (config->engine); - xkl_engine_lock_group (config->engine, group); -} - -/** - * xfcekbd_desktop_config_start_listen: - * @func: (scope notified): a function to call when settings are changed - */ -void -xfcekbd_desktop_config_start_listen (XfcekbdDesktopConfig *config, - GCallback func, - gpointer user_data) { - config->config_listener_id = - g_signal_connect (config->channel, "property-changed", func, - user_data); -} - -void -xfcekbd_desktop_config_stop_listen (XfcekbdDesktopConfig *config) { - g_signal_handler_disconnect (config->channel, - config->config_listener_id); - config->config_listener_id = 0; -} - -gboolean -xfcekbd_desktop_config_load_group_descriptions (XfcekbdDesktopConfig *config, - XklConfigRegistry *registry, - const gchar **layout_ids, - const gchar **variant_ids, - gchar ***short_group_names, - gchar ***full_group_names) { - gchar **sld, **lld, **svd, **lvd; - gchar **psld, **plld, **plvd; - gchar **psgn, **pfgn, **psvd; - gint total_descriptions; - - if (!xfcekbd_desktop_config_get_lv_descriptions (config, - registry, - layout_ids, - variant_ids, - &sld, - &lld, - &svd, - &lvd)) { - return False; - } - - total_descriptions = g_strv_length (sld); - - *short_group_names = psgn = g_new0 (gchar *, total_descriptions + 1); - *full_group_names = pfgn = g_new0 (gchar *, total_descriptions + 1); - - plld = lld; - psld = sld; - plvd = lvd; - psvd = svd; - while (plld != NULL && *plld != NULL) { - gchar *sd = (*psvd[0] == '\0') ? *psld : *psvd; - psld++, psvd++; - *psgn++ = g_strdup (sd); - *pfgn++ = g_strdup (xfcekbd_keyboard_config_format_full_layout - (*plld++, *plvd++)); - } - g_strfreev (sld); - g_strfreev (lld); - g_strfreev (svd); - g_strfreev (lvd); - - return True; -} diff --git a/src/xfcekbd-desktop-config.h b/src/xfcekbd-desktop-config.h deleted file mode 100644 index 7910c4a..0000000 --- a/src/xfcekbd-desktop-config.h +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright (C) 2006 Sergey V. Udaltsov <s...@gnome.org> - * Copyright (C) 2018 Sean Davis <bluesa...@xfce.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; see the file COPYING.LGPL. If not, - * write to the Free Software Foundation, Inc., 51 Franklin St, - * Fifth Floor, Boston, MA 02110-1301, USA. - */ - -#ifndef SRC_XFCEKBD_DESKTOP_CONFIG_H_ -#define SRC_XFCEKBD_DESKTOP_CONFIG_H_ - -#include <X11/Xlib.h> -#include <glib.h> -#include <gio/gio.h> -#include <libxklavier/xklavier.h> - -#include <xfconf/xfconf.h> - -/* - * General configuration - */ -typedef struct _XfcekbdDesktopConfig XfcekbdDesktopConfig; -struct _XfcekbdDesktopConfig { - gint default_group; - gboolean group_per_app; - gboolean handle_indicators; - gboolean load_extra_items; - - /* private, transient */ - XfconfChannel *channel; - int config_listener_id; - XklEngine *engine; -}; - -/* - * XfcekbdDesktopConfig functions - */ -extern void xfcekbd_desktop_config_init (XfcekbdDesktopConfig *config, - XklEngine *engine); -extern void xfcekbd_desktop_config_term (XfcekbdDesktopConfig *config); - -extern void xfcekbd_desktop_config_load_from_xfconf (XfcekbdDesktopConfig *config); - -extern gboolean xfcekbd_desktop_config_activate (XfcekbdDesktopConfig *config); - -extern gboolean xfcekbd_desktop_config_load_group_descriptions (XfcekbdDesktopConfig *config, - XklConfigRegistry *registry, - const gchar **layout_ids, - const gchar **variant_ids, - gchar ***short_group_names, - gchar ***full_group_names); - -extern void xfcekbd_desktop_config_lock_next_group (XfcekbdDesktopConfig *config); - -extern void xfcekbd_desktop_config_start_listen (XfcekbdDesktopConfig *config, - GCallback func, - gpointer user_data); - -extern void xfcekbd_desktop_config_stop_listen (XfcekbdDesktopConfig *config); - -#endif /* SRC_XFCEKBD_DESKTOP_CONFIG_H_ */ diff --git a/src/xfcekbd-indicator-config.c b/src/xfcekbd-indicator-config.c deleted file mode 100644 index d795a6b..0000000 --- a/src/xfcekbd-indicator-config.c +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Copyright (C) 2006 Sergey V. Udaltsov <s...@gnome.org> - * Copyright (C) 2018 Sean Davis <bluesa...@xfce.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; see the file COPYING.LGPL. If not, - * write to the Free Software Foundation, Inc., 51 Franklin St, - * Fifth Floor, Boston, MA 02110-1301, USA. - */ - -#include <config.h> - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> - -#include <X11/keysym.h> - -#include <libxfce4util/libxfce4util.h> -#include <xfconf/xfconf.h> - -#include "xfcekbd-keyboard-config.h" -#include "xfcekbd-indicator-config.h" -#include "xfcekbd-config-private.h" - -/* - * static applet config functions - */ - -void -xfcekbd_indicator_config_init (XfcekbdIndicatorConfig *ind_config, - XklEngine *engine) { - memset (ind_config, 0, sizeof (*ind_config)); - ind_config->channel = xfconf_channel_get (SETTINGS_XFCONF_CHANNEL); - ind_config->engine = engine; -} - -void -xfcekbd_indicator_config_term (XfcekbdIndicatorConfig *ind_config) { - g_object_unref (ind_config->channel); - ind_config->channel = NULL; -} - -void -xfcekbd_indicator_config_load_from_xfconf (XfcekbdIndicatorConfig * ind_config) { - ind_config->secondary_groups_mask = - xfconf_channel_get_int (ind_config->channel, - KEY_KBD_SECONDARY_GROUPS, - DEFAULT_KEY_KBD_SECONDARY_GROUPS); -} - -void -xfcekbd_indicator_config_activate (XfcekbdIndicatorConfig * ind_config) { - xkl_engine_set_secondary_groups_mask (ind_config->engine, - ind_config->secondary_groups_mask); -} - -/** - * xfcekbd_indicator_config_start_listen: - * @func: (scope notified): a function to call when settings are changed - */ -void -xfcekbd_indicator_config_start_listen (XfcekbdIndicatorConfig *ind_config, - GCallback func, - gpointer user_data) { - ind_config->config_listener_id = - g_signal_connect (ind_config->channel, - "property-changed", - func, - user_data); -} - -void -xfcekbd_indicator_config_stop_listen (XfcekbdIndicatorConfig *ind_config) { - g_signal_handler_disconnect (ind_config->channel, - ind_config->config_listener_id); - ind_config->config_listener_id = 0; -} diff --git a/src/xfcekbd-indicator-config.h b/src/xfcekbd-indicator-config.h deleted file mode 100644 index e139e67..0000000 --- a/src/xfcekbd-indicator-config.h +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright (C) 2006 Sergey V. Udaltsov <s...@gnome.org> - * Copyright (C) 2018 Sean Davis <bluesa...@xfce.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; see the file COPYING.LGPL. If not, - * write to the Free Software Foundation, Inc., 51 Franklin St, - * Fifth Floor, Boston, MA 02110-1301, USA. - */ - -#ifndef SRC_XFCEKBD_INDICATOR_CONFIG_H_ -#define SRC_XFCEKBD_INDICATOR_CONFIG_H_ - -#include <gtk/gtk.h> -#include <xfconf/xfconf.h> - -#include "xfcekbd-keyboard-config.h" - -/* - * Indicator configuration - */ -typedef struct _XfcekbdIndicatorConfig XfcekbdIndicatorConfig; -struct _XfcekbdIndicatorConfig { - int secondary_groups_mask; - - /* private, transient */ - XfconfChannel *channel; - int config_listener_id; - XklEngine *engine; -}; - -/* - * XfcekbdIndicatorConfig functions - - * some of them require XfcekbdKeyboardConfig as well - - * for loading approptiate images - */ -void xfcekbd_indicator_config_init (XfcekbdIndicatorConfig *ind_config, - XklEngine *engine); -void xfcekbd_indicator_config_term (XfcekbdIndicatorConfig *ind_config); - -void xfcekbd_indicator_config_load_from_xfconf (XfcekbdIndicatorConfig *ind_config); - -/* Should be updated on Indicator/Xfconf configuration change */ -void xfcekbd_indicator_config_activate (XfcekbdIndicatorConfig *ind_config); - -void xfcekbd_indicator_config_start_listen (XfcekbdIndicatorConfig *ind_config, - GCallback func, - gpointer user_data); - -void xfcekbd_indicator_config_stop_listen (XfcekbdIndicatorConfig *ind_config); - -#endif /* SRC_XFCEKBD_INDICATOR_CONFIG_H_ */ diff --git a/src/xfcekbd-indicator-marshal.list b/src/xfcekbd-indicator-marshal.list deleted file mode 100644 index 5b76282..0000000 --- a/src/xfcekbd-indicator-marshal.list +++ /dev/null @@ -1 +0,0 @@ -VOID:VOID diff --git a/src/xfcekbd-indicator.c b/src/xfcekbd-indicator.c index 8413b22..482c5ff 100644 --- a/src/xfcekbd-indicator.c +++ b/src/xfcekbd-indicator.c @@ -29,22 +29,11 @@ #include <libxfce4util/libxfce4util.h> #include "gs-debug.h" -#include "xfcekbd-desktop-config.h" #include "xfcekbd-indicator.h" -#include "xfcekbd-indicator-config.h" -#include "xfcekbd-indicator-marshal.h" typedef struct _gki_globals { XklEngine *engine; - XklConfigRegistry *registry; - - XfcekbdDesktopConfig cfg; - XfcekbdIndicatorConfig ind_cfg; - XfcekbdKeyboardConfig kbd_cfg; - const gchar *tooltips_format; - gchar **full_group_names; - gchar **short_group_names; GSList *widget_instances; gboolean redraw_queued; @@ -128,6 +117,8 @@ xfcekbd_indicator_fill (XfcekbdIndicator * gki) { static gboolean xfcekbd_indicator_key_pressed (GtkWidget *widget, GdkEventKey *event, XfcekbdIndicator *gki) { + int group; + switch (event->keyval) { case GDK_KEY_KP_Enter: case GDK_KEY_ISO_Enter: @@ -135,7 +126,9 @@ static gboolean xfcekbd_indicator_key_pressed (GtkWidget *widget, case GDK_KEY_Return: case GDK_KEY_space: case GDK_KEY_KP_Space: - xfcekbd_desktop_config_lock_next_group(&globals.cfg); + gs_debug("Switching language"); + group = xkl_engine_get_next_group (globals.engine); + xkl_engine_lock_group (globals.engine, group); globals.redraw_queued = TRUE; return TRUE; default: @@ -150,8 +143,9 @@ xfcekbd_indicator_button_pressed (GtkWidget *widget, GdkEventButton *event, XfcekbdIndicator *gki) { if (event->button == 1 && event->type == GDK_BUTTON_PRESS) { - gs_debug("Mouse button pressed on applet\n"); - xfcekbd_desktop_config_lock_next_group (&globals.cfg); + gs_debug("Switching language"); + int group = xkl_engine_get_next_group (globals.engine); + xkl_engine_lock_group (globals.engine, group); globals.redraw_queued = TRUE; return TRUE; } @@ -159,46 +153,17 @@ xfcekbd_indicator_button_pressed (GtkWidget *widget, } static gchar * -xfcekbd_indicator_extract_layout_name (int group, - XklEngine *engine, - XfcekbdKeyboardConfig *kbd_cfg, - gchar **short_group_names, - gchar **full_group_names) { - char *layout_name = NULL; - if (group < g_strv_length (short_group_names)) { - if (xkl_engine_get_features (engine) & XKLF_MULTIPLE_LAYOUTS_SUPPORTED) { - char *full_layout_name = kbd_cfg->layouts_variants[group]; - char *variant_name; - if (!xfcekbd_keyboard_config_split_items (full_layout_name, - &layout_name, - &variant_name)) { - /* just in case */ - layout_name = full_layout_name; - } +xfcekbd_indicator_extract_layout_name (int groupId) { + const gchar** layouts; - /* make it freeable */ - layout_name = g_strdup (layout_name); + layouts = xkl_engine_get_groups_names (globals.engine); - if (short_group_names != NULL) { - char *short_group_name = short_group_names[group]; - if (short_group_name != NULL && *short_group_name != '\0') { - /* drop the long name */ - g_free (layout_name); - layout_name = - g_strdup (short_group_name); - } - } - } else { - layout_name = g_strdup (full_group_names[group]); - } - } - - if (layout_name == NULL) - layout_name = g_strdup (""); - - return layout_name; + if (strlen (layouts[groupId]) < 2) + return g_strdup (""); + return g_strndup (layouts[groupId], 2); } + static gchar * xfcekbd_indicator_create_label_title (int group, GHashTable **ln2cnt_map, @@ -238,7 +203,7 @@ xfcekbd_indicator_create_label_title (int group, static GtkWidget * xfcekbd_indicator_prepare_drawing (XfcekbdIndicator *gki, - int group) { + int groupId) { GtkWidget *ebox; char *lbl_title = NULL; @@ -249,17 +214,10 @@ xfcekbd_indicator_prepare_drawing (XfcekbdIndicator *gki, ebox = gtk_event_box_new (); gtk_event_box_set_visible_window (GTK_EVENT_BOX (ebox), FALSE); - layout_name = - xfcekbd_indicator_extract_layout_name (group, - globals.engine, - &globals.kbd_cfg, - globals.short_group_names, - globals.full_group_names); + layout_name = xfcekbd_indicator_extract_layout_name (groupId); + gs_debug ("setting lang to %s", layout_name); - lbl_title = - xfcekbd_indicator_create_label_title (group, - &ln2cnt_map, - layout_name); + lbl_title = xfcekbd_indicator_create_label_title (groupId, &ln2cnt_map, layout_name); label = gtk_label_new (lbl_title); gtk_widget_set_halign (label, GTK_ALIGN_CENTER); @@ -271,7 +229,7 @@ xfcekbd_indicator_prepare_drawing (XfcekbdIndicator *gki, g_free (lbl_title); gtk_label_set_angle (GTK_LABEL (label), gki->priv->angle); - if (group + 1 == xkl_engine_get_num_groups (globals.engine)) { + if (groupId + 1 == xkl_engine_get_num_groups (globals.engine)) { g_hash_table_destroy (ln2cnt_map); ln2cnt_map = NULL; } @@ -294,15 +252,17 @@ xfcekbd_indicator_prepare_drawing (XfcekbdIndicator *gki, static void xfcekbd_indicator_update_tooltips (XfcekbdIndicator *gki) { XklState *state = xkl_engine_get_current_state (globals.engine); - gchar *buf; + const gchar** layouts = xkl_engine_get_groups_names (globals.engine); + gchar *buf; + if (state == NULL || state->group < 0 || - state->group >= g_strv_length (globals.full_group_names)) { + state->group >= g_strv_length ((gchar **)layouts)) { return; } - buf = g_strdup_printf (globals.tooltips_format, globals.full_group_names[state->group]); - + buf = g_strdup_printf (globals.tooltips_format, layouts[state->group]); + gs_debug ("setting lang to %s", layouts[state->group]); xfcekbd_indicator_set_tooltips (gki, buf); g_free (buf); } @@ -313,97 +273,6 @@ xfcekbd_indicator_parent_set (GtkWidget *gki, xfcekbd_indicator_update_tooltips (XFCEKBD_INDICATOR (gki)); } - -static void -xfcekbd_indicator_reinit_ui (XfcekbdIndicator *gki) { - xfcekbd_indicator_cleanup (gki); - xfcekbd_indicator_fill (gki); - - xfcekbd_indicator_set_current_page (gki); - - g_signal_emit_by_name (gki, "reinit-ui"); -} - -/* Should be called once for all widgets */ -static void -xfcekbd_indicator_cfg_changed (XfconfChannel *channel, - gchar *key, - gpointer user_data) { - gs_debug( "General configuration changed in Xfconf - reiniting...\n"); - xfcekbd_desktop_config_load_from_xfconf (&globals.cfg); - xfcekbd_desktop_config_activate (&globals.cfg); - ForAllIndicators () { - xfcekbd_indicator_reinit_ui (gki); - } NextIndicator (); -} - -/* Should be called once for all widgets */ -static void -xfcekbd_indicator_ind_cfg_changed (XfconfChannel *channel, - gchar *key, - gpointer user_data) { - gs_debug( "Applet configuration changed in Xfconf - reiniting...\n"); - xfcekbd_indicator_config_load_from_xfconf (&globals.ind_cfg); - xfcekbd_indicator_config_activate (&globals.ind_cfg); - - ForAllIndicators () { - xfcekbd_indicator_reinit_ui (gki); - } NextIndicator (); -} - -static void -xfcekbd_indicator_load_group_names (const gchar **layout_ids, - const gchar **variant_ids) { - if (!xfcekbd_desktop_config_load_group_descriptions (&globals.cfg, - globals.registry, - layout_ids, - variant_ids, - &globals.short_group_names, - &globals.full_group_names)) { - /* We just populate no short names (remain NULL) - - * full names are going to be used anyway */ - gint i, total_groups = xkl_engine_get_num_groups (globals.engine); - globals.full_group_names = g_new0 (gchar *, total_groups + 1); - - if (xkl_engine_get_features (globals.engine) & XKLF_MULTIPLE_LAYOUTS_SUPPORTED) { - gchar **lst = globals.kbd_cfg.layouts_variants; - for (i = 0; *lst; lst++, i++) { - globals.full_group_names[i] = g_strdup ((char *) *lst); - } - } else { - for (i = total_groups; --i >= 0;) { - globals.full_group_names[i] = g_strdup_printf ("Group %d", i); - } - } - } -} - -/* Should be called once for all widgets */ -static void -xfcekbd_indicator_kbd_cfg_callback (XfcekbdIndicator *gki) { - XklConfigRec *xklrec = xkl_config_rec_new (); - gs_debug( "XKB configuration changed on X Server - reiniting...\n"); - - xfcekbd_keyboard_config_load_from_x_current (&globals.kbd_cfg, xklrec); - - g_strfreev (globals.full_group_names); - globals.full_group_names = NULL; - - if (globals.short_group_names != NULL) { - g_strfreev (globals.short_group_names); - globals.short_group_names = NULL; - } - - xfcekbd_indicator_load_group_names ((const gchar **) xklrec->layouts, - (const gchar **) - xklrec->variants); - - ForAllIndicators () { - xfcekbd_indicator_reinit_ui (gki); - } NextIndicator (); - g_object_unref (G_OBJECT (xklrec)); -} - /* Should be called once for all applets */ static void xfcekbd_indicator_state_callback (XklEngine *engine, @@ -414,21 +283,18 @@ xfcekbd_indicator_state_callback (XklEngine *engine, if (changeType == GROUP_CHANGED) { ForAllIndicators () { - xfcekbd_indicator_set_current_page_for_group - (gki, group); + xfcekbd_indicator_set_current_page_for_group (gki, group); } NextIndicator (); } } - void xfcekbd_indicator_set_current_page (XfcekbdIndicator *gki) { XklState *cur_state; cur_state = xkl_engine_get_current_state (globals.engine); if (cur_state->group >= 0) - xfcekbd_indicator_set_current_page_for_group (gki, - cur_state->group); + xfcekbd_indicator_set_current_page_for_group (gki, cur_state->group); } void @@ -554,17 +420,14 @@ static void xfcekbd_indicator_init(XfcekbdIndicator *gki) { static void xfcekbd_indicator_finalize (GObject *obj) { XfcekbdIndicator *gki = XFCEKBD_INDICATOR (obj); - gs_debug( - "Starting the xfce-kbd-indicator widget shutdown process for %p\n", - gki); + gs_debug("Starting the xfce-kbd-indicator widget shutdown process for %p", gki); /* remove BEFORE all termination work is finished */ globals.widget_instances = g_slist_remove (globals.widget_instances, gki); xfcekbd_indicator_cleanup (gki); - gs_debug( - "The instance of xfce-kbd-indicator successfully finalized\n"); + gs_debug("The instance of xfce-kbd-indicator successfully finalized"); g_free (gki->priv); @@ -579,15 +442,6 @@ xfcekbd_indicator_global_term (void) { gs_debug( "*** Last XfcekbdIndicator instance ***\n"); xfcekbd_indicator_stop_listen (); - xfcekbd_desktop_config_stop_listen (&globals.cfg); - xfcekbd_indicator_config_stop_listen (&globals.ind_cfg); - - xfcekbd_indicator_config_term (&globals.ind_cfg); - xfcekbd_keyboard_config_term (&globals.kbd_cfg); - xfcekbd_desktop_config_term (&globals.cfg); - - g_object_unref (G_OBJECT (globals.registry)); - globals.registry = NULL; g_object_unref (G_OBJECT (globals.engine)); globals.engine = NULL; gs_debug( "*** Terminated globals *** \n"); @@ -598,82 +452,31 @@ xfcekbd_indicator_class_init (XfcekbdIndicatorClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); - gs_debug( "*** First XfcekbdIndicator instance *** \n"); + gs_debug( "*** First XfcekbdIndicator instance ***"); memset (&globals, 0, sizeof (globals)); /* Initing some global vars */ globals.tooltips_format = "%s"; - globals.redraw_queued = FALSE; /* Initing vtable */ object_class->finalize = xfcekbd_indicator_finalize; - widget_class->scroll_event = xfcekbd_indicator_scroll; widget_class->parent_set = xfcekbd_indicator_parent_set; - - /* Signals */ - g_signal_new ("reinit-ui", - XFCEKBD_TYPE_INDICATOR, - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (XfcekbdIndicatorClass, reinit_ui), - NULL, NULL, xfcekbd_indicator_VOID__VOID, - G_TYPE_NONE, 0); } static void xfcekbd_indicator_global_init (void) { - XklConfigRec *xklrec = xkl_config_rec_new (); - globals.engine = xkl_engine_get_instance(GDK_DISPLAY_XDISPLAY(gdk_display_get_default())); - if (globals.engine == NULL) { gs_debug("Libxklavier initialization error"); return; } - - g_signal_connect (globals.engine, - "X-state-changed", - G_CALLBACK (xfcekbd_indicator_state_callback), - NULL); - g_signal_connect (globals.engine, - "X-config-changed", - G_CALLBACK (xfcekbd_indicator_kbd_cfg_callback), - NULL); - - xfcekbd_desktop_config_init (&globals.cfg, globals.engine); - xfcekbd_keyboard_config_init (&globals.kbd_cfg, globals.engine); - xfcekbd_indicator_config_init (&globals.ind_cfg, globals.engine); - - xfcekbd_desktop_config_start_listen (&globals.cfg, - (GCallback) - xfcekbd_indicator_cfg_changed, - NULL); - xfcekbd_indicator_config_start_listen (&globals.ind_cfg, - (GCallback) - xfcekbd_indicator_ind_cfg_changed, - NULL); - - xfcekbd_desktop_config_load_from_xfconf (&globals.cfg); - xfcekbd_desktop_config_activate (&globals.cfg); - - globals.registry = xkl_config_registry_get_instance (globals.engine); - xkl_config_registry_load (globals.registry, globals.cfg.load_extra_items); - - xfcekbd_keyboard_config_load_from_x_current (&globals.kbd_cfg, xklrec); - - xfcekbd_indicator_config_load_from_xfconf (&globals.ind_cfg); - xfcekbd_indicator_config_activate (&globals.ind_cfg); - - xfcekbd_indicator_load_group_names ((const gchar **) xklrec->layouts, - (const gchar **) - xklrec->variants); - g_object_unref (G_OBJECT (xklrec)); - + g_signal_connect (globals.engine, "X-state-changed", + G_CALLBACK (xfcekbd_indicator_state_callback), NULL); xfcekbd_indicator_start_listen (); - - gs_debug( "*** Inited globals *** \n"); + gs_debug( "*** Inited globals ***"); } GtkWidget * diff --git a/src/xfcekbd-keyboard-config.c b/src/xfcekbd-keyboard-config.c deleted file mode 100644 index 3275096..0000000 --- a/src/xfcekbd-keyboard-config.c +++ /dev/null @@ -1,218 +0,0 @@ -/* - * Copyright (C) 2006 Sergey V. Udaltsov <s...@gnome.org> - * Copyright (C) 2018 Sean Davis <bluesa...@xfce.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; see the file COPYING.LGPL. If not, - * write to the Free Software Foundation, Inc., 51 Franklin St, - * Fifth Floor, Boston, MA 02110-1301, USA. - */ - -#include <config.h> - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> - -#include <X11/keysym.h> - -#include <libxfce4util/libxfce4util.h> - -#include "gs-debug.h" -#include "xfcekbd-config-private.h" -#include "xfcekbd-keyboard-config.h" - -/* - * XfcekbdKeyboardConfig - */ - -/* - * extern common functions - */ -static const gchar * -xfcekbd_keyboard_config_merge_items (const gchar *parent, - const gchar *child) { - static gchar buffer[XKL_MAX_CI_NAME_LENGTH * 2 - 1]; - *buffer = '\0'; - if (parent != NULL) { - if (strlen (parent) >= XKL_MAX_CI_NAME_LENGTH) - return NULL; - strcat (buffer, parent); - } - if (child != NULL && *child != 0) { - if (strlen (child) >= XKL_MAX_CI_NAME_LENGTH) - return NULL; - strcat (buffer, "\t"); - strcat (buffer, child); - } - return buffer; -} - -gboolean -xfcekbd_keyboard_config_split_items (const gchar *merged, - gchar **parent, - gchar **child) { - static gchar pbuffer[XKL_MAX_CI_NAME_LENGTH]; - static gchar cbuffer[XKL_MAX_CI_NAME_LENGTH]; - int plen, clen; - const gchar *pos; - *parent = *child = NULL; - - if (merged == NULL) - return FALSE; - - pos = strchr (merged, '\t'); - if (pos == NULL) { - plen = strlen (merged); - clen = 0; - } else { - plen = pos - merged; - clen = strlen (pos + 1); - if (clen >= XKL_MAX_CI_NAME_LENGTH) - return FALSE; - strcpy (*child = cbuffer, pos + 1); - } - if (plen >= XKL_MAX_CI_NAME_LENGTH) - return FALSE; - memcpy (*parent = pbuffer, merged, plen); - pbuffer[plen] = '\0'; - return TRUE; -} - -/* - * static XfcekbdKeyboardConfig functions - */ -static void -xfcekbd_keyboard_config_copy_from_xkl_config (XfcekbdKeyboardConfig *kbd_config, - XklConfigRec *pdata) { - char **p; - int i; - - xfcekbd_keyboard_config_model_set (kbd_config, pdata->model); - gs_debug("Loaded Kbd model: [%s]\n", pdata->model); - - /* Layouts */ - g_strfreev (kbd_config->layouts_variants); - kbd_config->layouts_variants = NULL; - if (pdata->layouts != NULL) { - char **p1; - p = pdata->layouts; - p1 = pdata->variants; - kbd_config->layouts_variants = g_new0 (gchar *, g_strv_length (pdata->layouts) + 1); - i = 0; - while (*p != NULL) { - const gchar *full_layout = xfcekbd_keyboard_config_merge_items (*p, *p1); - gs_debug("Loaded Kbd layout (with variant): [%s]\n", full_layout); - kbd_config->layouts_variants[i++] = g_strdup (full_layout); - p++; - p1++; - } - } - - /* Options */ - g_strfreev (kbd_config->options); - kbd_config->options = NULL; - - if (pdata->options != NULL) { - p = pdata->options; - kbd_config->options = g_new0 (gchar *, g_strv_length (pdata->options) + 1); - i = 0; - while (*p != NULL) { - char *option = *p; - char *delim = (option != NULL) ? strchr (option, ':') : NULL; - int len; - if ((delim != NULL) && ((len = (delim - option)) < XKL_MAX_CI_NAME_LENGTH)) { - char group[XKL_MAX_CI_NAME_LENGTH]; - strncpy (group, option, len); - group[len] = 0; - gs_debug("Loaded Kbd option: [%s][%s]\n", group, option); - xfcekbd_keyboard_config_options_set (kbd_config, i++, group, option); - } - p++; - } - } -} - -/* - * extern XfcekbdKeyboardConfig config functions - */ -void -xfcekbd_keyboard_config_init (XfcekbdKeyboardConfig *kbd_config, - XklEngine *engine) { - memset (kbd_config, 0, sizeof (*kbd_config)); - kbd_config->engine = engine; -} - -void -xfcekbd_keyboard_config_term (XfcekbdKeyboardConfig *kbd_config) { - xfcekbd_keyboard_config_model_set (kbd_config, NULL); - - g_strfreev (kbd_config->layouts_variants); - kbd_config->layouts_variants = NULL; - g_strfreev (kbd_config->options); - kbd_config->options = NULL; -} - -void -xfcekbd_keyboard_config_load_from_x_current (XfcekbdKeyboardConfig *kbd_config, - XklConfigRec *data) { - gboolean own_data = data == NULL; - gs_debug("Copying config from X(current)\n"); - if (own_data) - data = xkl_config_rec_new (); - if (xkl_config_rec_get_from_server (data, kbd_config->engine)) - xfcekbd_keyboard_config_copy_from_xkl_config (kbd_config, - data); - else - gs_debug("Could not load keyboard config from server: [%s]\n", xkl_get_last_error ()); - if (own_data) - g_object_unref (G_OBJECT (data)); -} - -void -xfcekbd_keyboard_config_model_set (XfcekbdKeyboardConfig *kbd_config, - const gchar *model_name) { - if (kbd_config->model != NULL) - g_free (kbd_config->model); - kbd_config->model = - (model_name == NULL - || model_name[0] == '\0') ? NULL : g_strdup (model_name); -} - -void -xfcekbd_keyboard_config_options_set (XfcekbdKeyboardConfig *kbd_config, - gint idx, - const gchar *group_name, - const gchar *option_name) { - const gchar *merged; - if (group_name == NULL || option_name == NULL) - return; - merged = - xfcekbd_keyboard_config_merge_items (group_name, option_name); - if (merged == NULL) - return; - kbd_config->options[idx] = g_strdup (merged); -} - -const gchar * -xfcekbd_keyboard_config_format_full_layout (const gchar *layout_descr, - const gchar *variant_descr) { - static gchar full_descr[XKL_MAX_CI_DESC_LENGTH * 2]; - if (variant_descr == NULL || variant_descr[0] == 0) - g_snprintf (full_descr, sizeof (full_descr), "%s", - layout_descr); - else - g_snprintf (full_descr, sizeof (full_descr), "%s %s", - layout_descr, variant_descr); - return full_descr; -} diff --git a/src/xfcekbd-keyboard-config.h b/src/xfcekbd-keyboard-config.h deleted file mode 100644 index ca58666..0000000 --- a/src/xfcekbd-keyboard-config.h +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright (C) 2006 Sergey V. Udaltsov <s...@gnome.org> - * Copyright (C) 2018 Sean Davis <bluesa...@xfce.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; see the file COPYING.LGPL. If not, - * write to the Free Software Foundation, Inc., 51 Franklin St, - * Fifth Floor, Boston, MA 02110-1301, USA. - */ - -#ifndef SRC_XFCEKBD_KEYBOARD_CONFIG_H_ -#define SRC_XFCEKBD_KEYBOARD_CONFIG_H_ - -#include <X11/Xlib.h> -#include <glib.h> -#include <gio/gio.h> -#include <libxklavier/xklavier.h> - -extern const gchar XFCEKBD_KEYBOARD_CONFIG_KEY_MODEL[]; -extern const gchar XFCEKBD_KEYBOARD_CONFIG_KEY_LAYOUTS[]; -extern const gchar XFCEKBD_KEYBOARD_CONFIG_KEY_OPTIONS[]; - -/* - * Keyboard Configuration - */ -typedef struct _XfcekbdKeyboardConfig XfcekbdKeyboardConfig; -struct _XfcekbdKeyboardConfig { - gchar *model; - gchar **layouts_variants; - gchar **options; - - /* private, transient */ - int config_listener_id; - XklEngine *engine; -}; - -/* - * XfcekbdKeyboardConfig functions - */ -extern void xfcekbd_keyboard_config_init (XfcekbdKeyboardConfig *kbd_config, - XklEngine *engine); -extern void xfcekbd_keyboard_config_term (XfcekbdKeyboardConfig *kbd_config); - -extern void xfcekbd_keyboard_config_load_from_x_current (XfcekbdKeyboardConfig *kbd_config, - XklConfigRec *data); - -extern gboolean xfcekbd_keyboard_config_split_items (const gchar *merged, - gchar **parent, - gchar **child); - -extern const gchar * xfcekbd_keyboard_config_format_full_layout (const gchar *layout_descr, - const gchar *variant_descr); - -#endif /* SRC_XFCEKBD_KEYBOARD_CONFIG_H_ */ -- To stop receiving notification emails like this one, please contact the administrator of this repository. _______________________________________________ Xfce4-commits mailing list Xfce4-commits@xfce.org https://mail.xfce.org/mailman/listinfo/xfce4-commits