Merge lp:~tintou/pantheon-photos/saved-search-hardcoded into lp:~pantheon-photos/pantheon-photos/trunk

Proposed by Corentin Noël
Status: Merged
Approved by: Danielle Foré
Approved revision: 2526
Merged at revision: 2533
Proposed branch: lp:~tintou/pantheon-photos/saved-search-hardcoded
Merge into: lp:~pantheon-photos/pantheon-photos/trunk
Diff against target: 629 lines (+94/-323)
7 files modified
src/Dialogs.vala (+1/-1)
src/Resources.vala (+2/-2)
src/library/LibraryWindow.vala (+1/-1)
src/searches/Branch.vala (+6/-6)
src/searches/SavedSearchDialog.vala (+83/-114)
src/sidebar/Tree.vala (+1/-1)
ui/shotwell.glade (+0/-198)
To merge this branch: bzr merge lp:~tintou/pantheon-photos/saved-search-hardcoded
Reviewer Review Type Date Requested Status
Danielle Foré Approve
Victor Martinez (community) Approve
Review via email: mp+221114@code.launchpad.net

Commit message

* Port SavedSearch dialog from xml to vala
* Change "Saved Search" to "Smart Album"
* Use Granite DatePicker

Description of the change

Ported SavedSearch Dialog to hardcoded.

To post a comment you must log in.
2524. By Corentin Noël

Fixed code style.

Revision history for this message
Victor Martinez (victored) wrote :

Looks good to me. 'Saved Search' sounds a bit strange to me. It makes sense for developers because that's what it does, but 'Media Filter' would probably make more sense for the end user.

review: Approve
2525. By Corentin Noël

Renamed "Saved Search" to "Smart Album".

Revision history for this message
Danielle Foré (danrabbit) wrote :

The context menu for the source list still says "New Saved Search..."

review: Needs Fixing
2526. By Corentin Noël

Fixed Context Menu label.

Revision history for this message
Danielle Foré (danrabbit) wrote :

