xpad-hackers team mailing list archive
-
xpad-hackers team
-
Mailing list archive
-
Message #00192
Expanding Options
O_o
Hello everyone,
I'm not used to introducing myself. I'm unused to the practice so I
don't think I'll waste your time now doing a poor job of it.
I needed a configuration that "Xpad" doesn't normally support to
suppress warnings from my environment. I fixed that with a poorly punned
hack, but I found that quite a few people were requesting some similar
features so I made a legitimate go of following the style and
organization of the existing code.
I apologize now if I've overstepped; I'm simply used to posting short
patches on a lot mailing lists; I intend no offence.
Before I discuss the patch, I'd like to ask about "XLib"/"GDK"
dependencies. I started to work on allowing opacity to be configured,
but I didn't see any overt dependencies on the platform specific
libraries. I wanted to get some thoughts on conditional dependencies
before I put any effort in that direction because I don't know how to
even begin to approach "pseudo-transparency" with "gtk" alone.
The patch below adds several new options:
1): Implemented a "daemon mode" style option for running "Xpad" in the
background without requiring at least one note or the tray icon.
2): Duplicated, for good and evil, the CLI argument handling for the pad
options for setting or toggling visibility so that such operation can be
done without mouse input.
3): Added an option to eliminate the context menu on pads.
4): Extended the tray icon options to allow configuration of the left
and right mouse buttons.
Soma
[Code]
diff -ruN original/src/xpad-app.c patch.01/src/xpad-app.c
--- original/src/xpad-app.c 2014-06-25 04:25:53.000000000 -0500
+++ patch.01/src/xpad-app.c 2014-07-05 11:53:11.815472000 -0500
@@ -402,7 +402,9 @@
static gboolean
xpad_app_quit_if_no_pads (XpadPadGroup *group)
{
- if (!xpad_tray_is_open ())
+ gboolean daemon_enabled;
+ g_object_get (settings, "daemon-enabled", &daemon_enabled, NULL);
+ if (!xpad_tray_is_open () && !daemon_enabled)
{
gint num_pads = xpad_pad_group_num_visible_pads (group);
if (num_pads == 0)
@@ -420,9 +422,12 @@
static gboolean
xpad_app_first_idle_check (XpadPadGroup *group)
{
+ gboolean daemon_enabled;
+ g_object_get (settings, "daemon-enabled", &daemon_enabled, NULL);
/* We do this check at the first idle rather than immediately during
start because we want to give the tray time to become embedded. */
if (!xpad_tray_is_open () &&
+ !daemon_enabled &&
xpad_pad_group_num_visible_pads (group) == 0)
{
if (pads_loaded_on_start > 0)
@@ -906,7 +911,20 @@
/* Don't quit. Bad options passed to the main xpad program by other
iterations shouldn't close the main one. */
}
-
+
+ if (have_gtk && pad_group)
+ {
+ if (option_toggle)
+ xpad_pad_group_toggle_hide (pad_group);
+ else
+ {
+ if (option_show)
+ xpad_pad_group_show_all (pad_group);
+ if (option_hide)
+ xpad_pad_group_close_all (pad_group);
+ }
+ }
+
g_option_context_free (context);
return(option_new || option_quit || option_smid || option_files ||
diff -ruN original/src/xpad-pad.c patch.01/src/xpad-pad.c
--- original/src/xpad-pad.c 2014-06-25 04:25:53.000000000 -0500
+++ patch.01/src/xpad-pad.c 2014-06-30 18:34:44.283225000 -0500
@@ -1847,7 +1847,14 @@
{
GtkTextBuffer *buffer;
GtkWidget *menu;
-
+ gboolean has_menu;
+ g_object_get (pad->priv->settings, "has-menu", &has_menu, NULL);
+
+ if (!has_menu)
+ {
+ return;
+ }
+
buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (pad->priv->textview));
if (gtk_text_buffer_get_selection_bounds (buffer, NULL, NULL))
diff -ruN original/src/xpad-preferences.c patch.01/src/xpad-preferences.c
--- original/src/xpad-preferences.c 2014-06-25 04:25:53.000000000 -0500
+++ patch.01/src/xpad-preferences.c 2014-07-05 12:21:13.322103000 -0500
@@ -45,6 +45,9 @@
GtkWidget *autostart_display_pads;
GtkWidget *tray_enabled;
GtkWidget *tray_click_configuration;
+ GtkWidget *tray_menu_configuration;
+ GtkWidget *daemon_enabled;
+ GtkWidget *menucheck;
GtkWidget *editcheck;
GtkWidget *confirmcheck;
@@ -61,6 +64,9 @@
gulong autostart_display_pads_handler;
gulong tray_enabled_handler;
gulong tray_click_handler;
+ gulong tray_menu_handler;
+ gulong daemon_enabled_handler;
+ gulong menucheck_handler;
gulong editcheck_handler;
gulong confirmcheck_handler;
@@ -75,6 +81,9 @@
gulong notify_autostart_display_pads_handler;
gulong notify_tray_enabled_handler;
gulong notify_tray_click_handler;
+ gulong notify_tray_menu_handler;
+ gulong notify_daemon_enabled_handler;
+ gulong notify_menu_handler;
gulong notify_edit_handler;
gulong notify_confirm_handler;
};
@@ -100,6 +109,9 @@
static void change_autostart_display_pads (GtkComboBox *box,
XpadPreferences *pref);
static void change_tray_enabled (GtkToggleButton *button,
XpadPreferences *pref);
static void change_tray_click (GtkComboBox *box, XpadPreferences *pref);
+static void change_menu_click (GtkComboBox *box, XpadPreferences *pref);
+static void change_daemon_enabled (GtkToggleButton *button,
XpadPreferences *pref);
+static void change_menu_check (GtkToggleButton *button, XpadPreferences
*pref);
static void change_edit_check (GtkToggleButton *button,
XpadPreferences *pref);
static void change_confirm_check (GtkToggleButton *button,
XpadPreferences *pref);
@@ -114,6 +126,9 @@
static void notify_autostart_display_pads (XpadPreferences *pref);
static void notify_tray_enabled (XpadPreferences *pref);
static void notify_tray_click (XpadPreferences *pref);
+static void notify_menu_click (XpadPreferences *pref);
+static void notify_daemon_enabled (XpadPreferences *pref);
+static void notify_menu (XpadPreferences *pref);
static void notify_edit (XpadPreferences *pref);
static void notify_confirm (XpadPreferences *pref);
@@ -175,16 +190,19 @@
GtkSizeGroup *size_group_labels = gtk_size_group_new
(GTK_SIZE_GROUP_HORIZONTAL);
GtkRequisition req;
GdkRGBA theme_text_color = {0, 0, 0, 0}, theme_background_color = {0,
0, 0, 0};
- guint tray_click_configuration, autostart_delay, autostart_display_pads;
- gboolean confirm_destroy, edit_lock, autostart_xpad,
autostart_wait_systray, autostart_new_pad, autostart_sticky;
+ guint tray_click_configuration, tray_menu_configuration,
autostart_delay, autostart_display_pads;
+ gboolean daemon_enabled, confirm_destroy, edit_lock, has_menu,
autostart_xpad, autostart_wait_systray, autostart_new_pad, autostart_sticky;
g_object_get (pref->priv->settings,
"fontname", &fontname,
"text-color", &text_color,
"back-color", &back_color,
+ "daemon-enabled", &daemon_enabled,
"confirm-destroy", &confirm_destroy,
"edit-lock", &edit_lock,
+ "has-menu", &has_menu,
"tray-click-configuration", &tray_click_configuration,
+ "tray-menu-configuration", &tray_menu_configuration,
"autostart-xpad", &autostart_xpad,
"autostart-wait-systray", &autostart_wait_systray,
"autostart-new-pad", &autostart_new_pad,
@@ -394,6 +412,8 @@
label = gtk_label_new_with_mnemonic(_("Tray left mouse click
behaviour"));
pref->priv->tray_click_configuration = gtk_combo_box_text_new();
gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT
(pref->priv->tray_click_configuration), _("Do Nothing") );
+ gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT
(pref->priv->tray_click_configuration), _("Show All") );
+ gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT
(pref->priv->tray_click_configuration), _("Hide All") );
gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT
(pref->priv->tray_click_configuration), _("Toggle Show All") );
gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT
(pref->priv->tray_click_configuration), _("List of Pads") );
gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT
(pref->priv->tray_click_configuration), _("New Pad") );
@@ -403,6 +423,21 @@
gtk_box_pack_start(hbox, pref->priv->tray_click_configuration, TRUE,
TRUE, 0);
gtk_box_pack_start(tray_vbox, GTK_WIDGET (hbox), TRUE, TRUE, 0);
+ label = gtk_label_new_with_mnemonic(_("Tray right mouse click
behaviour"));
+ pref->priv->tray_menu_configuration = gtk_combo_box_text_new();
+ gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT
(pref->priv->tray_menu_configuration), _("Do Nothing") );
+ gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT
(pref->priv->tray_menu_configuration), _("Show All") );
+ gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT
(pref->priv->tray_menu_configuration), _("Hide All") );
+ gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT
(pref->priv->tray_menu_configuration), _("Toggle Show All") );
+ gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT
(pref->priv->tray_menu_configuration), _("List of Pads") );
+ gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT
(pref->priv->tray_menu_configuration), _("New Pad") );
+ gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT
(pref->priv->tray_menu_configuration), _("Show Menu") );
+ gtk_combo_box_set_active (GTK_COMBO_BOX
(pref->priv->tray_menu_configuration), tray_menu_configuration);
+ hbox = GTK_BOX (gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12));
+ gtk_box_pack_start(hbox, label, FALSE, FALSE, 0);
+ gtk_box_pack_start(hbox, pref->priv->tray_menu_configuration, TRUE,
TRUE, 0);
+ gtk_box_pack_start(tray_vbox, GTK_WIDGET (hbox), TRUE, TRUE, 0);
+
/* Other options */
label = create_label (_("Other"));
@@ -421,12 +456,18 @@
"child", alignment,
NULL));
+ pref->priv->daemon_enabled = gtk_check_button_new_with_mnemonic
(_("_Enable daemon mode"));
+ pref->priv->menucheck = gtk_check_button_new_with_mnemonic (_("_Enable
pad menu"));
pref->priv->editcheck = gtk_check_button_new_with_mnemonic (_("_Make
pads read-only"));
pref->priv->confirmcheck = gtk_check_button_new_with_mnemonic
(_("_Confirm pad deletion"));
+ gtk_box_pack_start (other_vbox, pref->priv->daemon_enabled, FALSE,
FALSE, 0);
+ gtk_box_pack_start (other_vbox, pref->priv->menucheck, FALSE, FALSE, 0);
gtk_box_pack_start (other_vbox, pref->priv->editcheck, FALSE, FALSE, 0);
gtk_box_pack_start (other_vbox, pref->priv->confirmcheck, FALSE,
FALSE, 0);
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
(pref->priv->daemon_enabled), daemon_enabled);
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
(pref->priv->menucheck), has_menu);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
(pref->priv->editcheck), edit_lock);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
(pref->priv->confirmcheck), confirm_destroy);
@@ -452,6 +493,10 @@
pref->priv->tray_enabled_handler = g_signal_connect
(pref->priv->tray_enabled, "toggled", G_CALLBACK (change_tray_enabled),
pref);
pref->priv->tray_click_handler =
g_signal_connect(pref->priv->tray_click_configuration, "changed",
G_CALLBACK(change_tray_click), pref);
+ pref->priv->tray_menu_handler =
g_signal_connect(pref->priv->tray_menu_configuration, "changed",
G_CALLBACK(change_menu_click), pref);
+
+ pref->priv->daemon_enabled_handler = g_signal_connect
(pref->priv->daemon_enabled, "toggled", G_CALLBACK
(change_daemon_enabled), pref);
+ pref->priv->menucheck_handler = g_signal_connect
(pref->priv->menucheck, "toggled", G_CALLBACK (change_menu_check), pref);
pref->priv->editcheck_handler = g_signal_connect
(pref->priv->editcheck, "toggled", G_CALLBACK (change_edit_check), pref);
pref->priv->confirmcheck_handler = g_signal_connect
(pref->priv->confirmcheck, "toggled", G_CALLBACK (change_confirm_check),
pref);
@@ -465,10 +510,13 @@
pref->priv->notify_autostart_new_pad_handler =
g_signal_connect_swapped (pref->priv->settings,
"notify::autostart-new-pad", G_CALLBACK (notify_autostart_new_pad), pref);
pref->priv->notify_autostart_sticky_handler =
g_signal_connect_swapped (pref->priv->settings,
"notify::autostart-sticky", G_CALLBACK (notify_autostart_sticky), pref);
pref->priv->notify_autostart_display_pads_handler =
g_signal_connect_swapped (pref->priv->settings,
"notify::autostart-display-pads", G_CALLBACK
(notify_autostart_display_pads), pref);
+ pref->priv->notify_daemon_enabled_handler = g_signal_connect_swapped
(pref->priv->settings, "notify::daemon-enabled", G_CALLBACK
(notify_menu), pref);
+ pref->priv->notify_menu_handler = g_signal_connect_swapped
(pref->priv->settings, "notify::has-menu", G_CALLBACK (notify_menu), pref);
pref->priv->notify_edit_handler = g_signal_connect_swapped
(pref->priv->settings, "notify::edit-lock", G_CALLBACK (notify_edit), pref);
pref->priv->notify_confirm_handler = g_signal_connect_swapped
(pref->priv->settings, "notify::confirm-destroy", G_CALLBACK
(notify_confirm), pref);
pref->priv->notify_tray_enabled_handler = g_signal_connect_swapped
(pref->priv->settings, "notify::tray-enabled", G_CALLBACK
(notify_tray_enabled), pref);
pref->priv->notify_tray_click_handler = g_signal_connect_swapped
(pref->priv->settings, "notify::tray-click-configuration",
G_CALLBACK(notify_tray_click), pref);
+ pref->priv->notify_tray_menu_handler = g_signal_connect_swapped
(pref->priv->settings, "notify::tray-menu-configuration",
G_CALLBACK(notify_menu_click), pref);
g_object_unref (size_group_labels);
@@ -714,6 +762,30 @@
}
static void
+change_menu_click (GtkComboBox *box, XpadPreferences *pref)
+{
+ g_signal_handler_block(pref->priv->settings,
pref->priv->notify_tray_menu_handler);
+ g_object_set (pref->priv->settings, "tray-menu-configuration", (guint)
gtk_combo_box_get_active (box), NULL);
+ g_signal_handler_unblock (pref->priv->settings,
pref->priv->notify_tray_menu_handler);
+}
+
+static void
+change_daemon_enabled (GtkToggleButton *button, XpadPreferences *pref)
+{
+ g_signal_handler_block (pref->priv->settings,
pref->priv->notify_daemon_enabled_handler);
+ g_object_set (pref->priv->settings, "daemon-enabled",
gtk_toggle_button_get_active (button), NULL);
+ g_signal_handler_unblock (pref->priv->settings,
pref->priv->notify_daemon_enabled_handler);
+}
+
+static void
+change_menu_check (GtkToggleButton *button, XpadPreferences *pref)
+{
+ g_signal_handler_block (pref->priv->settings,
pref->priv->notify_menu_handler);
+ g_object_set (pref->priv->settings, "has-menu",
gtk_toggle_button_get_active (button), NULL);
+ g_signal_handler_unblock (pref->priv->settings,
pref->priv->notify_menu_handler);
+}
+
+static void
change_edit_check (GtkToggleButton *button, XpadPreferences *pref)
{
g_signal_handler_block (pref->priv->settings,
pref->priv->notify_edit_handler);
@@ -892,6 +964,36 @@
g_signal_handler_unblock (pref->priv->tray_click_configuration,
pref->priv->tray_click_handler);
}
+static void
+notify_menu_click (XpadPreferences *pref)
+{
+ guint value;
+ g_object_get (pref->priv->settings, "tray-menu-configuration", &value,
NULL);
+ g_signal_handler_block (pref->priv->tray_menu_configuration,
pref->priv->tray_menu_handler);
+ gtk_combo_box_set_active (GTK_COMBO_BOX
(pref->priv->tray_menu_configuration), value);
+ g_signal_handler_unblock (pref->priv->tray_menu_configuration,
pref->priv->tray_menu_handler);
+}
+
+static void
+daemon_enabled (XpadPreferences *pref)
+{
+ gboolean value;
+ g_object_get (pref->priv->settings, "daemon-enabled", &value, NULL);
+ g_signal_handler_block (pref->priv->daemon_enabled,
pref->priv->daemon_enabled_handler);
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
(pref->priv->daemon_enabled), value);
+ g_signal_handler_unblock (pref->priv->daemon_enabled,
pref->priv->daemon_enabled_handler);
+}
+
+static void
+notify_menu (XpadPreferences *pref)
+{
+ gboolean value;
+ g_object_get (pref->priv->settings, "has-menu", &value, NULL);
+ g_signal_handler_block (pref->priv->menucheck,
pref->priv->menucheck_handler);
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
(pref->priv->menucheck), value);
+ g_signal_handler_unblock (pref->priv->menucheck,
pref->priv->menucheck_handler);
+}
+
static void
notify_edit (XpadPreferences *pref)
{
diff -ruN original/src/xpad-settings.c patch.01/src/xpad-settings.c
--- original/src/xpad-settings.c 2014-06-25 04:25:53.000000000 -0500
+++ patch.01/src/xpad-settings.c 2014-07-05 11:34:10.162163000 -0500
@@ -35,10 +35,13 @@
gboolean confirm_destroy;
gboolean edit_lock;
gboolean tray_enabled;
+ gboolean daemon_enabled;
guint tray_click_configuration;
+ guint tray_menu_configuration;
gboolean has_toolbar;
gboolean autohide_toolbar;
gboolean has_scrollbar;
+ gboolean menu_disable;
GdkRGBA *text;
GdkRGBA *back;
const gchar *fontname;
@@ -69,10 +72,13 @@
PROP_CONFIRM_DESTROY,
PROP_EDIT_LOCK,
PROP_TRAY_ENABLED,
+ PROP_DAEMON_ENABLED,
PROP_TRAY_CLICK_CONFIGURATION,
+ PROP_TRAY_MENU_CONFIGURATION,
PROP_HAS_TOOLBAR,
PROP_AUTOHIDE_TOOLBAR,
PROP_HAS_SCROLLBAR,
+ PROP_MENU_DISABLE,
PROP_TEXT_COLOR,
PROP_BACK_COLOR,
PROP_FONTNAME,
@@ -115,10 +121,13 @@
obj_prop[PROP_CONFIRM_DESTROY] = g_param_spec_boolean
("confirm-destroy", "Confirm destroy", "Ask for delete confirmation",
TRUE, G_PARAM_READWRITE);
obj_prop[PROP_EDIT_LOCK] = g_param_spec_boolean ("edit-lock",
"Edit lock", "Toggle read-only mode", FALSE, G_PARAM_READWRITE);
obj_prop[PROP_TRAY_ENABLED] = g_param_spec_boolean
("tray-enabled", "Enable tray icon", "Enable or disable the systray
icon", TRUE, G_PARAM_READWRITE);
- obj_prop[PROP_TRAY_CLICK_CONFIGURATION] = g_param_spec_uint
("tray-click-configuration", "Tray click configuration", "Configure tray
left click", 0, G_MAXUINT, 0, G_PARAM_READWRITE);
+ obj_prop[PROP_DAEMON_ENABLED] = g_param_spec_boolean
("daemon-enabled", "Enable daemon mode", "Enable or disable daemon
mode", FALSE, G_PARAM_READWRITE);
+ obj_prop[PROP_TRAY_CLICK_CONFIGURATION] = g_param_spec_uint
("tray-click-configuration", "Tray click configuration", "Configure tray
left click", 0, G_MAXUINT, 5, G_PARAM_READWRITE);
+ obj_prop[PROP_TRAY_MENU_CONFIGURATION] = g_param_spec_uint
("tray-menu-configuration", "Tray menu configuration", "Configure tray
right click", 0, G_MAXUINT, 6, G_PARAM_READWRITE);
obj_prop[PROP_HAS_TOOLBAR] = g_param_spec_boolean ("has-toolbar",
"Has toolbar", "Whether pads have toolbars", TRUE, G_PARAM_READWRITE);
obj_prop[PROP_AUTOHIDE_TOOLBAR] = g_param_spec_boolean
("autohide-toolbar", "Autohide toolbar", "Hide toolbars when not used",
TRUE, G_PARAM_READWRITE);
obj_prop[PROP_HAS_SCROLLBAR] = g_param_spec_boolean
("has-scrollbar", "Has scrollbar", "Whether pads have scrollbars", TRUE,
G_PARAM_READWRITE);
+ obj_prop[PROP_MENU_DISABLE] = g_param_spec_boolean ("has-menu",
"Has menu", "Whether pads have context menus", TRUE, G_PARAM_READWRITE);
obj_prop[PROP_FONTNAME] = g_param_spec_string ("fontname", "Font
name", "Default name of pad font", NULL, G_PARAM_READWRITE);
obj_prop[PROP_TEXT_COLOR] = g_param_spec_boxed ("text-color",
"Text color", "Default color of pad text", GDK_TYPE_RGBA,
G_PARAM_READWRITE);
obj_prop[PROP_BACK_COLOR] = g_param_spec_boxed ("back-color",
"Back color", "Default color of pad background", GDK_TYPE_RGBA,
G_PARAM_READWRITE);
@@ -154,10 +163,13 @@
settings->priv->confirm_destroy = TRUE;
settings->priv->edit_lock = FALSE;
settings->priv->tray_enabled = TRUE;
- settings->priv->tray_click_configuration = 1;
+ settings->priv->daemon_enabled = FALSE;
+ settings->priv->tray_click_configuration = 5;
+ settings->priv->tray_menu_configuration = 6;
settings->priv->has_toolbar = TRUE;
settings->priv->autohide_toolbar = TRUE;
settings->priv->has_scrollbar = TRUE;
+ settings->priv->menu_disable = TRUE;
settings->priv->fontname = NULL;
/* A pleasant light yellow background color, similar to commercial
sticky notes, with black text. */
settings->priv->text = gdk_rgba_copy(&(GdkRGBA) {0, 0, 0, 1});
@@ -289,9 +301,17 @@
settings->priv->tray_enabled = g_value_get_boolean (value);
break;
+ case PROP_DAEMON_ENABLED:
+ settings->priv->daemon_enabled = g_value_get_boolean (value);
+ break;
+
case PROP_TRAY_CLICK_CONFIGURATION:
settings->priv->tray_click_configuration = g_value_get_uint(value);
break;
+
+ case PROP_TRAY_MENU_CONFIGURATION:
+ settings->priv->tray_menu_configuration = g_value_get_uint(value);
+ break;
case PROP_HAS_TOOLBAR:
settings->priv->has_toolbar = g_value_get_boolean (value);
@@ -304,6 +324,10 @@
case PROP_HAS_SCROLLBAR:
settings->priv->has_scrollbar = g_value_get_boolean (value);
break;
+
+ case PROP_MENU_DISABLE:
+ settings->priv->menu_disable = g_value_get_boolean (value);
+ break;
case PROP_TEXT_COLOR:
if (settings->priv->text)
@@ -423,10 +447,18 @@
g_value_set_boolean (value, settings->priv->tray_enabled);
break;
+ case PROP_DAEMON_ENABLED:
+ g_value_set_boolean (value, settings->priv->daemon_enabled);
+ break;
+
case PROP_TRAY_CLICK_CONFIGURATION:
g_value_set_uint (value, settings->priv->tray_click_configuration);
break;
+ case PROP_TRAY_MENU_CONFIGURATION:
+ g_value_set_uint (value, settings->priv->tray_menu_configuration);
+ break;
+
case PROP_HAS_TOOLBAR:
g_value_set_boolean (value, settings->priv->has_toolbar);
break;
@@ -438,6 +470,10 @@
case PROP_HAS_SCROLLBAR:
g_value_set_boolean (value, settings->priv->has_scrollbar);
break;
+
+ case PROP_MENU_DISABLE:
+ g_value_set_boolean (value, settings->priv->menu_disable);
+ break;
case PROP_TEXT_COLOR:
if (settings->priv->text)
@@ -514,7 +550,9 @@
"b|edit_lock", &settings->priv->edit_lock,
"b|sticky_on_start", &settings->priv->autostart_sticky,
"b|tray_enabled", &settings->priv->tray_enabled,
+ "b|daemon_enabled", &settings->priv->daemon_enabled,
"u|tray_click_configuration", &settings->priv->tray_click_configuration,
+ "u|tray_menu_configuration", &settings->priv->tray_menu_configuration,
"s|back", &background_color_string,
"b|use_back", &use_back,
"s|text", &text_color_string,
@@ -523,6 +561,7 @@
"b|toolbar", &settings->priv->has_toolbar,
"b|auto_hide_toolbar", &settings->priv->autohide_toolbar,
"b|scrollbar", &settings->priv->has_scrollbar,
+ "b|pad_menu", &settings->priv->menu_disable,
"s|buttons", &buttons,
"b|autostart_wait_systray", &settings->priv->autostart_wait_systray,
"u|autostart_delay", &settings->priv->autostart_delay,
@@ -625,7 +664,9 @@
"b|edit_lock", settings->priv->edit_lock,
"b|sticky_on_start", settings->priv->autostart_sticky,
"b|tray_enabled", settings->priv->tray_enabled,
+ "b|daemon_enabled", settings->priv->daemon_enabled,
"u|tray_click_configuration", settings->priv->tray_click_configuration,
+ "u|tray_menu_configuration", settings->priv->tray_menu_configuration,
"s|back", settings->priv->back ? gdk_rgba_to_string
(settings->priv->back) : "NULL",
"b|use_back", settings->priv->back ? TRUE : FALSE,
"s|text", settings->priv->text ? gdk_rgba_to_string
(settings->priv->text) : "NULL",
@@ -634,6 +675,7 @@
"b|toolbar", settings->priv->has_toolbar,
"b|auto_hide_toolbar", settings->priv->autohide_toolbar,
"b|scrollbar", settings->priv->has_scrollbar,
+ "b|pad_menu", settings->priv->menu_disable,
"s|buttons", buttons,
"b|autostart_wait_systray", settings->priv->autostart_wait_systray,
"u|autostart_delay", settings->priv->autostart_delay,
diff -ruN original/src/xpad-tray.c patch.01/src/xpad-tray.c
--- original/src/xpad-tray.c 2014-06-25 04:25:53.000000000 -0500
+++ patch.01/src/xpad-tray.c 2014-07-05 10:55:01.202213000 -0500
@@ -34,9 +34,12 @@
enum
{
DO_NOTHING,
+ SHOW_ALL,
+ HIDE_ALL,
TOGGLE_SHOW_ALL,
LIST_OF_PADS,
- NEW_PAD
+ NEW_PAD,
+ SHOW_MENU
};
static void xpad_tray_open (XpadSettings *settings);
@@ -124,50 +127,74 @@
gboolean no_pads = FALSE;
XpadPadGroup *group;
+ guint tray_menu_configuration;
+ g_object_get (settings, "tray-menu-configuration",
&tray_menu_configuration, NULL);
+
group = xpad_app_get_pad_group ();
-
- menu = gtk_menu_new ();
- if (!xpad_pad_group_num_pads (group))
- no_pads = TRUE;
-
- item = gtk_menu_item_new_with_mnemonic (_("_New"));
- g_signal_connect_swapped (item, "activate", G_CALLBACK (menu_spawn),
settings);
- gtk_container_add (GTK_CONTAINER (menu), item);
-
- item = gtk_separator_menu_item_new ();
- gtk_container_add (GTK_CONTAINER (menu), item);
-
- item = gtk_menu_item_new_with_mnemonic (_("_Show All"));
- g_signal_connect_swapped (item, "activate", G_CALLBACK
(xpad_pad_group_show_all), group);
- gtk_container_add (GTK_CONTAINER (menu), item);
- if (no_pads)
- gtk_widget_set_sensitive (item, FALSE);
-
- item = gtk_menu_item_new_with_mnemonic (_("_Close All"));
- g_signal_connect_swapped (item, "activate", G_CALLBACK
(xpad_pad_group_close_all), group);
- gtk_container_add (GTK_CONTAINER (menu), item);
- if (no_pads)
- gtk_widget_set_sensitive (item, FALSE);
-
- item = gtk_separator_menu_item_new ();
- gtk_container_add (GTK_CONTAINER (menu), item);
-
- xpad_pad_append_pad_titles_to_menu (menu);
-
- item = gtk_separator_menu_item_new ();
- gtk_container_add (GTK_CONTAINER (menu), item);
-
- item = gtk_menu_item_new_with_mnemonic (_("_Preferences"));
- g_signal_connect_swapped (item, "activate", G_CALLBACK
(xpad_preferences_open), settings);
- gtk_container_add (GTK_CONTAINER (menu), item);
-
- item = gtk_menu_item_new_with_mnemonic (_("_Quit"));
- g_signal_connect (item, "activate", G_CALLBACK (xpad_app_quit), NULL);
- gtk_container_add (GTK_CONTAINER (menu), item);
-
- gtk_widget_show_all (menu);
- gtk_menu_popup (GTK_MENU (menu), NULL, NULL,
gtk_status_icon_position_menu, icon, button, time);
+
+ switch (tray_menu_configuration)
+ {
+ case SHOW_ALL:
+ xpad_pad_group_show_all (group);
+ break;
+ case HIDE_ALL:
+ xpad_pad_group_close_all (group);
+ break;
+ case TOGGLE_SHOW_ALL:
+ xpad_pad_group_toggle_hide (group);
+ break;
+ case LIST_OF_PADS:
+ xpad_tray_show_windows_list (icon);
+ break;
+ case NEW_PAD:
+ menu_spawn (settings);
+ break;
+ case SHOW_MENU:
+ menu = gtk_menu_new ();
+ if (!xpad_pad_group_num_pads (group))
+ no_pads = TRUE;
+
+ item = gtk_menu_item_new_with_mnemonic (_("_New"));
+ g_signal_connect_swapped (item, "activate", G_CALLBACK (menu_spawn),
settings);
+ gtk_container_add (GTK_CONTAINER (menu), item);
+
+ item = gtk_separator_menu_item_new ();
+ gtk_container_add (GTK_CONTAINER (menu), item);
+
+ item = gtk_menu_item_new_with_mnemonic (_("_Show All"));
+ g_signal_connect_swapped (item, "activate", G_CALLBACK
(xpad_pad_group_show_all), group);
+ gtk_container_add (GTK_CONTAINER (menu), item);
+ if (no_pads)
+ gtk_widget_set_sensitive (item, FALSE);
+
+ item = gtk_menu_item_new_with_mnemonic (_("_Close All"));
+ g_signal_connect_swapped (item, "activate", G_CALLBACK
(xpad_pad_group_close_all), group);
+ gtk_container_add (GTK_CONTAINER (menu), item);
+ if (no_pads)
+ gtk_widget_set_sensitive (item, FALSE);
+
+ item = gtk_separator_menu_item_new ();
+ gtk_container_add (GTK_CONTAINER (menu), item);
+
+ xpad_pad_append_pad_titles_to_menu (menu);
+
+ item = gtk_separator_menu_item_new ();
+ gtk_container_add (GTK_CONTAINER (menu), item);
+
+ item = gtk_menu_item_new_with_mnemonic (_("_Preferences"));
+ g_signal_connect_swapped (item, "activate", G_CALLBACK
(xpad_preferences_open), settings);
+ gtk_container_add (GTK_CONTAINER (menu), item);
+
+ item = gtk_menu_item_new_with_mnemonic (_("_Quit"));
+ g_signal_connect (item, "activate", G_CALLBACK (xpad_app_quit), NULL);
+ gtk_container_add (GTK_CONTAINER (menu), item);
+
+ gtk_widget_show_all (menu);
+
+ gtk_menu_popup (GTK_MENU (menu), NULL, NULL,
gtk_status_icon_position_menu, icon, button, time);
+ break;
+ }
}
static void xpad_tray_activate_cb (GtkStatusIcon *icon, XpadSettings
*settings) {
@@ -178,6 +205,12 @@
switch (tray_click_configuration)
{
+ case SHOW_ALL:
+ xpad_pad_group_show_all (group);
+ break;
+ case HIDE_ALL:
+ xpad_pad_group_close_all (group);
+ break;
case TOGGLE_SHOW_ALL:
xpad_pad_group_toggle_hide (group);
break;
[/Code]
Follow ups