Merge lp:~sachinr/xpad/xpad-tray-config into lp:xpad

Proposed by Sachin Raut
Status: Merged
Merged at revision: 660
Proposed branch: lp:~sachinr/xpad/xpad-tray-config
Merge into: lp:xpad
Diff against target: 388 lines (+174/-16) (has conflicts)
3 files modified
src/xpad-preferences.c (+44/-2)
src/xpad-settings.c (+34/-2)
src/xpad-tray.c (+96/-12)
Text conflict in src/xpad-tray.c
To merge this branch: bzr merge lp:~sachinr/xpad/xpad-tray-config
Reviewer Review Type Date Requested Status
Arthur Borsboom Approve
Review via email: mp+191013@code.launchpad.net

Description of the change

fixed Bug #304331: controlling right/left click on tray icon.
fixed Bug #345278: toggle on left mouse click.

To post a comment you must log in.
Revision history for this message
Arthur Borsboom (arthurborsboom) wrote :
Download full text (17.9 KiB)

Hi Sachin,

Thanks for proposing your code for merging. I would like to finish my
current work first (garbage collection with the two bugs). Once the
"garbage counter" is at 0, and the application is still working, I will
upload my code and start merging yours in the main branch, ok?

Some introduction from my side:

I'm Dutch (= The Netherlands), 34 years old, male (duhh), and currently
travelling through South-America by bike. Well, travelling, I am staying in
a nice appartment in Lima, right now. :)

How's life coping for you? You are Indian, am I right?

On 14 October 2013 12:37, Sachin Raut <email address hidden> wrote:

> Sachin Raut has proposed merging lp:~sachinr/xpad/xpad-tray-config into
> lp:xpad.
>
> Requested reviews:
> Xpad Administrators (xpad-team)
> Related bugs:
> Bug #304331 in Xpad: "controlling right/left click on tray icon"
> https://bugs.launchpad.net/xpad/+bug/304331
> Bug #345278 in Xpad: "toggle on left mouse click"
> https://bugs.launchpad.net/xpad/+bug/345278
>
> For more details, see:
> https://code.launchpad.net/~sachinr/xpad/xpad-tray-config/+merge/191013
>
> fixed Bug #304331: controlling right/left click on tray icon.
> fixed Bug #345278: toggle on left mouse click.
> --
> https://code.launchpad.net/~sachinr/xpad/xpad-tray-config/+merge/191013
> You are subscribed to branch lp:xpad.
>
> === modified file 'src/xpad-preferences.c'
> --- src/xpad-preferences.c 2008-09-21 00:03:40 +0000
> +++ src/xpad-preferences.c 2013-10-14 17:36:30 +0000
> @@ -39,6 +39,7 @@
> GtkWidget *editcheck;
> GtkWidget *stickycheck;
> GtkWidget *confirmcheck;
> + GtkWidget *trayconfigbox;
>
> GtkWidget *textbutton;
> GtkWidget *backbutton;
> @@ -50,6 +51,7 @@
> guint notify_font_handler;
> guint notify_back_handler;
> guint notify_text_handler;
> + guint notify_tray_handler;
> guint font_handler;
> guint back_handler;
> guint text_handler;
> @@ -58,6 +60,7 @@
> guint editcheck_handler;
> guint stickycheck_handler;
> guint confirmcheck_handler;
> + guint trayclick_handler;
> };
>
> static void change_edit_check (GtkToggleButton *button, XpadPreferences
> *pref);
> @@ -68,12 +71,14 @@
> static void change_text_color (GtkColorButton *button, XpadPreferences
> *pref);
> static void change_back_color (GtkColorButton *button, XpadPreferences
> *pref);
> static void change_font_face (GtkFontButton *button, XpadPreferences
> *pref);
> +static void change_tray_click_configuration(GtkComboBox *box,
> XpadPreferences *pref);
> static void notify_edit (XpadPreferences *pref);
> static void notify_sticky (XpadPreferences *pref);
> static void notify_confirm (XpadPreferences *pref);
> static void notify_fontname (XpadPreferences *pref);
> static void notify_text_color (XpadPreferences *pref);
> static void notify_back_color (XpadPreferences *pref);
> +static void notify_tray_click (XpadPreferences *pref);
> static void xpad_preferences_finalize (GObject *object);
> static void xpad_preferences_response (GtkDialog *dialog, gint response);
>
> @@ -112,7 +117,7 @@
> const gchar *fo...

