[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