[Xfce4-commits] [panel-plugins/xfce4-xkb-plugin] 01/02: Make caps lock indicator configurable

noreply at xfce.org noreply at xfce.org
Sat Jul 1 23:57:28 CEST 2017


This is an automated email from the git hooks/post-receive script.

n   i   n   e   t   l   s       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 panel-plugins/xfce4-xkb-plugin.

commit d418859b2c1878ed3a228835503323387880e75b
Author: Viktor Odintsev <zakhams at gmail.com>
Date:   Thu Jun 29 00:04:15 2017 +0300

    Make caps lock indicator configurable
---
 panel-plugin/xkb-cairo.c      |  4 ++--
 panel-plugin/xkb-cairo.h      |  2 +-
 panel-plugin/xkb-dialog.c     | 56 +++++++++++++++++++++++++++++++++++--------
 panel-plugin/xkb-modifier.c   | 18 +++++++-------
 panel-plugin/xkb-modifier.h   |  2 +-
 panel-plugin/xkb-plugin.c     | 40 +++++++++++--------------------
 panel-plugin/xkb-properties.h |  1 +
 panel-plugin/xkb-xfconf.c     | 40 +++++++++++++++++++++++++++++--
 panel-plugin/xkb-xfconf.h     |  1 +
 9 files changed, 113 insertions(+), 51 deletions(-)