Revision history for this message
Arthur Borsboom (arthurborsboom) wrote :

I have merged the changes in my development environment and fixed the conflicts.
Tested the four new options for the left-click behaviour and it seems to work nicely!

Good job.

I will merge this in the main branch.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'src/xpad-preferences.c'
2--- src/xpad-preferences.c 2008-09-21 00:03:40 +0000
3+++ src/xpad-preferences.c 2013-10-14 17:36:30 +0000
4@@ -39,6 +39,7 @@
5 GtkWidget *editcheck;
6 GtkWidget *stickycheck;
7 GtkWidget *confirmcheck;
8+ GtkWidget *trayconfigbox;
9
10 GtkWidget *textbutton;
11 GtkWidget *backbutton;
12@@ -50,6 +51,7 @@
13 guint notify_font_handler;
14 guint notify_back_handler;
15 guint notify_text_handler;
16+ guint notify_tray_handler;
17 guint font_handler;
18 guint back_handler;
19 guint text_handler;
20@@ -58,6 +60,7 @@
21 guint editcheck_handler;
22 guint stickycheck_handler;
23 guint confirmcheck_handler;
24+ guint trayclick_handler;
25 };
26
27 static void change_edit_check (GtkToggleButton *button, XpadPreferences *pref);
28@@ -68,12 +71,14 @@
29 static void change_text_color (GtkColorButton *button, XpadPreferences *pref);
30 static void change_back_color (GtkColorButton *button, XpadPreferences *pref);
31 static void change_font_face (GtkFontButton *button, XpadPreferences *pref);
32+static void change_tray_click_configuration(GtkComboBox *box, XpadPreferences *pref);
33 static void notify_edit (XpadPreferences *pref);
34 static void notify_sticky (XpadPreferences *pref);
35 static void notify_confirm (XpadPreferences *pref);
36 static void notify_fontname (XpadPreferences *pref);
37 static void notify_text_color (XpadPreferences *pref);
38 static void notify_back_color (XpadPreferences *pref);
39+static void notify_tray_click (XpadPreferences *pref);
40 static void xpad_preferences_finalize (GObject *object);
41 static void xpad_preferences_response (GtkDialog *dialog, gint response);
42
43@@ -112,7 +117,7 @@
44 const gchar *fontname;
45 GtkStyle *style;
46 GtkWidget *label, *appearance_frame, *alignment, *appearance_vbox;
47- GtkWidget *options_frame, *options_vbox, *global_vbox;
48+ GtkWidget *options_frame, *options_vbox, *global_vbox, *tray_config_vbox;
49 gchar *text;
50 GtkSizeGroup *size_group_labels = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
51 GtkRequisition req;
52@@ -272,10 +277,28 @@
53 "child", alignment,
54 NULL));
55
56-
57+ tray_config_vbox = GTK_WIDGET (g_object_new (GTK_TYPE_VBOX,
58+ "homogeneous", FALSE,
59+ "spacing", 6,
60+ NULL));
61+
62+ pref->priv->trayconfigbox = gtk_combo_box_new_text();
63+ gtk_combo_box_append_text( GTK_COMBO_BOX( pref->priv->trayconfigbox ), "Do Nothing" );
64+ gtk_combo_box_append_text( GTK_COMBO_BOX( pref->priv->trayconfigbox ), "Toggle Show All" );
65+ gtk_combo_box_append_text( GTK_COMBO_BOX( pref->priv->trayconfigbox ), "List of Pads" );
66+ gtk_combo_box_append_text( GTK_COMBO_BOX( pref->priv->trayconfigbox ), "New Pad" );
67+ gtk_combo_box_set_active( GTK_COMBO_BOX( pref->priv->trayconfigbox ), xpad_settings_get_tray_click_handler(xpad_settings()));
68+
69+ hbox = gtk_hbox_new(FALSE, 12);
70+ label = gtk_label_new_with_mnemonic(_("Tray click behaviour"));
71+ gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
72+ gtk_box_pack_start(GTK_BOX(hbox), pref->priv->trayconfigbox, TRUE, TRUE, 0);
73+ gtk_box_pack_start(GTK_BOX(tray_config_vbox), hbox, TRUE, TRUE, 0);
74+
75 gtk_box_pack_start (GTK_BOX (options_vbox), pref->priv->editcheck, FALSE, FALSE, 0);
76 gtk_box_pack_start (GTK_BOX (options_vbox), pref->priv->stickycheck, FALSE, FALSE, 0);
77 gtk_box_pack_start (GTK_BOX (options_vbox), pref->priv->confirmcheck, FALSE, FALSE, 0);
78+ g_object_set (GTK_WIDGET(options_vbox), "child", tray_config_vbox, NULL);
79
80 global_vbox = g_object_new (GTK_TYPE_VBOX,
81 "border-width", 6,
82@@ -295,12 +318,14 @@
83 pref->priv->text_handler = g_signal_connect (pref->priv->textbutton, "color-set", G_CALLBACK (change_text_color), pref);
84 pref->priv->back_handler = g_signal_connect (pref->priv->backbutton, "color-set", G_CALLBACK (change_back_color), pref);
85 pref->priv->font_handler = g_signal_connect (pref->priv->fontbutton, "font-set", G_CALLBACK (change_font_face), pref);
86+ pref->priv->trayclick_handler = g_signal_connect(pref->priv->trayconfigbox, "changed", G_CALLBACK(change_tray_click_configuration), pref);
87 pref->priv->notify_font_handler = g_signal_connect_swapped (xpad_settings (), "notify::fontname", G_CALLBACK (notify_fontname), pref);
88 pref->priv->notify_text_handler = g_signal_connect_swapped (xpad_settings (), "notify::text-color", G_CALLBACK (notify_text_color), pref);
89 pref->priv->notify_back_handler = g_signal_connect_swapped (xpad_settings (), "notify::back-color", G_CALLBACK (notify_back_color), pref);
90 pref->priv->notify_sticky_handler = g_signal_connect_swapped (xpad_settings (), "notify::sticky", G_CALLBACK (notify_sticky), pref);
91 pref->priv->notify_edit_handler = g_signal_connect_swapped (xpad_settings (), "notify::edit-lock", G_CALLBACK (notify_edit), pref);
92 pref->priv->notify_confirm_handler = g_signal_connect_swapped (xpad_settings (), "notify::confirm-destroy", G_CALLBACK (notify_confirm), pref);
93+ pref->priv->notify_tray_handler = g_signal_connect_swapped (xpad_settings (), "notify::tray_click_configuration", G_CALLBACK(notify_tray_click), pref);
94
95 g_object_unref (size_group_labels);
96
97@@ -394,6 +419,14 @@
98 }
99
100 static void
101+change_tray_click_configuration(GtkComboBox *box, XpadPreferences *pref)
102+{
103+ g_signal_handler_block(xpad_settings(), pref->priv->notify_tray_handler);
104+ xpad_settings_set_tray_click_handler(xpad_settings(), gtk_combo_box_get_active(box));
105+ g_signal_handler_unblock(xpad_settings(), pref->priv->notify_tray_handler);
106+}
107+
108+static void
109 change_text_color (GtkColorButton *button, XpadPreferences *pref)
110 {
111 GdkColor color;
112@@ -516,3 +549,12 @@
113 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (pref->priv->confirmcheck), xpad_settings_get_confirm_destroy (xpad_settings ()));
114 g_signal_handler_unblock (pref->priv->confirmcheck, pref->priv->confirmcheck_handler);
115 }
116+
117+static void
118+notify_tray_click(XpadPreferences *pref)
119+{
120+ g_signal_handler_block(pref->priv->trayconfigbox, pref->priv->trayclick_handler);
121+ gtk_combo_box_set_active(GTK_COMBO_BOX(pref->priv->trayconfigbox), xpad_settings_get_tray_click_handler(xpad_settings()));
122+ g_signal_handler_unblock(pref->priv->trayconfigbox, pref->priv->trayclick_handler);
123+}
124+
125
126=== modified file 'src/xpad-settings.c'
127--- src/xpad-settings.c 2013-10-07 20:07:46 +0000
128+++ src/xpad-settings.c 2013-10-14 17:36:30 +0000
129@@ -35,6 +35,7 @@
130 gboolean confirm_destroy;
131 gboolean edit_lock;
132 gboolean sticky;
133+ guint tray_click_configuration;
134 gboolean has_toolbar;
135 gboolean autohide_toolbar;
136 gboolean has_scrollbar;
137@@ -59,6 +60,7 @@
138 PROP_CONFIRM_DESTROY,
139 PROP_STICKY,
140 PROP_EDIT_LOCK,
141+ PROP_TRAY_CLICK_CONFIGURATION,
142 PROP_HAS_TOOLBAR,
143 PROP_AUTOHIDE_TOOLBAR,
144 PROP_HAS_SCROLLBAR,
145@@ -149,7 +151,15 @@
146 "Whether edit lock mode is enabled",
147 FALSE,
148 G_PARAM_READWRITE));
149-
150+ g_object_class_install_property (gobject_class,
151+ PROP_TRAY_CLICK_CONFIGURATION,
152+ g_param_spec_uint ("tray_click_configuration",
153+ "Tray Click Configuration",
154+ "What configuration is selected on tray click",
155+ 0,
156+ G_MAXUINT,
157+ 2,
158+ G_PARAM_READWRITE));
159 g_object_class_install_property (gobject_class,
160 PROP_HAS_TOOLBAR,
161 g_param_spec_boolean ("has_toolbar",
162@@ -239,6 +249,7 @@
163 settings->priv->confirm_destroy = TRUE;
164 settings->priv->sticky = FALSE;
165 settings->priv->edit_lock = FALSE;
166+ settings->priv->tray_click_configuration = 0;
167 settings->priv->fontname = NULL;
168 settings->priv->has_toolbar = TRUE;
169 settings->priv->autohide_toolbar = TRUE;
170@@ -350,6 +361,21 @@
171 return settings->priv->edit_lock;
172 }
173
174+void xpad_settings_set_tray_click_handler (XpadSettings *settings, guint conf)
175+{
176+ if (settings->priv->tray_click_configuration == conf)
177+ return;
178+
179+ settings->priv->tray_click_configuration = conf;
180+ save_to_file(settings, DEFAULTS_FILENAME);
181+ g_object_notify (G_OBJECT (settings), "tray_click_configuration");
182+}
183+
184+guint xpad_settings_get_tray_click_handler(XpadSettings *settings)
185+{
186+ return settings->priv->tray_click_configuration;
187+}
188+
189 void xpad_settings_set_has_toolbar (XpadSettings *settings, gboolean toolbar)
190 {
191 if (settings->priv->has_toolbar == toolbar)
192@@ -607,7 +633,11 @@
193 case PROP_EDIT_LOCK:
194 xpad_settings_set_edit_lock (settings, g_value_get_boolean (value));
195 break;
196-
197+
198+ case PROP_TRAY_CLICK_CONFIGURATION:
199+ xpad_settings_set_tray_click_handler(settings, g_value_get_uint(value));
200+ break;
201+
202 case PROP_HAS_TOOLBAR:
203 xpad_settings_set_has_toolbar (settings, g_value_get_boolean (value));
204 break;
205@@ -727,6 +757,7 @@
206 "b|confirm_destroy", &settings->priv->confirm_destroy,
207 "b|edit_lock", &settings->priv->edit_lock,
208 "b|sticky_on_start", &settings->priv->sticky,
209+ "u|tray_click_configuration", &settings->priv->tray_click_configuration,
210 "h|back_red", &back.red,
211 "h|back_green", &back.green,
212 "h|back_blue", &back.blue,
213@@ -818,6 +849,7 @@
214 "b|confirm_destroy", settings->priv->confirm_destroy,
215 "b|edit_lock", settings->priv->edit_lock,
216 "b|sticky_on_start", settings->priv->sticky,
217+ "u|tray_click_configuration", settings->priv->tray_click_configuration,
218 "h|back_red", settings->priv->back ? settings->priv->back->red : 0,
219 "h|back_green", settings->priv->back ? settings->priv->back->green : 0,
220 "h|back_blue", settings->priv->back ? settings->priv->back->blue : 0,
221
222=== modified file 'src/xpad-tray.c'
223--- src/xpad-tray.c 2013-10-09 14:46:10 +0000
224+++ src/xpad-tray.c 2013-10-14 17:36:30 +0000
225@@ -29,8 +29,23 @@
226 #include "xpad-preferences.h"
227 #include "xpad-tray.h"
228
229+enum
230+{
231+ DO_NOTHING,
232+ TOGGLE_SHOW_ALL,
233+ LIST_OF_PADS,
234+ NEW_PAD
235+};
236+// tray icon left click handler
237 static void xpad_tray_activate_cb (GtkStatusIcon *icon);
238+// tray icon right click handler
239 static void xpad_tray_popup_menu_cb (GtkStatusIcon *icon, guint button, guint time);
240+// "toggle show all" menu item handler
241+static void xpad_tray_show_hide_all (void);
242+// "show pads" menu item handler
243+static void xpad_tray_show_windows_list (GtkStatusIcon *icon);
244+// helper function to append pad window title as item to menu
245+static void xpad_tray_append_pad_window_titles_to_menu (GtkWidget *menu);
246
247 static GtkStatusIcon *docklet = NULL;
248
249@@ -101,6 +116,25 @@
250 g_slist_free (pads);
251 }
252
253+static void
254+xpad_tray_show_hide_all (void)
255+{
256+ GSList *pads = xpad_pad_group_get_pads (xpad_app_get_pad_group ());
257+ // find if any pad is visible
258+ gboolean open = FALSE;
259+ GSList *i;
260+ for(i = pads; i != NULL; i = i->next)
261+ {
262+ if (gtk_widget_get_visible(GTK_WIDGET(i->data)))
263+ {
264+ open = TRUE;
265+ break;
266+ }
267+ }
268+ g_slist_foreach(pads, (GFunc) (open ? gtk_widget_hide : gtk_widget_show), NULL);
269+ g_slist_free (pads);
270+}
271+
272 static void
273 menu_spawn (XpadPadGroup *group)
274 {
275@@ -112,11 +146,13 @@
276 xpad_tray_popup_menu_cb (GtkStatusIcon *icon, guint button, guint time)
277 {
278 GtkWidget *menu, *item;
279- GSList *pads, *l;
280- gint n;
281-
282+ GSList *pads;
283+ gboolean no_any_pad = FALSE;
284 menu = gtk_menu_new ();
285 pads = xpad_pad_group_get_pads (xpad_app_get_pad_group ());
286+ if (!pads)
287+ no_any_pad = TRUE;
288+ g_slist_free (pads);
289
290 item = gtk_image_menu_item_new_from_stock (GTK_STOCK_NEW, NULL);
291 g_signal_connect_swapped (item, "activate", G_CALLBACK (menu_spawn), xpad_app_get_pad_group ());
292@@ -131,28 +167,72 @@
293 g_signal_connect_swapped (item, "activate", G_CALLBACK (menu_show_all), xpad_app_get_pad_group ());
294 gtk_container_add (GTK_CONTAINER (menu), item);
295 gtk_widget_show (item);
296- if (!pads)
297+ if (no_any_pad)
298 gtk_widget_set_sensitive (item, FALSE);
299
300 item = gtk_image_menu_item_new_with_mnemonic (_("_Close All"));
301 g_signal_connect_swapped (item, "activate", G_CALLBACK (xpad_pad_group_close_all), xpad_app_get_pad_group ());
302 gtk_container_add (GTK_CONTAINER (menu), item);
303 gtk_widget_show (item);
304- if (!pads)
305+ if (no_any_pad)
306 gtk_widget_set_sensitive (item, FALSE);
307
308 item = gtk_separator_menu_item_new ();
309 gtk_container_add (GTK_CONTAINER (menu), item);
310 gtk_widget_show (item);
311
312- /**
313- * Order pads according to title.
314- */
315+ // append window titles
316+ xpad_tray_append_pad_window_titles_to_menu (menu);
317+
318+ item = gtk_image_menu_item_new_from_stock (GTK_STOCK_PREFERENCES, NULL);
319+ g_signal_connect (item, "activate", G_CALLBACK (xpad_preferences_open), NULL);
320+ gtk_container_add (GTK_CONTAINER (menu), item);
321+ gtk_widget_show (item);
322+
323+ item = gtk_image_menu_item_new_from_stock (GTK_STOCK_QUIT, NULL);
324+ g_signal_connect (item, "activate", G_CALLBACK (gtk_main_quit), NULL);
325+ gtk_container_add (GTK_CONTAINER (menu), item);
326+ gtk_widget_show (item);
327+
328+ gtk_menu_popup (GTK_MENU (menu), NULL, NULL, gtk_status_icon_position_menu, icon, button, time);
329+}
330+
331+static void
332+xpad_tray_activate_cb (GtkStatusIcon *icon)
333+{
334+ switch (xpad_settings_get_tray_click_handler(xpad_settings()))
335+ {
336+ case TOGGLE_SHOW_ALL:
337+ xpad_tray_show_hide_all();
338+ break;
339+ case LIST_OF_PADS:
340+ xpad_tray_show_windows_list(icon);
341+ break;
342+ case NEW_PAD:
343+ menu_spawn(xpad_app_get_pad_group());
344+ break;
345+ }
346+}
347+
348+static void
349+xpad_tray_show_windows_list (GtkStatusIcon *icon)
350+{
351+ GtkWidget* menu = gtk_menu_new ();
352+ xpad_tray_append_pad_window_titles_to_menu (menu);
353+ gtk_menu_popup (GTK_MENU (menu), NULL, NULL, gtk_status_icon_position_menu, icon, 0, gtk_get_current_event_time());
354+}
355+
356+static void
357+xpad_tray_append_pad_window_titles_to_menu (GtkWidget *menu)
358+{
359+ GSList *pads, *l;
360+ GtkWidget *item;
361+ gint n;
362+
363+ pads = xpad_pad_group_get_pads (xpad_app_get_pad_group ());
364+ // Order pads according to title.
365 pads = g_slist_sort (pads, (GCompareFunc) menu_title_compare);
366-
367- /**
368- * Populate list of windows.
369- */
370+ // Populate list of windows.
371 for (l = pads, n = 1; l; l = l->next, n++)
372 {
373 gchar *title;
374@@ -174,6 +254,7 @@
375 g_free (title);
376 }
377 g_slist_free (pads);
378+<<<<<<< TREE
379
380 if (pads)
381 {
382@@ -203,3 +284,6 @@
383 g_slist_free (pads);
384 }
385
386+=======
387+}
388+>>>>>>> MERGE-SOURCE

Subscribers

People subscribed via source and target branches