xpad-hackers team mailing list archive
-
xpad-hackers team
-
Mailing list archive
-
Message #00193
Re: Expanding Options
Hi,
Can you please create bug on launch pad and add your patches over there. ?
That would be easy for other to check what you have done. :)
On 7/5/14, Zero Valintine <phantom.egc@xxxxxxxxxxxxxxxxxxx> wrote:
> 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]
>
> _______________________________________________
> Mailing list: https://launchpad.net/~xpad-hackers
> Post to : xpad-hackers@xxxxxxxxxxxxxxxxxxx
> Unsubscribe : https://launchpad.net/~xpad-hackers
> More help : https://help.launchpad.net/ListHelp
>
--
*Regards,
Sagar*
References