[Xfce4-commits] [panel-plugins/xfce4-statusnotifier-plugin] 07/08: Allow to make menu primary action
noreply at xfce.org
noreply at xfce.org
Sun Jul 16 23:24:47 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-statusnotifier-plugin.
commit 38494dbcd532aa62efa8a58fa8d3d09667e674d4
Author: Viktor Odintsev <ninetls at xfce.org>
Date: Fri Jul 14 11:02:13 2017 +0300
Allow to make menu primary action
---
panel-plugin/sn-button.c | 23 ++++++++++++---
panel-plugin/sn-config.c | 37 +++++++++++++++++++++++
panel-plugin/sn-config.h | 2 ++
panel-plugin/sn-dialog.c | 6 ++++
panel-plugin/sn-dialog.glade | 70 +++++++++++++++++++++++++++++++++++++++-----
5 files changed, 127 insertions(+), 11 deletions(-)
diff --git a/panel-plugin/sn-button.c b/panel-plugin/sn-button.c
index 513bdfb..779c2d0 100644
--- a/panel-plugin/sn-button.c
+++ b/panel-plugin/sn-button.c
@@ -64,6 +64,8 @@ struct _SnButton
GtkButton __parent__;
SnItem *item;
+ SnConfig *config;
+
GtkMenuPositionFunc pos_func;
gpointer pos_func_data;
@@ -120,6 +122,8 @@ sn_button_init (SnButton *button)
gtk_widget_add_events (GTK_WIDGET (button), GDK_SCROLL_MASK | GDK_SMOOTH_SCROLL_MASK);
button->item = NULL;
+ button->config = NULL;
+
button->pos_func = NULL;
button->pos_func_data = NULL;
@@ -171,6 +175,8 @@ sn_button_new (SnItem *item,
g_return_val_if_fail (XFCE_IS_SN_CONFIG (config), NULL);
button->item = item;
+ button->config = config;
+
button->pos_func = pos_func;
button->pos_func_data = pos_func_data;
@@ -235,14 +241,17 @@ sn_button_button_press (GtkWidget *widget,
GdkEventButton *event)
{
SnButton *button = XFCE_SN_BUTTON (widget);
+ gboolean menu_is_primary;
+
+ menu_is_primary = sn_config_get_menu_is_primary (button->config);
- if (event->button == 3 && button->menu_only)
+ if (event->button == 3 && (button->menu_only || menu_is_primary))
{
/* menu is available by left click, so show the panel menu instead */
return FALSE;
}
- if ((event->button == 1 && button->menu_only) || event->button == 3)
+ if ((event->button == 1 && (button->menu_only || menu_is_primary)) || event->button == 3)
{
if (button->menu != NULL)
{
@@ -283,16 +292,22 @@ sn_button_button_release (GtkWidget *widget,
GdkEventButton *event)
{
SnButton *button = XFCE_SN_BUTTON (widget);
+ gboolean menu_is_primary;
+
+ menu_is_primary = sn_config_get_menu_is_primary (button->config);
if (event->button == 1)
{
/* menu could be handled in button-press-event, check this */
- if (button->menu == NULL || !button->menu_only)
+ if (button->menu == NULL || !(button->menu_only || menu_is_primary))
sn_item_activate (button->item, (gint) event->x_root, (gint) event->y_root);
}
else if (event->button == 2)
{
- sn_item_secondary_activate (button->item, (gint) event->x_root, (gint) event->y_root);
+ if (menu_is_primary && !button->menu_only)
+ sn_item_activate (button->item, (gint) event->x_root, (gint) event->y_root);
+ else
+ sn_item_secondary_activate (button->item, (gint) event->x_root, (gint) event->y_root);
}
/* process animations */
diff --git a/panel-plugin/sn-config.c b/panel-plugin/sn-config.c
index b83a51d..80a56d5 100644
--- a/panel-plugin/sn-config.c
+++ b/panel-plugin/sn-config.c
@@ -42,6 +42,7 @@
#define DEFAULT_ICON_SIZE 22
#define DEFAULT_SINGLE_ROW FALSE
#define DEFAULT_SQUARE_ICONS FALSE
+#define DEFAULT_MENU_IS_PRIMARY FALSE
#define DEFAULT_ORIENTATION GTK_ORIENTATION_HORIZONTAL
#define DEFAULT_PANEL_ORIENTATION GTK_ORIENTATION_HORIZONTAL
#define DEFAULT_PANEL_SIZE 28
@@ -75,6 +76,7 @@ struct _SnConfig
gint icon_size;
gboolean single_row;
gboolean square_icons;
+ gboolean menu_is_primary;
gboolean mode_whitelist;
GList *known_items;
GHashTable *hidden_items;
@@ -96,6 +98,7 @@ enum
PROP_ICON_SIZE,
PROP_SINGLE_ROW,
PROP_SQUARE_ICONS,
+ PROP_MENU_IS_PRIMARY,
PROP_MODE_WHITELIST,
PROP_KNOWN_ITEMS,
PROP_HIDDEN_ITEMS
@@ -171,6 +174,13 @@ sn_config_class_init (SnConfigClass *klass)
G_PARAM_STATIC_STRINGS));
g_object_class_install_property (object_class,
+ PROP_MENU_IS_PRIMARY,
+ g_param_spec_boolean ("menu-is-primary", NULL, NULL,
+ DEFAULT_MENU_IS_PRIMARY,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property (object_class,
PROP_MODE_WHITELIST,
g_param_spec_boolean ("mode-whitelist", NULL, NULL,
DEFAULT_MODE_WHITELIST,
@@ -304,6 +314,10 @@ sn_config_get_property (GObject *object,
g_value_set_boolean (value, config->square_icons);
break;
+ case PROP_MENU_IS_PRIMARY:
+ g_value_set_boolean (value, config->menu_is_primary);
+ break;
+
case PROP_MODE_WHITELIST:
g_value_set_boolean (value, config->mode_whitelist);
break;
@@ -378,6 +392,15 @@ sn_config_set_property (GObject *object,
}
break;
+ case PROP_MENU_IS_PRIMARY:
+ val = g_value_get_boolean (value);
+ if (config->menu_is_primary != val)
+ {
+ config->menu_is_primary = val;
+ g_signal_emit (G_OBJECT (config), sn_config_signals[CONFIGURATION_CHANGED], 0);
+ }
+ break;
+
case PROP_MODE_WHITELIST:
val = g_value_get_boolean (value);
if (config->mode_whitelist != val)
@@ -458,6 +481,16 @@ sn_config_get_square_icons (SnConfig *config)
+gboolean
+sn_config_get_menu_is_primary (SnConfig *config)
+{
+ g_return_val_if_fail (XFCE_IS_SN_CONFIG (config), DEFAULT_MENU_IS_PRIMARY);
+
+ return config->menu_is_primary;
+}
+
+
+
void
sn_config_set_orientation (SnConfig *config,
GtkOrientation panel_orientation,
@@ -746,6 +779,10 @@ sn_config_new (const gchar *property_base)
xfconf_g_property_bind (channel, property, G_TYPE_BOOLEAN, config, "square-icons");
g_free (property);
+ property = g_strconcat (property_base, "/menu-is-primary", NULL);
+ xfconf_g_property_bind (channel, property, G_TYPE_BOOLEAN, config, "menu-is-primary");
+ g_free (property);
+
property = g_strconcat (property_base, "/mode-whitelist", NULL);
xfconf_g_property_bind (channel, property, G_TYPE_BOOLEAN, config, "mode-whitelist");
g_free (property);
diff --git a/panel-plugin/sn-config.h b/panel-plugin/sn-config.h
index 30576b0..7506cc8 100644
--- a/panel-plugin/sn-config.h
+++ b/panel-plugin/sn-config.h
@@ -58,6 +58,8 @@ gboolean sn_config_get_single_row (SnConfig
gboolean sn_config_get_square_icons (SnConfig *config);
+gboolean sn_config_get_menu_is_primary (SnConfig *config);
+
gint sn_config_get_icon_size (SnConfig *config);
gboolean sn_config_is_hidden (SnConfig *config,
diff --git a/panel-plugin/sn-dialog.c b/panel-plugin/sn-dialog.c
index 20dad32..2c3ca7f 100644
--- a/panel-plugin/sn-dialog.c
+++ b/panel-plugin/sn-dialog.c
@@ -433,6 +433,12 @@ sn_dialog_build (SnDialog *dialog)
G_OBJECT (object), "active",
G_BINDING_SYNC_CREATE | G_BINDING_BIDIRECTIONAL);
+ object = gtk_builder_get_object (dialog->builder, "checkbutton-menu-is-primary");
+ g_return_val_if_fail (GTK_IS_WIDGET (object), FALSE);
+ g_object_bind_property (G_OBJECT (dialog->config), "menu-is-primary",
+ G_OBJECT (object), "active",
+ G_BINDING_SYNC_CREATE | G_BINDING_BIDIRECTIONAL);
+
object = gtk_builder_get_object (dialog->builder, "checkbutton-whitelist");
g_return_val_if_fail (GTK_IS_WIDGET (object), FALSE);
g_object_bind_property (G_OBJECT (dialog->config), "mode-whitelist",
diff --git a/panel-plugin/sn-dialog.glade b/panel-plugin/sn-dialog.glade
index 6282799..077b09f 100644
--- a/panel-plugin/sn-dialog.glade
+++ b/panel-plugin/sn-dialog.glade
@@ -7,7 +7,7 @@
<property name="can_focus">False</property>
<property name="title" translatable="yes">Status Notifier Items</property>
<property name="default_width">425</property>
- <property name="default_height">525</property>
+ <property name="default_height">575</property>
<property name="icon_name">gtk-properties</property>
<property name="type_hint">normal</property>
<child internal-child="vbox">
@@ -53,13 +53,13 @@
<property name="orientation">vertical</property>
<property name="spacing">6</property>
<child>
- <object class="GtkFrame" id="frame3">
+ <object class="GtkFrame" id="frame2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label_xalign">0</property>
<property name="shadow_type">none</property>
<child>
- <object class="GtkAlignment" id="alignment3">
+ <object class="GtkAlignment" id="alignment2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="left_padding">12</property>
@@ -163,6 +163,62 @@
<property name="position">0</property>
</packing>
</child>
+
+ <child>
+ <object class="GtkFrame" id="frame3">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">none</property>
+ <child>
+ <object class="GtkAlignment" id="alignment3">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="left_padding">12</property>
+ <child>
+ <object class="GtkBox" id="vbox3">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="border_width">6</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkCheckButton" id="checkbutton-menu-is-primary">
+ <property name="label" translatable="yes">Menu is primary action</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="tooltip_text" translatable="yes">Left click will always display the menu for item.</property>
+ <property name="use_action_appearance">False</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child type="label">
+ <object class="GtkLabel" id="label3">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Behavior</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
<child>
<object class="GtkFrame" id="frame1">
<property name="visible">True</property>
@@ -175,7 +231,7 @@
<property name="can_focus">False</property>
<property name="left_padding">12</property>
<child>
- <object class="GtkBox" id="vbox3">
+ <object class="GtkBox" id="vbox4">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="border_width">6</property>
@@ -262,7 +318,7 @@
</packing>
</child>
<child>
- <object class="GtkBox" id="vbox4">
+ <object class="GtkBox" id="vbox5">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
@@ -358,7 +414,7 @@
</object>
</child>
<child type="label">
- <object class="GtkLabel" id="label3">
+ <object class="GtkLabel" id="label4">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Known Items</property>
@@ -371,7 +427,7 @@
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
- <property name="position">1</property>
+ <property name="position">2</property>
</packing>
</child>
</object>
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the Xfce4-commits
mailing list