diff --git a/panel-plugin/xkb-cairo.c b/panel-plugin/xkb-cairo.c
index 135dd22..9939b96 100644
--- a/panel-plugin/xkb-cairo.c
+++ b/panel-plugin/xkb-cairo.c
@@ -230,7 +230,7 @@ xkb_cairo_draw_label_system (cairo_t                    *cr,
                              gint                        actual_width,
                              gint                        actual_height,
                              gint                        variant_markers_count,
-                             gboolean                    capslock_enabled,
+                             gboolean                    caps_lock_enabled,
                              const PangoFontDescription *desc,
                              GdkRGBA                     rgba)
 {
@@ -279,7 +279,7 @@ xkb_cairo_draw_label_system (cairo_t                    *cr,
       cairo_fill (cr);
     }
 
-  if (capslock_enabled)
+  if (caps_lock_enabled)
     {
       y = layouty - radius;
 
diff --git a/panel-plugin/xkb-cairo.h b/panel-plugin/xkb-cairo.h
index d90b70d..87b54b9 100644
--- a/panel-plugin/xkb-cairo.h
+++ b/panel-plugin/xkb-cairo.h
@@ -51,7 +51,7 @@ void        xkb_cairo_draw_label_system     (cairo_t                        *cr,
                                              gint                            actual_width,
                                              gint                            actual_height,
                                              gint                            variant_markers_count,
-                                             gboolean                        capslock_enabled,
+                                             gboolean                        caps_lock_enabled,
                                              const PangoFontDescription     *desc,
                                              GdkRGBA                         rgba);
 
diff --git a/panel-plugin/xkb-dialog.c b/panel-plugin/xkb-dialog.c
index 885cb12..e63ad1a 100644
--- a/panel-plugin/xkb-dialog.c
+++ b/panel-plugin/xkb-dialog.c
@@ -36,16 +36,28 @@
 
 
 static gboolean
-xkb_dialog_transform_scale_range (GBinding     *binding,
-                                  const GValue *from_value,
-                                  GValue       *to_value,
-                                  gpointer      user_data)
+xkb_dialog_transform_scale_range_for_display_type (GBinding     *binding,
+                                                   const GValue *from_value,
+                                                   GValue       *to_value,
+                                                   gpointer      user_data)
 {
   gint display_type = g_value_get_int (from_value);
-
   g_value_set_boolean (to_value,
                        display_type == DISPLAY_TYPE_IMAGE || display_type == DISPLAY_TYPE_TEXT);
+  return TRUE;
+}
+
 
+
+static gboolean
+xkb_dialog_transform_scale_range_for_caps_lock_indicator (GBinding     *binding,
+                                                          const GValue *from_value,
+                                                          GValue       *to_value,
+                                                          gpointer      user_data)
+{
+  gint display_type = g_value_get_int (from_value);
+  g_value_set_boolean (to_value,
+                       display_type == DISPLAY_TYPE_SYSTEM);
   return TRUE;
 }
 
@@ -59,6 +71,7 @@ xkb_dialog_configure_plugin (XfcePanelPlugin *plugin,
   GtkWidget *display_type_combo;
   GtkWidget *display_name_combo;
   GtkWidget *display_scale_range;
+  GtkWidget *caps_lock_indicator_switch;
   GtkWidget *display_tooltip_icon_switch;
   GtkWidget *group_policy_combo;
   GtkWidget *vbox, *frame, *bin, *grid, *label;
@@ -132,6 +145,18 @@ xkb_dialog_configure_plugin (XfcePanelPlugin *plugin,
 
   grid_vertical++;
 
+  label = gtk_label_new (_("Caps Lock indicator:"));
+  gtk_label_set_xalign (GTK_LABEL (label), 0.f);
+  gtk_widget_set_hexpand (label, TRUE);
+  gtk_grid_attach (GTK_GRID (grid), label, 0, grid_vertical, 1, 1);
+
+  caps_lock_indicator_switch = gtk_switch_new ();
+  gtk_widget_set_halign (caps_lock_indicator_switch, GTK_ALIGN_END);
+  gtk_widget_set_valign (caps_lock_indicator_switch, GTK_ALIGN_CENTER);
+  gtk_grid_attach (GTK_GRID (grid), caps_lock_indicator_switch, 1, grid_vertical, 1, 1);
+
+  grid_vertical++;
+
   label = gtk_label_new (_("Tooltip icon:"));
   gtk_label_set_xalign (GTK_LABEL (label), 0.f);
   gtk_widget_set_hexpand (label, TRUE);
@@ -173,11 +198,6 @@ xkb_dialog_configure_plugin (XfcePanelPlugin *plugin,
   g_signal_connect ((gpointer) settings_dialog, "response",
                     G_CALLBACK (gtk_widget_destroy), NULL);
 
-  g_object_bind_property_full (G_OBJECT (display_type_combo), "active",
-                               G_OBJECT (display_scale_range), "sensitive",
-                               G_BINDING_SYNC_CREATE,
-                               xkb_dialog_transform_scale_range, NULL, NULL, NULL);
-
   g_object_bind_property (G_OBJECT (config), DISPLAY_TYPE,
                           G_OBJECT (display_type_combo), "active",
                           G_BINDING_SYNC_CREATE | G_BINDING_BIDIRECTIONAL);
@@ -190,6 +210,10 @@ xkb_dialog_configure_plugin (XfcePanelPlugin *plugin,
                           G_OBJECT (gtk_range_get_adjustment (GTK_RANGE (display_scale_range))), "value",
                           G_BINDING_SYNC_CREATE | G_BINDING_BIDIRECTIONAL);
 
+  g_object_bind_property (G_OBJECT (config), CAPS_LOCK_INDICATOR,
+                          G_OBJECT (caps_lock_indicator_switch), "active",
+                          G_BINDING_SYNC_CREATE | G_BINDING_BIDIRECTIONAL);
+
   g_object_bind_property (G_OBJECT (config), DISPLAY_TOOLTIP_ICON,
                           G_OBJECT (display_tooltip_icon_switch), "active",
                           G_BINDING_SYNC_CREATE | G_BINDING_BIDIRECTIONAL);
@@ -198,6 +222,18 @@ xkb_dialog_configure_plugin (XfcePanelPlugin *plugin,
                           G_OBJECT (group_policy_combo), "active",
                           G_BINDING_SYNC_CREATE | G_BINDING_BIDIRECTIONAL);
 
+  g_object_bind_property_full (G_OBJECT (display_type_combo), "active",
+                               G_OBJECT (display_scale_range), "sensitive",
+                               G_BINDING_SYNC_CREATE,
+                               xkb_dialog_transform_scale_range_for_display_type,
+                               NULL, NULL, NULL);
+
+  g_object_bind_property_full (G_OBJECT (display_type_combo), "active",
+                               G_OBJECT (caps_lock_indicator_switch), "sensitive",
+                               G_BINDING_SYNC_CREATE,
+                               xkb_dialog_transform_scale_range_for_caps_lock_indicator,
+                               NULL, NULL, NULL);
+
   gtk_widget_show (settings_dialog);
 }
 
diff --git a/panel-plugin/xkb-modifier.c b/panel-plugin/xkb-modifier.c
index 0c51bb2..c43395b 100644
--- a/panel-plugin/xkb-modifier.c
+++ b/panel-plugin/xkb-modifier.c
@@ -36,7 +36,7 @@ struct _XkbModifier
   GObject              __parent__;
 
   gint                 xkb_event_type;
-  gboolean             capslock_enabled;
+  gboolean             caps_lock_enabled;
 };
 
 static GdkFilterReturn   xkb_modifier_handle_xevent            (GdkXEvent            *xev,
@@ -80,7 +80,7 @@ static void
 xkb_modifier_init (XkbModifier *modifier)
 {
   modifier->xkb_event_type = 0;
-  modifier->capslock_enabled = FALSE;
+  modifier->caps_lock_enabled = FALSE;
 }
 
 
@@ -91,12 +91,12 @@ xkb_modifier_new (void)
   XkbModifier *modifier;
   Display     *display;
   XkbDescRec  *xkb_desc;
-  gint         i, states, capslock_mask;
+  gint         i, states, caps_lock_mask;
   gchar       *atom_name;
 
   modifier = g_object_new (TYPE_XKB_MODIFIER, NULL);
 
-  /* obtain xkb_event type and capslock state */
+  /* obtain xkb_event type and caps lock state */
   display = XOpenDisplay (NULL);
   if (display != NULL)
     {
@@ -112,8 +112,8 @@ xkb_modifier_new (void)
                     {
                       if (XkbGetIndicatorState (display, XkbUseCoreKbd, &states) == Success)
                         {
-                          capslock_mask = 1 << i;
-                          modifier->capslock_enabled = (states & capslock_mask) == capslock_mask;
+                          caps_lock_mask = 1 << i;
+                          modifier->caps_lock_enabled = (states & caps_lock_mask) == caps_lock_mask;
                         }
 
                       break;
@@ -167,7 +167,7 @@ xkb_modifier_handle_xevent (GdkXEvent *xev,
       if (display != NULL)
         {
           modifier_flags = XkbKeysymToModifiers (display, XK_Caps_Lock);
-          modifier->capslock_enabled = (state_event->locked_mods & modifier_flags) == modifier_flags;
+          modifier->caps_lock_enabled = (state_event->locked_mods & modifier_flags) == modifier_flags;
           XCloseDisplay (display);
 
           g_signal_emit (G_OBJECT (modifier),
@@ -182,9 +182,9 @@ xkb_modifier_handle_xevent (GdkXEvent *xev,
 
 
 gboolean
-xkb_modifier_get_capslock_enabled (XkbModifier *modifier)
+xkb_modifier_get_caps_lock_enabled (XkbModifier *modifier)
 {
   g_return_val_if_fail (IS_XKB_MODIFIER (modifier), 0);
 
-  return modifier->capslock_enabled;
+  return modifier->caps_lock_enabled;
 }
diff --git a/panel-plugin/xkb-modifier.h b/panel-plugin/xkb-modifier.h
index c5a4970..dbb4ccc 100644
--- a/panel-plugin/xkb-modifier.h
+++ b/panel-plugin/xkb-modifier.h
@@ -41,7 +41,7 @@ GType             xkb_modifier_get_type                     (void)
 
 XkbModifier      *xkb_modifier_new                          (void);
 
-gboolean          xkb_modifier_get_capslock_enabled         (XkbModifier     *modifier);
+gboolean          xkb_modifier_get_caps_lock_enabled        (XkbModifier     *modifier);
 
 G_END_DECLS
 
diff --git a/panel-plugin/xkb-plugin.c b/panel-plugin/xkb-plugin.c
index d0f3368..574bb26 100644
--- a/panel-plugin/xkb-plugin.c
+++ b/panel-plugin/xkb-plugin.c
@@ -119,9 +119,7 @@ static gboolean     xkb_plugin_layout_image_draw        (GtkWidget        *widge
                                                          cairo_t          *cr,
                                                          XkbPlugin        *plugin);
 
-static void         xkb_plugin_display_type_changed     (XkbPlugin        *plugin);
-static void         xkb_plugin_display_name_changed     (XkbPlugin        *plugin);
-static void         xkb_plugin_display_scale_changed    (XkbPlugin        *plugin);
+static void         xkb_plugin_update_size_allocation   (XkbPlugin        *plugin);
 
 /* ================================================================== *
  *                        Implementation                              *
@@ -175,15 +173,19 @@ xkb_plugin_construct (XfcePanelPlugin *plugin)
 
   g_signal_connect_swapped (G_OBJECT (xkb_plugin->config),
                             "notify::" DISPLAY_TYPE,
-                            G_CALLBACK (xkb_plugin_display_type_changed),
+                            G_CALLBACK (xkb_plugin_update_size_allocation),
                             xkb_plugin);
   g_signal_connect_swapped (G_OBJECT (xkb_plugin->config),
                             "notify::" DISPLAY_NAME,
-                            G_CALLBACK (xkb_plugin_display_name_changed),
+                            G_CALLBACK (xkb_plugin_refresh_gui),
                             xkb_plugin);
   g_signal_connect_swapped (G_OBJECT (xkb_plugin->config),
                             "notify::" DISPLAY_SCALE,
-                            G_CALLBACK (xkb_plugin_display_scale_changed),
+                            G_CALLBACK (xkb_plugin_refresh_gui),
+                            xkb_plugin);
+  g_signal_connect_swapped (G_OBJECT (xkb_plugin->config),
+                            "notify::" CAPS_LOCK_INDICATOR,
+                            G_CALLBACK (xkb_plugin_refresh_gui),
                             xkb_plugin);
 
   xkb_plugin->button = gtk_button_new ();
@@ -647,11 +649,13 @@ xkb_plugin_layout_image_draw (GtkWidget *widget,
   XkbDisplayType        display_type;
   XkbDisplayName        display_name;
   gint                  display_scale;
-  gboolean              capslock_enabled;
+  gboolean              caps_lock_indicator;
+  gboolean              caps_lock_enabled;
 
   display_type = xkb_xfconf_get_display_type (plugin->config);
   display_name = xkb_xfconf_get_display_name (plugin->config);
   display_scale = xkb_xfconf_get_display_scale (plugin->config);
+  caps_lock_indicator = xkb_xfconf_get_caps_lock_indicator (plugin->config);
 
   gtk_widget_get_allocation (GTK_WIDGET (widget), &allocation);
   actual_hsize = allocation.width;
@@ -664,7 +668,7 @@ xkb_plugin_layout_image_draw (GtkWidget *widget,
   group_name = xkb_keyboard_get_group_name (plugin->keyboard, display_name, -1);
   pixbuf = xkb_keyboard_get_pixbuf (plugin->keyboard, FALSE, -1);
   variant_index = xkb_keyboard_get_variant_index (plugin->keyboard, display_name, -1);
-  capslock_enabled = xkb_modifier_get_capslock_enabled (plugin->modifier);
+  caps_lock_enabled = xkb_modifier_get_caps_lock_enabled (plugin->modifier);
 
   if (pixbuf == NULL && display_type == DISPLAY_TYPE_IMAGE)
     display_type = DISPLAY_TYPE_TEXT;
@@ -695,7 +699,7 @@ xkb_plugin_layout_image_draw (GtkWidget *widget,
       xkb_cairo_draw_label_system (cr, group_name,
                                    actual_hsize, actual_vsize,
                                    variant_index,
-                                   capslock_enabled,
+                                   caps_lock_indicator && caps_lock_enabled,
                                    desc, rgba);
       break;
     }
@@ -706,25 +710,9 @@ xkb_plugin_layout_image_draw (GtkWidget *widget,
 
 
 static void
-xkb_plugin_display_type_changed (XkbPlugin *plugin)
+xkb_plugin_update_size_allocation (XkbPlugin *plugin)
 {
   xkb_plugin_calculate_sizes (plugin,
                               xfce_panel_plugin_get_orientation (XFCE_PANEL_PLUGIN (plugin)),
                               xfce_panel_plugin_get_size (XFCE_PANEL_PLUGIN (plugin)));
 }
-
-
-
-static void
-xkb_plugin_display_name_changed (XkbPlugin *plugin)
-{
-  xkb_plugin_refresh_gui (plugin);
-}
-
-
-
-static void
-xkb_plugin_display_scale_changed (XkbPlugin *plugin)
-{
-  xkb_plugin_refresh_gui (plugin);
-}
diff --git a/panel-plugin/xkb-properties.h b/panel-plugin/xkb-properties.h
index 37d6d7e..c80971c 100644
--- a/panel-plugin/xkb-properties.h
+++ b/panel-plugin/xkb-properties.h
@@ -29,6 +29,7 @@
 #define DISPLAY_TYPE                "display-type"
 #define DISPLAY_NAME                "display-name"
 #define DISPLAY_SCALE               "display-scale"
+#define CAPS_LOCK_INDICATOR         "caps-lock-indicator"
 #define DISPLAY_TOOLTIP_ICON        "display-tooltip-icon"
 #define GROUP_POLICY                "group-policy"
 
diff --git a/panel-plugin/xkb-xfconf.c b/panel-plugin/xkb-xfconf.c
index 036cd34..e7390f5 100644
--- a/panel-plugin/xkb-xfconf.c
+++ b/panel-plugin/xkb-xfconf.c
@@ -33,6 +33,7 @@
 #define DEFAULT_DISPLAY_TYPE                DISPLAY_TYPE_IMAGE
 #define DEFAULT_DISPLAY_NAME                DISPLAY_NAME_COUNTRY
 #define DEFAULT_DISPLAY_SCALE               DISPLAY_SCALE_MAX
+#define DEFAULT_CAPS_LOCK_INDICATOR         TRUE
 #define DEFAULT_DISPLAY_TOOLTIP_ICON        TRUE
 #define DEFAULT_GROUP_POLICY                GROUP_POLICY_PER_APPLICATION
 
@@ -58,6 +59,7 @@ struct _XkbXfconf
   XkbDisplayType       display_type;
   XkbDisplayName       display_name;
   guint                display_scale;
+  gboolean             caps_lock_indicator;
   gboolean             display_tooltip_icon;
   XkbGroupPolicy       group_policy;
 };
@@ -68,6 +70,7 @@ enum
   PROP_DISPLAY_TYPE,
   PROP_DISPLAY_NAME,
   PROP_DISPLAY_SCALE,
+  PROP_CAPS_LOCK_INDICATOR,
   PROP_DISPLAY_TOOLTIP_ICON,
   PROP_GROUP_POLICY,
   N_PROPERTIES,
@@ -116,10 +119,15 @@ xkb_xfconf_class_init (XkbXfconfClass *klass)
                                                       DEFAULT_DISPLAY_SCALE,
                                                       G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
 
+  g_object_class_install_property (gobject_class, PROP_CAPS_LOCK_INDICATOR,
+                                   g_param_spec_boolean (CAPS_LOCK_INDICATOR, NULL, NULL,
+                                                         DEFAULT_CAPS_LOCK_INDICATOR,
+                                                         G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
   g_object_class_install_property (gobject_class, PROP_DISPLAY_TOOLTIP_ICON,
                                    g_param_spec_boolean (DISPLAY_TOOLTIP_ICON, NULL, NULL,
-                                                      DEFAULT_DISPLAY_TOOLTIP_ICON,
-                                                      G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+                                                         DEFAULT_DISPLAY_TOOLTIP_ICON,
+                                                         G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
 
   g_object_class_install_property (gobject_class, PROP_GROUP_POLICY,
                                    g_param_spec_uint (GROUP_POLICY, NULL, NULL,
@@ -145,6 +153,7 @@ xkb_xfconf_init (XkbXfconf *config)
   config->display_type = DEFAULT_DISPLAY_TYPE;
   config->display_name = DEFAULT_DISPLAY_NAME;
   config->display_scale = DEFAULT_DISPLAY_SCALE;
+  config->caps_lock_indicator = DEFAULT_CAPS_LOCK_INDICATOR;
   config->display_tooltip_icon = DEFAULT_DISPLAY_TOOLTIP_ICON;
   config->group_policy = DEFAULT_GROUP_POLICY;
 }
@@ -182,6 +191,10 @@ xkb_xfconf_get_property (GObject    *object,
       g_value_set_uint (value, config->display_scale);
       break;
 
+    case PROP_CAPS_LOCK_INDICATOR:
+      g_value_set_boolean (value, config->caps_lock_indicator);
+      break;
+
     case PROP_DISPLAY_TOOLTIP_ICON:
       g_value_set_boolean (value, config->display_tooltip_icon);
       break;
@@ -240,6 +253,16 @@ xkb_xfconf_set_property (GObject      *object,
         }
       break;
 
+    case PROP_CAPS_LOCK_INDICATOR:
+      val_boolean = g_value_get_boolean (value);
+      if (config->caps_lock_indicator != val_boolean)
+        {
+          config->caps_lock_indicator = val_boolean;
+          g_object_notify (G_OBJECT (config), CAPS_LOCK_INDICATOR);
+          g_signal_emit (G_OBJECT (config), xkb_xfconf_signals[CONFIGURATION_CHANGED], 0);
+        }
+      break;
+
     case PROP_DISPLAY_TOOLTIP_ICON:
       val_boolean = g_value_get_boolean (value);
       if (config->display_tooltip_icon != val_boolean)
@@ -296,6 +319,15 @@ xkb_xfconf_get_display_scale (XkbXfconf *config)
 
 
 gboolean
+xkb_xfconf_get_caps_lock_indicator (XkbXfconf *config)
+{
+  g_return_val_if_fail (IS_XKB_XFCONF (config), DEFAULT_CAPS_LOCK_INDICATOR);
+  return config->caps_lock_indicator;
+}
+
+
+
+gboolean
 xkb_xfconf_get_display_tooltip_icon (XkbXfconf *config)
 {
   g_return_val_if_fail (IS_XKB_XFCONF (config), DEFAULT_DISPLAY_TOOLTIP_ICON);
@@ -338,6 +370,10 @@ xkb_xfconf_new (const gchar *property_base)
       xfconf_g_property_bind (channel, property, G_TYPE_UINT, config, DISPLAY_SCALE);
       g_free (property);
 
+      property = g_strconcat (property_base, "/" CAPS_LOCK_INDICATOR, NULL);
+      xfconf_g_property_bind (channel, property, G_TYPE_BOOLEAN, config, CAPS_LOCK_INDICATOR);
+      g_free (property);
+
       property = g_strconcat (property_base, "/" DISPLAY_TOOLTIP_ICON, NULL);
       xfconf_g_property_bind (channel, property, G_TYPE_BOOLEAN, config, DISPLAY_TOOLTIP_ICON);
       g_free (property);
diff --git a/panel-plugin/xkb-xfconf.h b/panel-plugin/xkb-xfconf.h
index 7dae172..7a8b2c1 100644
--- a/panel-plugin/xkb-xfconf.h
+++ b/panel-plugin/xkb-xfconf.h
@@ -45,6 +45,7 @@ XkbXfconf      *xkb_xfconf_new                             (const gchar   *prope
 XkbDisplayType  xkb_xfconf_get_display_type                (XkbXfconf     *config);
 XkbDisplayName  xkb_xfconf_get_display_name                (XkbXfconf     *config);
 guint           xkb_xfconf_get_display_scale               (XkbXfconf     *config);
+gboolean        xkb_xfconf_get_caps_lock_indicator         (XkbXfconf     *config);
 gboolean        xkb_xfconf_get_display_tooltip_icon        (XkbXfconf     *config);
 XkbGroupPolicy  xkb_xfconf_get_group_policy                (XkbXfconf     *config);
 

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the Xfce4-commits mailing list