← Back to team overview

xpad-hackers team mailing list archive

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