Looks good to me :)

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'src/Dialogs.vala'
2--- src/Dialogs.vala 2014-06-11 05:26:59 +0000
3+++ src/Dialogs.vala 2014-06-23 18:22:30 +0000
4@@ -22,7 +22,7 @@
5 }
6
7 public bool confirm_delete_saved_search(SavedSearch search) {
8- string msg = _("This will remove the saved search \"%s\". Continue?")
9+ string msg = _("This will remove the smart album \"%s\". Continue?")
10 .printf(search.get_name());
11
12 return AppWindow.negate_affirm_question(msg, _("_Cancel"), _("_Delete"),
13
14=== modified file 'src/Resources.vala'
15--- src/Resources.vala 2014-06-22 15:06:34 +0000
16+++ src/Resources.vala 2014-06-23 18:22:30 +0000
17@@ -362,9 +362,9 @@
18 return _("Unable to rename search to \"%s\" because the search already exists.").printf(name);
19 }
20
21- public const string DEFAULT_SAVED_SEARCH_NAME = _("Saved Search");
22+ public const string DEFAULT_SAVED_SEARCH_NAME = _("Smart Album");
23
24- public const string DELETE_SAVED_SEARCH_DIALOG_TITLE = _("Delete Search");
25+ public const string DELETE_SAVED_SEARCH_DIALOG_TITLE = _("Delete Album");
26
27 public const string DELETE_SEARCH_MENU = _("_Delete");
28 public const string EDIT_SEARCH_MENU = _("_Edit...");
29
30=== modified file 'src/library/LibraryWindow.vala'
31--- src/library/LibraryWindow.vala 2014-06-22 06:40:38 +0000
32+++ src/library/LibraryWindow.vala 2014-06-23 18:22:30 +0000
33@@ -339,7 +339,7 @@
34
35 Gtk.ActionEntry new_search = { "CommonNewSearch", null, TRANSLATABLE, "<Ctrl>S", null,
36 on_new_search };
37- new_search.label = _("Ne_w Saved Search...");
38+ new_search.label = _("New Smart Album…");
39 actions += new_search;
40
41 // top-level menus
42
43=== modified file 'src/searches/Branch.vala'
44--- src/searches/Branch.vala 2013-01-21 21:16:09 +0000
45+++ src/searches/Branch.vala 2014-06-23 18:22:30 +0000
46@@ -42,14 +42,14 @@
47 }
48
49 private void on_saved_search_added(SavedSearch search) {
50- debug("search added");
51+ debug("smart album added");
52 Searches.SidebarEntry entry = new Searches.SidebarEntry(search);
53 entry_map.set(search, entry);
54 graft(get_root(), entry);
55 }
56
57 private void on_saved_search_removed(SavedSearch search) {
58- debug("search removed");
59+ debug("smart album removed");
60 Searches.SidebarEntry? entry = entry_map.get(search);
61 assert(entry != null);
62
63@@ -65,7 +65,7 @@
64 private Gtk.Menu? context_menu = null;
65
66 public Grouping() {
67- base (_("Saved Searches"), new ThemedIcon(Gtk.Stock.FIND));
68+ base (_("Smart Albums"), new ThemedIcon("playlist-automatic"));
69 setup_context_menu();
70 }
71
72@@ -74,7 +74,7 @@
73 Gtk.ActionEntry[] actions = new Gtk.ActionEntry[0];
74
75 Gtk.ActionEntry new_search = { "CommonNewSearch", null, TRANSLATABLE, null, null, on_new_search };
76- new_search.label = _("Ne_w Saved Search...");
77+ new_search.label = _("New Smart Album…");
78 actions += new_search;
79
80 group.add_actions(actions, this);
81@@ -113,7 +113,7 @@
82 }
83
84 internal static void init() {
85- single_search_icon = new ThemedIcon(Gtk.Stock.FIND);
86+ single_search_icon = new ThemedIcon("playlist-automatic");
87 }
88
89 internal static void terminate() {
90@@ -147,4 +147,4 @@
91 if (Dialogs.confirm_delete_saved_search(search))
92 AppWindow.get_command_manager().execute(new DeleteSavedSearchCommand(search));
93 }
94-}
95+}
96\ No newline at end of file
97
98=== modified file 'src/searches/SavedSearchDialog.vala'
99--- src/searches/SavedSearchDialog.vala 2013-08-27 21:53:39 +0000
100+++ src/searches/SavedSearchDialog.vala 2014-06-23 18:22:30 +0000
101@@ -48,12 +48,11 @@
102 set_type_combo_box(SearchCondition.SearchType.ANY_TEXT); // Sets default.
103 type_combo.changed.connect(on_type_changed);
104
105- remove_button = new Gtk.Button();
106- remove_button.set_label(" – ");
107+ remove_button = new Gtk.Button.from_icon_name("list-remove-symbolic", Gtk.IconSize.BUTTON);
108 remove_button.button_press_event.connect(on_removed);
109
110 align = new Gtk.Alignment(0,0,0,0);
111-
112+
113 box = new Gtk.Box(Gtk.Orientation.HORIZONTAL, 8);
114 box.pack_start(type_combo, false, false, 0);
115 box.pack_start(align, false, false, 0);
116@@ -481,10 +480,8 @@
117 private const string DATE_FORMAT = "%x";
118 private Gtk.Box box;
119 private Gtk.ComboBoxText context;
120- private Gtk.Button label_one;
121- private Gtk.Button label_two;
122- private Gtk.Calendar cal_one;
123- private Gtk.Calendar cal_two;
124+ private Granite.Widgets.DatePicker datepicker_one;
125+ private Granite.Widgets.DatePicker datepicker_two;
126 private Gtk.Label and;
127
128 private SearchRowContainer parent;
129@@ -502,82 +499,53 @@
130 context.set_active(0);
131 context.changed.connect(on_changed);
132
133- cal_one = new Gtk.Calendar();
134- cal_two = new Gtk.Calendar();
135-
136- label_one = new Gtk.Button();
137- label_one.clicked.connect(on_one_clicked);
138- label_two = new Gtk.Button();
139- label_two.clicked.connect(on_two_clicked);
140+ datepicker_one = new Granite.Widgets.DatePicker();
141+ datepicker_two = new Granite.Widgets.DatePicker();
142
143 and = new Gtk.Label(_("and"));
144
145 box = new Gtk.Box(Gtk.Orientation.HORIZONTAL, 8);
146 box.pack_start(context, false, false, 0);
147- box.pack_start(label_one, false, false, 0);
148+ box.pack_start(datepicker_one, false, false, 0);
149 box.pack_start(and, false, false, 0);
150- box.pack_start(label_two, false, false, 0);
151+ box.pack_start(datepicker_two, false, false, 0);
152
153 box.show_all();
154- update_date_labels();
155+ update_datepickers();
156 }
157
158 ~SearchRowRating() {
159 context.changed.disconnect(on_changed);
160 }
161
162- private void update_date_labels() {
163- SearchConditionDate.Context c = (SearchConditionDate.Context) context.get_active();
164+ private void update_datepickers() {
165+ SearchConditionDate.Context c = (SearchConditionDate.Context)context.get_active();
166
167 // Only show "and" and 2nd date label for between mode.
168 if (c == SearchConditionDate.Context.BETWEEN) {
169- label_one.show();
170+ datepicker_one.show();
171 and.show();
172- label_two.show();
173+ datepicker_two.show();
174 } else if (c == SearchConditionDate.Context.IS_NOT_SET) {
175- label_one.hide();
176+ datepicker_one.hide();
177 and.hide();
178- label_two.hide();
179+ datepicker_two.hide();
180 } else {
181- label_one.show();
182+ datepicker_one.show();
183 and.hide();
184- label_two.hide();
185+ datepicker_two.hide();
186 }
187-
188- // Set label text to date.
189- label_one.label = get_date_one().format(DATE_FORMAT);
190- label_two.label = get_date_two().format(DATE_FORMAT);;
191 }
192
193 public override Gtk.Widget get_widget() {
194 return box;
195 }
196
197- private DateTime get_date_one() {
198- return new DateTime.local(cal_one.year, cal_one.month + 1, cal_one.day, 0, 0, 0.0);
199- }
200-
201- private DateTime get_date_two() {
202- return new DateTime.local(cal_two.year, cal_two.month + 1, cal_two.day, 0, 0, 0.0);
203- }
204-
205- private void set_date_one(DateTime date) {
206- cal_one.day = date.get_day_of_month();
207- cal_one.month = date.get_month() - 1;
208- cal_one.year = date.get_year();
209- }
210-
211- private void set_date_two(DateTime date) {
212- cal_two.day = date.get_day_of_month();
213- cal_two.month = date.get_month() - 1;
214- cal_two.year = date.get_year();
215- }
216-
217 public override SearchCondition get_search_condition() {
218 SearchCondition.SearchType search_type = parent.get_search_type();
219 SearchConditionDate.Context search_context = (SearchConditionDate.Context) context.get_active();
220- SearchConditionDate c = new SearchConditionDate(search_type, search_context, get_date_one(),
221- get_date_two());
222+ SearchConditionDate c = new SearchConditionDate(search_type, search_context, datepicker_one.date,
223+ datepicker_two.date);
224 return c;
225 }
226
227@@ -585,9 +553,9 @@
228 SearchConditionDate? cond = sc as SearchConditionDate;
229 assert(cond != null);
230 context.set_active(cond.context);
231- set_date_one(cond.date_one);
232- set_date_two(cond.date_two);
233- update_date_labels();
234+ datepicker_one.date = cond.date_one;
235+ datepicker_two.date = cond.date_two;
236+ update_datepickers();
237 }
238
239 public override bool is_complete() {
240@@ -596,50 +564,14 @@
241
242 private void on_changed() {
243 parent.changed(parent);
244- update_date_labels();
245- }
246-
247- private void popup_calendar(Gtk.Calendar cal) {
248- int orig_day = cal.day;
249- int orig_month = cal.month;
250- int orig_year = cal.year;
251- Gtk.Dialog d = new Gtk.Dialog.with_buttons(null, null,
252- Gtk.DialogFlags.MODAL, Gtk.Stock.CANCEL, Gtk.ResponseType.REJECT,
253- Gtk.Stock.OK, Gtk.ResponseType.ACCEPT);
254- d.set_modal(true);
255- d.set_resizable(false);
256- d.set_decorated(false);
257- ((Gtk.Box) d.get_content_area()).add(cal);
258- ulong id_1 = cal.day_selected.connect(()=>{update_date_labels();});
259- ulong id_2 = cal.day_selected_double_click.connect(()=>{d.close();});
260- d.show_all();
261- int res = d.run();
262- if (res != Gtk.ResponseType.ACCEPT) {
263- // User hit cancel, restore original date.
264- cal.day = orig_day;
265- cal.month = orig_month;
266- cal.year = orig_year;
267- }
268- cal.disconnect(id_1);
269- cal.disconnect(id_2);
270- d.destroy();
271- update_date_labels();
272- }
273-
274- private void on_one_clicked() {
275- popup_calendar(cal_one);
276- }
277-
278- private void on_two_clicked() {
279- popup_calendar(cal_two);
280+ update_datepickers();
281 }
282 }
283
284- private Gtk.Builder builder;
285 private Gtk.Dialog dialog;
286 private Gtk.Button add_criteria;
287 private Gtk.ComboBoxText operator;
288- private Gtk.Box row_box;
289+ private Gtk.Grid row_box;
290 private Gtk.Entry search_title;
291 private Gee.ArrayList<SearchRowContainer> row_list = new Gee.ArrayList<SearchRowContainer>();
292 private bool edit_mode = false;
293@@ -658,8 +590,8 @@
294 row_list.get(0).allow_removal(false);
295
296 // Add buttons for new search.
297- dialog.add_action_widget(new Gtk.Button.from_stock(Gtk.Stock.CANCEL), Gtk.ResponseType.CANCEL);
298- Gtk.Button ok_button = new Gtk.Button.from_stock(Gtk.Stock.OK);
299+ dialog.add_action_widget(new Gtk.Button.with_label(_("Cancel")), Gtk.ResponseType.CANCEL);
300+ Gtk.Button ok_button = new Gtk.Button.with_label(_("Add"));
301 ok_button.can_default = true;
302 dialog.add_action_widget(ok_button, Gtk.ResponseType.OK);
303 dialog.set_default_response(Gtk.ResponseType.OK);
304@@ -674,7 +606,7 @@
305 setup_dialog();
306
307 // Add close button.
308- Gtk.Button close_button = new Gtk.Button.from_stock(Gtk.Stock.CLOSE);
309+ Gtk.Button close_button = new Gtk.Button.with_label(_("Save"));
310 close_button.can_default = true;
311 dialog.add_action_widget(close_button, Gtk.ResponseType.OK);
312 dialog.set_default_response(Gtk.ResponseType.OK);
313@@ -697,32 +629,69 @@
314 ~SavedSearchDialog() {
315 search_title.changed.disconnect(on_title_changed);
316 }
317-
318+
319 // Builds the dialog UI. Doesn't add buttons to the dialog or call dialog.show().
320 private void setup_dialog() {
321- builder = AppWindow.create_builder();
322-
323- dialog = builder.get_object("Search criteria") as Gtk.Dialog;
324- dialog.set_parent_window(AppWindow.get_instance().get_parent_window());
325- dialog.set_transient_for(AppWindow.get_instance());
326+ dialog = new Gtk.Dialog();
327+ dialog.title = _("Smart Album");
328+ dialog.modal = true;
329+ dialog.transient_for= AppWindow.get_instance();
330 dialog.response.connect(on_response);
331-
332- add_criteria = builder.get_object("Add search button") as Gtk.Button;
333- add_criteria.button_press_event.connect(on_add_criteria);
334-
335- search_title = builder.get_object("Search title") as Gtk.Entry;
336- search_title.set_activates_default(true);
337+
338+ add_criteria = new Gtk.Button.from_icon_name("list-add-symbolic", Gtk.IconSize.BUTTON);
339+ add_criteria.button_press_event.connect (on_add_criteria);
340+
341+ Gtk.Label search_label = new Gtk.Label("Name:");
342+
343+ search_title = new Gtk.Entry();
344+ search_title.activates_default = true;
345+ search_title.hexpand = true;
346 search_title.changed.connect(on_title_changed);
347-
348- row_box = builder.get_object("row_box") as Gtk.Box;
349-
350- operator = builder.get_object("Type of search criteria") as Gtk.ComboBoxText;
351+
352+ Gtk.Grid search_content_grid = new Gtk.Grid();
353+ search_content_grid.orientation = Gtk.Orientation.HORIZONTAL;
354+ search_content_grid.column_spacing = 6;
355+ search_content_grid.add(search_label);
356+ search_content_grid.add(search_title);
357+
358+ Gtk.Label match_label = new Gtk.Label.with_mnemonic(_("_Match"));
359+ Gtk.Label match2_label = new Gtk.Label.with_mnemonic(_("of the following:"));
360+ match2_label.hexpand = true;
361+ match2_label.xalign = 0;
362+
363+ row_box = new Gtk.Grid();
364+ row_box.orientation = Gtk.Orientation.VERTICAL;
365+ row_box.row_spacing = 12;
366+
367+ operator = new Gtk.ComboBoxText();
368 operator.append_text(_("any"));
369 operator.append_text(_("all"));
370 operator.append_text(_("none"));
371- operator.set_active(0);
372+ operator.active = 0;
373+
374+ Gtk.Grid match_grid = new Gtk.Grid();
375+ match_grid.orientation = Gtk.Orientation.HORIZONTAL;
376+ match_grid.column_spacing = 6;
377+ match_grid.add(match_label);
378+ match_grid.add(operator);
379+ match_grid.add(match2_label);
380+ match_grid.add(add_criteria);
381+
382+ Gtk.Grid search_grid = new Gtk.Grid();
383+ search_grid.orientation = Gtk.Orientation.VERTICAL;
384+ search_grid.margin = 12;
385+ search_grid.row_spacing = 12;
386+
387+ search_grid.add(search_content_grid);
388+ search_grid.add(new Gtk.Separator(Gtk.Orientation.HORIZONTAL));
389+ search_grid.add(match_grid);
390+ search_grid.add(new Gtk.Separator(Gtk.Orientation.HORIZONTAL));
391+ search_grid.add(row_box);
392+
393+ Gtk.Box content = dialog.get_content_area() as Gtk.Box;
394+ content.add(search_grid);
395 }
396-
397+
398 // Displays the dialog.
399 public void show() {
400 dialog.run();
401@@ -826,4 +795,4 @@
402
403 dialog.set_response_sensitive(Gtk.ResponseType.OK, valid);
404 }
405-}
406+}
407\ No newline at end of file
408
409=== modified file 'src/sidebar/Tree.vala'
410--- src/sidebar/Tree.vala 2014-06-08 20:11:20 +0000
411+++ src/sidebar/Tree.vala 2014-06-23 18:22:30 +0000
412@@ -196,7 +196,7 @@
413 Gtk.ActionEntry[] actions = new Gtk.ActionEntry[0];
414
415 Gtk.ActionEntry new_search = { "CommonNewSearch", null, TRANSLATABLE, null, null, on_new_search };
416- new_search.label = _("Ne_w Saved Search...");
417+ new_search.label = _("New Smart Album…");
418 actions += new_search;
419
420 Gtk.ActionEntry new_tag = { "CommonNewTag", null, TRANSLATABLE, null, null, on_new_tag };
421
422=== modified file 'ui/shotwell.glade'
423--- ui/shotwell.glade 2014-05-20 03:38:19 +0000
424+++ ui/shotwell.glade 2014-06-23 18:22:30 +0000
425@@ -2,204 +2,6 @@
426 <!-- Generated with glade 3.16.1 -->
427 <interface>
428 <requires lib="gtk+" version="3.0"/>
429- <object class="GtkDialog" id="Search criteria">
430- <property name="can_focus">False</property>
431- <property name="border_width">5</property>
432- <property name="title" translatable="yes">Search</property>
433- <property name="resizable">False</property>
434- <property name="modal">True</property>
435- <property name="destroy_with_parent">True</property>
436- <property name="type_hint">dialog</property>
437- <property name="skip_taskbar_hint">True</property>
438- <child internal-child="vbox">
439- <object class="GtkBox" id="dialog-vbox6">
440- <property name="visible">True</property>
441- <property name="can_focus">False</property>
442- <property name="orientation">vertical</property>
443- <property name="spacing">2</property>
444- <child internal-child="action_area">
445- <object class="GtkButtonBox" id="search dialog buttons">
446- <property name="visible">True</property>
447- <property name="can_focus">False</property>
448- <property name="layout_style">end</property>
449- <child>
450- <placeholder/>
451- </child>
452- </object>
453- <packing>
454- <property name="expand">False</property>
455- <property name="fill">True</property>
456- <property name="pack_type">end</property>
457- <property name="position">0</property>
458- </packing>
459- </child>
460- <child>
461- <object class="GtkAlignment" id="title_aln">
462- <property name="visible">True</property>
463- <property name="can_focus">False</property>
464- <child>
465- <object class="GtkBox" id="hbox3">
466- <property name="visible">True</property>
467- <property name="can_focus">False</property>
468- <child>
469- <object class="GtkLabel" id="Name of search:">
470- <property name="visible">True</property>
471- <property name="can_focus">False</property>
472- <property name="label" translatable="yes">_Name of search:</property>
473- <property name="use_underline">True</property>
474- <property name="mnemonic_widget">Search title</property>
475- </object>
476- <packing>
477- <property name="expand">False</property>
478- <property name="fill">True</property>
479- <property name="padding">8</property>
480- <property name="position">0</property>
481- </packing>
482- </child>
483- <child>
484- <object class="GtkEntry" id="Search title">
485- <property name="visible">True</property>
486- <property name="can_focus">True</property>
487- <property name="invisible_char">•</property>
488- <property name="width_chars">20</property>
489- <property name="primary_icon_activatable">False</property>
490- <property name="secondary_icon_activatable">False</property>
491- </object>
492- <packing>
493- <property name="expand">True</property>
494- <property name="fill">True</property>
495- <property name="padding">8</property>
496- <property name="position">1</property>
497- </packing>
498- </child>
499- </object>
500- </child>
501- </object>
502- <packing>
503- <property name="expand">True</property>
504- <property name="fill">True</property>
505- <property name="position">1</property>
506- </packing>
507- </child>
508- <child>
509- <object class="GtkHSeparator" id="hseparator1">
510- <property name="visible">True</property>
511- <property name="can_focus">False</property>
512- </object>
513- <packing>
514- <property name="expand">False</property>
515- <property name="fill">True</property>
516- <property name="padding">8</property>
517- <property name="position">2</property>
518- </packing>
519- </child>
520- <child>
521- <object class="GtkAlignment" id="alignment9">
522- <property name="visible">True</property>
523- <property name="can_focus">False</property>
524- <child>
525- <object class="GtkBox" id="hbox2">
526- <property name="visible">True</property>
527- <property name="can_focus">False</property>
528- <property name="spacing">10</property>
529- <child>
530- <object class="GtkLabel" id="Match">
531- <property name="visible">True</property>
532- <property name="can_focus">False</property>
533- <property name="label" translatable="yes">_Match</property>
534- <property name="use_underline">True</property>
535- <property name="justify">right</property>
536- <property name="mnemonic_widget">Type of search criteria</property>
537- </object>
538- <packing>
539- <property name="expand">False</property>
540- <property name="fill">True</property>
541- <property name="padding">8</property>
542- <property name="position">0</property>
543- </packing>
544- </child>
545- <child>
546- <object class="GtkComboBoxText" id="Type of search criteria">
547- <property name="visible">True</property>
548- <property name="can_focus">False</property>
549- </object>
550- <packing>
551- <property name="expand">False</property>
552- <property name="fill">False</property>
553- <property name="padding">1</property>
554- <property name="position">1</property>
555- </packing>
556- </child>
557- <child>
558- <object class="GtkLabel" id="of the following:">
559- <property name="visible">True</property>
560- <property name="can_focus">False</property>
561- <property name="ypad">3</property>
562- <property name="label" translatable="yes">of the following:</property>
563- </object>
564- <packing>
565- <property name="expand">False</property>
566- <property name="fill">True</property>
567- <property name="padding">8</property>
568- <property name="position">2</property>
569- </packing>
570- </child>
571- <child>
572- <placeholder/>
573- </child>
574- <child>
575- <object class="GtkButton" id="Add search button">
576- <property name="label"> + </property>
577- <property name="visible">True</property>
578- <property name="can_focus">True</property>
579- <property name="receives_default">True</property>
580- </object>
581- <packing>
582- <property name="expand">False</property>
583- <property name="fill">False</property>
584- <property name="pack_type">end</property>
585- <property name="position">4</property>
586- </packing>
587- </child>
588- </object>
589- </child>
590- </object>
591- <packing>
592- <property name="expand">True</property>
593- <property name="fill">True</property>
594- <property name="position">3</property>
595- </packing>
596- </child>
597- <child>
598- <object class="GtkHSeparator" id="hseparator2">
599- <property name="visible">True</property>
600- <property name="can_focus">False</property>
601- </object>
602- <packing>
603- <property name="expand">False</property>
604- <property name="fill">True</property>
605- <property name="padding">8</property>
606- <property name="position">4</property>
607- </packing>
608- </child>
609- <child>
610- <object class="GtkBox" id="row_box">
611- <property name="visible">True</property>
612- <property name="can_focus">False</property>
613- <property name="orientation">vertical</property>
614- <child>
615- <placeholder/>
616- </child>
617- </object>
618- <packing>
619- <property name="expand">True</property>
620- <property name="fill">True</property>
621- <property name="position">5</property>
622- </packing>
623- </child>
624- </object>
625- </child>
626- </object>
627 <object class="GtkAdjustment" id="bg_color_adjustment">
628 <property name="upper">65535</property>
629 <property name="step_increment">1000</property>

Subscribers

People subscribed via source and target branches

to all changes: