Merge lp:~arthurborsboom/xpad/xpad-4.2 into lp:xpad

Proposed by Arthur Borsboom
Status: Merged
Merged at revision: 653
Proposed branch: lp:~arthurborsboom/xpad/xpad-4.2
Merge into: lp:xpad
Diff against target: 470 lines (+84/-80)
3 files modified
AUTHORS (+1/-0)
src/xpad-pad.c (+81/-78)
src/xpad-pad.h (+2/-2)
To merge this branch: bzr merge lp:~arthurborsboom/xpad/xpad-4.2
Reviewer Review Type Date Requested Status
Arthur Borsboom Approve
Review via email: mp+190753@code.launchpad.net

Description of the change

Fixed reset and loading of sticky settings on startup.
Added Arthur Borsboom to list of authors.

To post a comment you must log in.
Revision history for this message
Arthur Borsboom (arthurborsboom) :
review: Approve
lp:~arthurborsboom/xpad/xpad-4.2 updated
653. By Arthur Borsboom

lp:385007: sticky setting is reset on start up. lp:890212: Update translations.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'AUTHORS'
2--- AUTHORS 2011-11-14 17:33:09 +0000
3+++ AUTHORS 2013-10-11 19:58:57 +0000
4@@ -1,3 +1,4 @@
5 Michael Terry <mike@mterry.name>
6 Jeroen Vermeulen <jtv@xs4all.nl>
7 Sergei Riaguzov <riaguzov@gmail.com>
8+Arthur Borsboom <arthurborsboom@gmail.com>
9
10=== modified file 'src/xpad-pad.c'
11--- src/xpad-pad.c 2013-10-09 14:46:10 +0000
12+++ src/xpad-pad.c 2013-10-11 19:58:57 +0000
13@@ -4,7 +4,8 @@
14 Copyright (c) 2009 Paul Ivanov
15 Copyright (c) 2011 Sergei Riaguzov
16 Copyright (c) 2011 Dennis Hilmar
17-Copytight (c) 2011 OBATA Akio
18+Copyright (c) 2011 OBATA Akio
19+Copyright (c) 2013 Arthur Borsboom
20
21 This program is free software; you can redistribute it and/or modify
22 it under the terms of the GNU General Public License as published by
23@@ -88,7 +89,7 @@
24 LAST_PROP
25 };
26
27-static void load_info (XpadPad *pad, gboolean *show);
28+static void xpad_pad_load_info (XpadPad *pad, gboolean *show);
29 static GtkWidget *menu_get_popup_highlight (XpadPad *pad, GtkAccelGroup *accel_group);
30 static GtkWidget *menu_get_popup_no_highlight (XpadPad *pad, GtkAccelGroup *accel_group);
31 static void xpad_pad_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
32@@ -98,7 +99,6 @@
33 static void xpad_pad_show (XpadPad *pad);
34 static gboolean xpad_pad_configure_event (XpadPad *pad, GdkEventConfigure *event);
35 static gboolean xpad_pad_toolbar_size_allocate (XpadPad *pad, GtkAllocation *event);
36-static gboolean xpad_pad_window_state_event (XpadPad *pad, GdkEventWindowState *event);
37 static gboolean xpad_pad_delete_event (XpadPad *pad, GdkEvent *event);
38 static gboolean xpad_pad_popup_menu (XpadPad *pad);
39 static void xpad_pad_popup_deactivate (GtkWidget *menu, XpadPad *pad);
40@@ -134,25 +134,28 @@
41
42 static guint signals[LAST_SIGNAL] = { 0 };
43
44+/* Create a new empty pad. */
45 GtkWidget *
46 xpad_pad_new (XpadPadGroup *group)
47 {
48 return GTK_WIDGET (g_object_new (XPAD_TYPE_PAD, "group", group, NULL));
49 }
50
51+/* Create a new pad based on the provided info-xxxxx file from the config directory and return this pad */
52 GtkWidget *
53 xpad_pad_new_with_info (XpadPadGroup *group, const gchar *info_filename, gboolean *show)
54 {
55 GtkWidget *pad = GTK_WIDGET (g_object_new (XPAD_TYPE_PAD, "group", group, NULL));
56
57 XPAD_PAD (pad)->priv->infoname = g_strdup (info_filename);
58- load_info (XPAD_PAD (pad), show);
59+ xpad_pad_load_info (XPAD_PAD (pad), show);
60 xpad_pad_load_content (XPAD_PAD (pad));
61 gtk_window_set_role (GTK_WINDOW (pad), XPAD_PAD (pad)->priv->infoname);
62
63 return pad;
64 }
65
66+/* Create a new pad based on the provided filename from the command line */
67 GtkWidget *
68 xpad_pad_new_from_file (XpadPadGroup *group, const gchar *filename)
69 {
70@@ -189,6 +192,7 @@
71 return pad;
72 }
73
74+/* Class pad - constructor */
75 static void
76 xpad_pad_class_init (XpadPadClass *klass)
77 {
78@@ -221,15 +225,16 @@
79 g_type_class_add_private (gobject_class, sizeof (XpadPadPrivate));
80 }
81
82+/* Class pad - initializer */
83 static void
84 xpad_pad_init (XpadPad *pad)
85 {
86 GtkWidget *vbox;
87 GtkAccelGroup *accel_group;
88 GtkClipboard *clipboard;
89-
90+
91 pad->priv = XPAD_PAD_GET_PRIVATE (pad);
92-
93+
94 pad->priv->x = 0;
95 pad->priv->y = 0;
96 pad->priv->location_valid = FALSE;
97@@ -254,11 +259,11 @@
98 "follow-font-style", TRUE,
99 "follow-color-style", TRUE,
100 NULL);
101-
102+
103 xpad_text_view_set_pad (text_view, pad);
104
105 pad->priv->textview = GTK_WIDGET (text_view);
106-
107+
108 pad->priv->scrollbar = GTK_WIDGET (g_object_new (GTK_TYPE_SCROLLED_WINDOW,
109 "hadjustment", NULL,
110 "hscrollbar-policy", GTK_POLICY_NEVER,
111@@ -267,9 +272,9 @@
112 "vscrollbar-policy", GTK_POLICY_NEVER,
113 "child", pad->priv->textview,
114 NULL));
115-
116+
117 pad->priv->toolbar = GTK_WIDGET ( xpad_toolbar_new (pad));
118-
119+
120 accel_group = gtk_accel_group_new ();
121 gtk_window_add_accel_group (GTK_WINDOW (pad), accel_group);
122 g_object_unref (G_OBJECT (accel_group));
123@@ -278,7 +283,7 @@
124 gtk_accel_group_connect (accel_group, GDK_Q, GDK_CONTROL_MASK, 0,
125 g_cclosure_new_swap (G_CALLBACK (xpad_pad_quit), pad, NULL));
126
127-
128+
129 vbox = GTK_WIDGET (g_object_new (GTK_TYPE_VBOX,
130 "homogeneous", FALSE,
131 "spacing", 0,
132@@ -286,7 +291,7 @@
133 "child", pad->priv->toolbar,
134 NULL));
135 gtk_container_child_set (GTK_CONTAINER (vbox), pad->priv->toolbar, "expand", FALSE, NULL);
136-
137+
138 gtk_window_set_decorated (GTK_WINDOW(pad), xpad_settings_get_has_decorations (xpad_settings ()));
139 gtk_window_set_default_size (GTK_WINDOW(pad), xpad_settings_get_width (xpad_settings ()), xpad_settings_get_height (xpad_settings ()));
140 gtk_window_set_gravity (GTK_WINDOW(pad), GDK_GRAVITY_STATIC); /* static gravity makes saving pad x,y work */
141@@ -298,14 +303,14 @@
142 g_object_set (G_OBJECT (pad),
143 "child", vbox,
144 NULL);
145-
146+
147 xpad_pad_notify_has_scrollbar (pad);
148 xpad_pad_notify_has_selection (pad);
149 xpad_pad_notify_clipboard_owner_changed (pad);
150 xpad_pad_notify_undo_redo_changed (pad);
151
152 clipboard = gtk_clipboard_get (GDK_SELECTION_CLIPBOARD);
153-
154+
155 /* Set up signals */
156 gtk_widget_add_events (GTK_WIDGET (pad), GDK_BUTTON_PRESS_MASK | GDK_PROPERTY_CHANGE_MASK);
157 gtk_widget_add_events (pad->priv->toolbar, GDK_ALL_EVENTS_MASK);
158@@ -317,19 +322,18 @@
159 g_signal_connect (pad, "delete-event", G_CALLBACK (xpad_pad_delete_event), NULL);
160 g_signal_connect (pad, "popup-menu", G_CALLBACK (xpad_pad_popup_menu), NULL);
161 g_signal_connect (pad, "show", G_CALLBACK (xpad_pad_show), NULL);
162- g_signal_connect (pad, "window-state-event", G_CALLBACK (xpad_pad_window_state_event), NULL);
163 g_signal_connect_swapped (gtk_text_view_get_buffer (GTK_TEXT_VIEW (pad->priv->textview)), "changed", G_CALLBACK (xpad_pad_text_changed), pad);
164-
165+
166 g_signal_connect (pad, "enter-notify-event", G_CALLBACK (xpad_pad_enter_notify_event), NULL);
167 g_signal_connect (pad, "leave-notify-event", G_CALLBACK (xpad_pad_leave_notify_event), NULL);
168-
169+
170 g_signal_connect_swapped (xpad_settings (), "notify::has-decorations", G_CALLBACK (xpad_pad_notify_has_decorations), pad);
171 g_signal_connect_swapped (xpad_settings (), "notify::has-toolbar", G_CALLBACK (xpad_pad_notify_has_toolbar), pad);
172 g_signal_connect_swapped (xpad_settings (), "notify::autohide-toolbar", G_CALLBACK (xpad_pad_notify_autohide_toolbar), pad);
173 g_signal_connect_swapped (xpad_settings (), "notify::has-scrollbar", G_CALLBACK (xpad_pad_notify_has_scrollbar), pad);
174 g_signal_connect_swapped (gtk_text_view_get_buffer (GTK_TEXT_VIEW (pad->priv->textview)), "notify::has-selection", G_CALLBACK (xpad_pad_notify_has_selection), pad);
175 g_signal_connect_swapped (clipboard, "owner-change", G_CALLBACK (xpad_pad_notify_clipboard_owner_changed), pad);
176-
177+
178 g_signal_connect_swapped (pad->priv->toolbar, "activate-new", G_CALLBACK (xpad_pad_spawn), pad);
179 g_signal_connect_swapped (pad->priv->toolbar, "activate-clear", G_CALLBACK (xpad_pad_clear), pad);
180 g_signal_connect_swapped (pad->priv->toolbar, "activate-close", G_CALLBACK (xpad_pad_close), pad);
181@@ -342,22 +346,22 @@
182 g_signal_connect_swapped (pad->priv->toolbar, "activate-properties", G_CALLBACK (xpad_pad_open_properties), pad);
183 g_signal_connect_swapped (pad->priv->toolbar, "activate-preferences", G_CALLBACK (xpad_pad_open_preferences), pad);
184 g_signal_connect_swapped (pad->priv->toolbar, "activate-quit", G_CALLBACK (xpad_pad_close_all), pad);
185-
186+
187 g_signal_connect (pad->priv->toolbar, "popup", G_CALLBACK (xpad_pad_toolbar_popup), pad);
188 g_signal_connect (pad->priv->toolbar, "popdown", G_CALLBACK (xpad_pad_toolbar_popdown), pad);
189-
190+
191 g_signal_connect (pad->priv->menu, "deactivate", G_CALLBACK (xpad_pad_popup_deactivate), pad);
192 g_signal_connect (pad->priv->highlight_menu, "deactivate", G_CALLBACK (xpad_pad_popup_deactivate), pad);
193-
194+
195 if (pad->priv->sticky)
196 gtk_window_stick (GTK_WINDOW (pad));
197 else
198 gtk_window_unstick (GTK_WINDOW (pad));
199-
200+
201 xpad_pad_sync_title (pad);
202-
203+
204 gtk_widget_show_all (vbox);
205-
206+
207 gtk_widget_hide (pad->priv->toolbar);
208 xpad_pad_notify_has_toolbar (pad);
209 }
210@@ -379,8 +383,6 @@
211 gtk_window_stick (GTK_WINDOW (pad));
212 else
213 gtk_window_unstick (GTK_WINDOW (pad));
214-
215-/* xpad_pad_sync_title (pad);*/
216 }
217
218 static void
219@@ -791,7 +793,7 @@
220 pango_font_description_free (fontdesc);
221 }
222
223- xpad_save_info_delayed (pad);
224+ xpad_pad_save_info_delayed (pad);
225 }
226
227 static void
228@@ -807,7 +809,7 @@
229 gtk_widget_modify_text (pad->priv->textview, GTK_STATE_NORMAL, xpad_pad_properties_get_text_color (prop));
230 }
231
232- xpad_save_info_delayed (pad);
233+ xpad_pad_save_info_delayed (pad);
234 }
235
236 static void
237@@ -817,7 +819,7 @@
238
239 gtk_widget_modify_text (pad->priv->textview, GTK_STATE_NORMAL, xpad_pad_properties_get_text_color (prop));
240
241- xpad_save_info_delayed (pad);
242+ xpad_pad_save_info_delayed (pad);
243 }
244
245 static void
246@@ -827,7 +829,7 @@
247
248 gtk_widget_modify_base (pad->priv->textview, GTK_STATE_NORMAL, xpad_pad_properties_get_back_color (prop));
249
250- xpad_save_info_delayed (pad);
251+ xpad_pad_save_info_delayed (pad);
252 }
253
254 static void
255@@ -843,7 +845,7 @@
256 if (fontdesc)
257 pango_font_description_free (fontdesc);
258
259- xpad_save_info_delayed (pad);
260+ xpad_pad_save_info_delayed (pad);
261 }
262
263 static void
264@@ -907,7 +909,7 @@
265 xpad_pad_sync_title (pad);
266
267 /* record change */
268- xpad_save_content_delayed(pad);
269+ xpad_pad_save_content_delayed(pad);
270 }
271
272 static gboolean
273@@ -932,7 +934,7 @@
274 pad->priv->height = event->height;
275 pad->priv->location_valid = TRUE;
276
277- xpad_save_content_delayed(pad);
278+ xpad_pad_save_content_delayed(pad);
279
280 /* Sometimes when moving, if the toolbar tries to hide itself,
281 the window manager will not resize it correctly. So, we make
282@@ -947,20 +949,6 @@
283 }
284
285 static gboolean
286-xpad_pad_window_state_event (XpadPad *pad, GdkEventWindowState *event)
287-{
288- if (event->changed_mask & GDK_WINDOW_STATE_STICKY) {
289- if (GTK_WIDGET_VISIBLE (pad))
290- {
291- pad->priv->sticky = (event->new_window_state & GDK_WINDOW_STATE_STICKY) ? TRUE : FALSE;
292- xpad_pad_save_info (pad);
293- }
294- }
295-
296- return FALSE;
297-}
298-
299-static gboolean
300 xpad_pad_delete_event (XpadPad *pad, GdkEvent *event)
301 {
302 xpad_pad_close (pad);
303@@ -1172,14 +1160,15 @@
304 g_free (content);
305 }
306
307+/* Extract all the metadata of a single pad from its info-xxxxx file and store it in the pad object */
308 static void
309-load_info (XpadPad *pad, gboolean *show)
310+xpad_pad_load_info (XpadPad *pad, gboolean *show)
311 {
312 gboolean locked = FALSE, follow_font = TRUE, follow_color = TRUE;
313 gboolean hidden = FALSE;
314 GdkColor text = {0}, back = {0};
315- gchar *fontname = NULL, *oldcontentprefix;
316-
317+ gchar *fontname = NULL;
318+
319 if (!pad->priv->infoname)
320 return;
321
322@@ -1240,26 +1229,43 @@
323 gtk_widget_modify_font (pad->priv->textview, font_desc);
324 pango_font_description_free (font_desc);
325 }
326-
327+
328+ /* Find the sticky notes menu setting for this pad (which is on the global default),
329+ * and change its setting to the setting from the info file (pad specific default).
330+ */
331+ if(GTK_IS_CONTAINER(pad->priv->menu)) {
332+ GObject *obj;
333+ GList *elem, *children;
334+ children = gtk_container_get_children(GTK_CONTAINER(pad->priv->menu));
335+
336+ for(elem = children; elem; elem = elem->next) {
337+ obj = (GObject *) elem->data;
338+
339+ if(GTK_IS_BIN(obj) && GTK_IS_MENU_ITEM(obj)) {
340+ GList *elem2, *children2;
341+ children2 = gtk_container_get_children(GTK_CONTAINER(gtk_menu_item_get_submenu(GTK_MENU_ITEM(obj))));
342+ for(elem2 = children2; elem2; elem2 = elem2->next) {
343+ obj = (GObject *) elem2->data;
344+ if (GTK_IS_CHECK_MENU_ITEM(obj)) {
345+ if (!g_strcmp0(gtk_menu_item_get_label(GTK_MENU_ITEM(obj)), "Show on _All Workspaces")) {
346+ gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(obj), pad->priv->sticky);
347+ break;
348+ }
349+ }
350+ }
351+ g_list_free(elem2);
352+ }
353+ }
354+ g_list_free(elem);
355+ }
356+ else
357+ g_warning("For some reason the variable pad->priv->menu is not a container. This results in not having a unique sticky setting for this pad. Falling back to the global sticky setting. Please send a bugreport.");
358+
359 if (pad->priv->sticky)
360 gtk_window_stick (GTK_WINDOW (pad));
361 else
362 gtk_window_unstick (GTK_WINDOW (pad));
363
364- /* Special check for contentname being absolute. A while back,
365- xpad had absolute pathnames, pointing to ~/.xpad/content-*.
366- Now, files are kept in ~/.config/xpad, so using old config
367- files with a new xpad will break pads. We check to see if
368- contentname is old pointer and then make it relative. */
369- oldcontentprefix = g_build_filename (g_get_home_dir (), ".xpad", "content-", NULL);
370- if (g_str_has_prefix (pad->priv->contentname, oldcontentprefix))
371- {
372- gchar *oldcontent = pad->priv->contentname;
373- pad->priv->contentname = g_path_get_basename (oldcontent);
374- g_free (oldcontent);
375- }
376- g_free (oldcontentprefix);
377-
378 if (show)
379 *show = !hidden;
380 }
381@@ -1321,7 +1327,7 @@
382 menu_about (XpadPad *pad)
383 {
384 const gchar *artists[] = {"Michael Terry <mike@mterry.name>", NULL};
385- const gchar *authors[] = {"Jeroen Vermeulen <jtv@xs4all.nl>", "Michael Terry <mike@mterry.name>", "Paul Ivanov <pivanov@berkeley.edu>", NULL};
386+ const gchar *authors[] = {"Arthur Borsboom <arthurborsboom@gmail.com", "Jeroen Vermeulen <jtv@xs4all.nl>", "Michael Terry <mike@mterry.name>", "Paul Ivanov <pivanov@berkeley.edu>", NULL};
387 const gchar *comments = _("Sticky notes");
388 const gchar *copyright = "© 2001-2007 Michael Terry";
389 /* we use g_strdup_printf because C89 has size limits on static strings */
390@@ -1342,7 +1348,7 @@
391 /* Translators: please translate this as your own name and optionally email
392 like so: "Your Name <your@email.com>" */
393 const gchar *translator_credits = _("translator-credits");
394- const gchar *website = "http://xpad.sourceforge.net/";
395+ const gchar *website = "https://launchpad.net/xpad";
396
397 gtk_show_about_dialog (GTK_WINDOW (pad),
398 "artists", artists,
399@@ -1487,7 +1493,7 @@
400 XpadTextBuffer *buffer = NULL;
401 buffer = XPAD_TEXT_BUFFER (gtk_text_view_get_buffer (GTK_TEXT_VIEW (pad->priv->textview)));
402 xpad_text_buffer_toggle_tag (buffer, name);
403- xpad_save_content_delayed(pad);
404+ xpad_pad_save_content_delayed(pad);
405 }
406
407 static void
408@@ -1514,13 +1520,17 @@
409 menu_toggle_tag (pad, "strikethrough");
410 }
411
412+/* Make the pad visually stick to the workspace and save this setting to the individual pad info file,
413+ * because this function has been probably been called, because of a menu toggle. */
414 static void
415 menu_sticky (XpadPad *pad, GtkCheckMenuItem *check)
416 {
417- if (gtk_check_menu_item_get_active (check))
418+ pad->priv->sticky = gtk_check_menu_item_get_active (check);
419+ if (pad->priv->sticky)
420 gtk_window_stick (GTK_WINDOW (pad));
421 else
422 gtk_window_unstick (GTK_WINDOW (pad));
423+ xpad_pad_save_info (pad);
424 }
425
426 static void
427@@ -1713,13 +1723,6 @@
428 if (item)
429 gtk_widget_set_sensitive (item, xpad_text_buffer_redo_available (buffer));
430
431- item = g_object_get_data (G_OBJECT (uppermenu), "sticky");
432- if (item) {
433- g_signal_handlers_block_by_func (item, menu_sticky, current_pad);
434- gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (item), current_pad->priv->sticky);
435- g_signal_handlers_unblock_by_func (item, menu_sticky, current_pad);
436- }
437-
438 menu = g_object_get_data (G_OBJECT (uppermenu), "notes-menu");
439 if (menu)
440 {
441@@ -1894,12 +1897,12 @@
442 {
443 xpad_pad_save_content(vptr);
444 }
445-void xpad_save_content_delayed (XpadPad *pad)
446+void xpad_pad_save_content_delayed (XpadPad *pad)
447 {
448 pad->priv->unsaved_content = TRUE;
449 Xpad_periodic_save_content_delayed(pad);
450 }
451-void xpad_save_info_delayed (XpadPad *pad)
452+void xpad_pad_save_info_delayed (XpadPad *pad)
453 {
454 pad->priv->unsaved_info = TRUE;
455 Xpad_periodic_save_info_delayed(pad);
456
457=== modified file 'src/xpad-pad.h'
458--- src/xpad-pad.h 2013-10-09 14:46:10 +0000
459+++ src/xpad-pad.h 2013-10-11 19:58:57 +0000
460@@ -65,8 +65,8 @@
461 void xpad_pad_load_content (XpadPad *pad);
462 void xpad_pad_save_content (XpadPad *pad);
463 void xpad_pad_save_unsaved (XpadPad *pad);
464-void xpad_save_content_delayed (XpadPad *pad);
465-void xpad_save_info_delayed (XpadPad *pad);
466+void xpad_pad_save_content_delayed (XpadPad *pad);
467+void xpad_pad_save_info_delayed (XpadPad *pad);
468
469 void xpad_pad_notify_has_selection (XpadPad *pad);
470 void xpad_pad_notify_clipboard_owner_changed (XpadPad *pad);

Subscribers

People subscribed via source and target branches