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
=== modified file 'src/Dialogs.vala'
--- src/Dialogs.vala 2014-06-11 05:26:59 +0000
+++ src/Dialogs.vala 2014-06-23 18:22:30 +0000
@@ -22,7 +22,7 @@
22}22}
2323
24public bool confirm_delete_saved_search(SavedSearch search) {24public bool confirm_delete_saved_search(SavedSearch search) {
25 string msg = _("This will remove the saved search \"%s\". Continue?")25 string msg = _("This will remove the smart album \"%s\". Continue?")
26 .printf(search.get_name());26 .printf(search.get_name());
27 27
28 return AppWindow.negate_affirm_question(msg, _("_Cancel"), _("_Delete"),28 return AppWindow.negate_affirm_question(msg, _("_Cancel"), _("_Delete"),
2929
=== modified file 'src/Resources.vala'
--- src/Resources.vala 2014-06-22 15:06:34 +0000
+++ src/Resources.vala 2014-06-23 18:22:30 +0000
@@ -362,9 +362,9 @@
362 return _("Unable to rename search to \"%s\" because the search already exists.").printf(name);362 return _("Unable to rename search to \"%s\" because the search already exists.").printf(name);
363 }363 }
364 364
365 public const string DEFAULT_SAVED_SEARCH_NAME = _("Saved Search");365 public const string DEFAULT_SAVED_SEARCH_NAME = _("Smart Album");
366 366
367 public const string DELETE_SAVED_SEARCH_DIALOG_TITLE = _("Delete Search");367 public const string DELETE_SAVED_SEARCH_DIALOG_TITLE = _("Delete Album");
368 368
369 public const string DELETE_SEARCH_MENU = _("_Delete");369 public const string DELETE_SEARCH_MENU = _("_Delete");
370 public const string EDIT_SEARCH_MENU = _("_Edit...");370 public const string EDIT_SEARCH_MENU = _("_Edit...");
371371
=== modified file 'src/library/LibraryWindow.vala'
--- src/library/LibraryWindow.vala 2014-06-22 06:40:38 +0000
+++ src/library/LibraryWindow.vala 2014-06-23 18:22:30 +0000
@@ -339,7 +339,7 @@
339 339
340 Gtk.ActionEntry new_search = { "CommonNewSearch", null, TRANSLATABLE, "<Ctrl>S", null, 340 Gtk.ActionEntry new_search = { "CommonNewSearch", null, TRANSLATABLE, "<Ctrl>S", null,
341 on_new_search };341 on_new_search };
342 new_search.label = _("Ne_w Saved Search...");342 new_search.label = _("New Smart Album…");
343 actions += new_search;343 actions += new_search;
344344
345 // top-level menus345 // top-level menus
346346
=== modified file 'src/searches/Branch.vala'
--- src/searches/Branch.vala 2013-01-21 21:16:09 +0000
+++ src/searches/Branch.vala 2014-06-23 18:22:30 +0000
@@ -42,14 +42,14 @@
42 }42 }
43 43
44 private void on_saved_search_added(SavedSearch search) {44 private void on_saved_search_added(SavedSearch search) {
45 debug("search added");45 debug("smart album added");
46 Searches.SidebarEntry entry = new Searches.SidebarEntry(search);46 Searches.SidebarEntry entry = new Searches.SidebarEntry(search);
47 entry_map.set(search, entry);47 entry_map.set(search, entry);
48 graft(get_root(), entry);48 graft(get_root(), entry);
49 }49 }
50 50
51 private void on_saved_search_removed(SavedSearch search) {51 private void on_saved_search_removed(SavedSearch search) {
52 debug("search removed");52 debug("smart album removed");
53 Searches.SidebarEntry? entry = entry_map.get(search);53 Searches.SidebarEntry? entry = entry_map.get(search);
54 assert(entry != null);54 assert(entry != null);
55 55
@@ -65,7 +65,7 @@
65 private Gtk.Menu? context_menu = null;65 private Gtk.Menu? context_menu = null;
66 66
67 public Grouping() {67 public Grouping() {
68 base (_("Saved Searches"), new ThemedIcon(Gtk.Stock.FIND));68 base (_("Smart Albums"), new ThemedIcon("playlist-automatic"));
69 setup_context_menu();69 setup_context_menu();
70 }70 }
71 71
@@ -74,7 +74,7 @@
74 Gtk.ActionEntry[] actions = new Gtk.ActionEntry[0];74 Gtk.ActionEntry[] actions = new Gtk.ActionEntry[0];
75 75
76 Gtk.ActionEntry new_search = { "CommonNewSearch", null, TRANSLATABLE, null, null, on_new_search };76 Gtk.ActionEntry new_search = { "CommonNewSearch", null, TRANSLATABLE, null, null, on_new_search };
77 new_search.label = _("Ne_w Saved Search...");77 new_search.label = _("New Smart Album…");
78 actions += new_search;78 actions += new_search;
79 79
80 group.add_actions(actions, this);80 group.add_actions(actions, this);
@@ -113,7 +113,7 @@
113 }113 }
114 114
115 internal static void init() {115 internal static void init() {
116 single_search_icon = new ThemedIcon(Gtk.Stock.FIND);116 single_search_icon = new ThemedIcon("playlist-automatic");
117 }117 }
118 118
119 internal static void terminate() {119 internal static void terminate() {
@@ -147,4 +147,4 @@
147 if (Dialogs.confirm_delete_saved_search(search))147 if (Dialogs.confirm_delete_saved_search(search))
148 AppWindow.get_command_manager().execute(new DeleteSavedSearchCommand(search));148 AppWindow.get_command_manager().execute(new DeleteSavedSearchCommand(search));
149 }149 }
150}150}
151\ No newline at end of file151\ No newline at end of file
152152
=== modified file 'src/searches/SavedSearchDialog.vala'
--- src/searches/SavedSearchDialog.vala 2013-08-27 21:53:39 +0000
+++ src/searches/SavedSearchDialog.vala 2014-06-23 18:22:30 +0000
@@ -48,12 +48,11 @@
48 set_type_combo_box(SearchCondition.SearchType.ANY_TEXT); // Sets default.48 set_type_combo_box(SearchCondition.SearchType.ANY_TEXT); // Sets default.
49 type_combo.changed.connect(on_type_changed);49 type_combo.changed.connect(on_type_changed);
50 50
51 remove_button = new Gtk.Button();51 remove_button = new Gtk.Button.from_icon_name("list-remove-symbolic", Gtk.IconSize.BUTTON);
52 remove_button.set_label(" – ");
53 remove_button.button_press_event.connect(on_removed);52 remove_button.button_press_event.connect(on_removed);
54 53
55 align = new Gtk.Alignment(0,0,0,0);54 align = new Gtk.Alignment(0,0,0,0);
56 55
57 box = new Gtk.Box(Gtk.Orientation.HORIZONTAL, 8);56 box = new Gtk.Box(Gtk.Orientation.HORIZONTAL, 8);
58 box.pack_start(type_combo, false, false, 0);57 box.pack_start(type_combo, false, false, 0);
59 box.pack_start(align, false, false, 0);58 box.pack_start(align, false, false, 0);
@@ -481,10 +480,8 @@
481 private const string DATE_FORMAT = "%x";480 private const string DATE_FORMAT = "%x";
482 private Gtk.Box box;481 private Gtk.Box box;
483 private Gtk.ComboBoxText context;482 private Gtk.ComboBoxText context;
484 private Gtk.Button label_one;483 private Granite.Widgets.DatePicker datepicker_one;
485 private Gtk.Button label_two;484 private Granite.Widgets.DatePicker datepicker_two;
486 private Gtk.Calendar cal_one;
487 private Gtk.Calendar cal_two;
488 private Gtk.Label and;485 private Gtk.Label and;
489 486
490 private SearchRowContainer parent;487 private SearchRowContainer parent;
@@ -502,82 +499,53 @@
502 context.set_active(0);499 context.set_active(0);
503 context.changed.connect(on_changed);500 context.changed.connect(on_changed);
504 501
505 cal_one = new Gtk.Calendar();502 datepicker_one = new Granite.Widgets.DatePicker();
506 cal_two = new Gtk.Calendar();503 datepicker_two = new Granite.Widgets.DatePicker();
507
508 label_one = new Gtk.Button();
509 label_one.clicked.connect(on_one_clicked);
510 label_two = new Gtk.Button();
511 label_two.clicked.connect(on_two_clicked);
512 504
513 and = new Gtk.Label(_("and"));505 and = new Gtk.Label(_("and"));
514 506
515 box = new Gtk.Box(Gtk.Orientation.HORIZONTAL, 8);507 box = new Gtk.Box(Gtk.Orientation.HORIZONTAL, 8);
516 box.pack_start(context, false, false, 0);508 box.pack_start(context, false, false, 0);
517 box.pack_start(label_one, false, false, 0);509 box.pack_start(datepicker_one, false, false, 0);
518 box.pack_start(and, false, false, 0);510 box.pack_start(and, false, false, 0);
519 box.pack_start(label_two, false, false, 0);511 box.pack_start(datepicker_two, false, false, 0);
520 512
521 box.show_all();513 box.show_all();
522 update_date_labels();514 update_datepickers();
523 }515 }
524 516
525 ~SearchRowRating() {517 ~SearchRowRating() {
526 context.changed.disconnect(on_changed);518 context.changed.disconnect(on_changed);
527 }519 }
528 520
529 private void update_date_labels() {521 private void update_datepickers() {
530 SearchConditionDate.Context c = (SearchConditionDate.Context) context.get_active();522 SearchConditionDate.Context c = (SearchConditionDate.Context)context.get_active();
531 523
532 // Only show "and" and 2nd date label for between mode.524 // Only show "and" and 2nd date label for between mode.
533 if (c == SearchConditionDate.Context.BETWEEN) {525 if (c == SearchConditionDate.Context.BETWEEN) {
534 label_one.show();526 datepicker_one.show();
535 and.show();527 and.show();
536 label_two.show();528 datepicker_two.show();
537 } else if (c == SearchConditionDate.Context.IS_NOT_SET) {529 } else if (c == SearchConditionDate.Context.IS_NOT_SET) {
538 label_one.hide();530 datepicker_one.hide();
539 and.hide();531 and.hide();
540 label_two.hide();532 datepicker_two.hide();
541 } else {533 } else {
542 label_one.show();534 datepicker_one.show();
543 and.hide();535 and.hide();
544 label_two.hide();536 datepicker_two.hide();
545 }537 }
546
547 // Set label text to date.
548 label_one.label = get_date_one().format(DATE_FORMAT);
549 label_two.label = get_date_two().format(DATE_FORMAT);;
550 }538 }
551 539
552 public override Gtk.Widget get_widget() {540 public override Gtk.Widget get_widget() {
553 return box;541 return box;
554 }542 }
555 543
556 private DateTime get_date_one() {
557 return new DateTime.local(cal_one.year, cal_one.month + 1, cal_one.day, 0, 0, 0.0);
558 }
559
560 private DateTime get_date_two() {
561 return new DateTime.local(cal_two.year, cal_two.month + 1, cal_two.day, 0, 0, 0.0);
562 }
563
564 private void set_date_one(DateTime date) {
565 cal_one.day = date.get_day_of_month();
566 cal_one.month = date.get_month() - 1;
567 cal_one.year = date.get_year();
568 }
569
570 private void set_date_two(DateTime date) {
571 cal_two.day = date.get_day_of_month();
572 cal_two.month = date.get_month() - 1;
573 cal_two.year = date.get_year();
574 }
575
576 public override SearchCondition get_search_condition() {544 public override SearchCondition get_search_condition() {
577 SearchCondition.SearchType search_type = parent.get_search_type();545 SearchCondition.SearchType search_type = parent.get_search_type();
578 SearchConditionDate.Context search_context = (SearchConditionDate.Context) context.get_active();546 SearchConditionDate.Context search_context = (SearchConditionDate.Context) context.get_active();
579 SearchConditionDate c = new SearchConditionDate(search_type, search_context, get_date_one(),547 SearchConditionDate c = new SearchConditionDate(search_type, search_context, datepicker_one.date,
580 get_date_two());548 datepicker_two.date);
581 return c;549 return c;
582 }550 }
583 551
@@ -585,9 +553,9 @@
585 SearchConditionDate? cond = sc as SearchConditionDate;553 SearchConditionDate? cond = sc as SearchConditionDate;
586 assert(cond != null);554 assert(cond != null);
587 context.set_active(cond.context);555 context.set_active(cond.context);
588 set_date_one(cond.date_one);556 datepicker_one.date = cond.date_one;
589 set_date_two(cond.date_two);557 datepicker_two.date = cond.date_two;
590 update_date_labels();558 update_datepickers();
591 }559 }
592 560
593 public override bool is_complete() {561 public override bool is_complete() {
@@ -596,50 +564,14 @@
596 564
597 private void on_changed() {565 private void on_changed() {
598 parent.changed(parent);566 parent.changed(parent);
599 update_date_labels();567 update_datepickers();
600 }
601
602 private void popup_calendar(Gtk.Calendar cal) {
603 int orig_day = cal.day;
604 int orig_month = cal.month;
605 int orig_year = cal.year;
606 Gtk.Dialog d = new Gtk.Dialog.with_buttons(null, null,
607 Gtk.DialogFlags.MODAL, Gtk.Stock.CANCEL, Gtk.ResponseType.REJECT,
608 Gtk.Stock.OK, Gtk.ResponseType.ACCEPT);
609 d.set_modal(true);
610 d.set_resizable(false);
611 d.set_decorated(false);
612 ((Gtk.Box) d.get_content_area()).add(cal);
613 ulong id_1 = cal.day_selected.connect(()=>{update_date_labels();});
614 ulong id_2 = cal.day_selected_double_click.connect(()=>{d.close();});
615 d.show_all();
616 int res = d.run();
617 if (res != Gtk.ResponseType.ACCEPT) {
618 // User hit cancel, restore original date.
619 cal.day = orig_day;
620 cal.month = orig_month;
621 cal.year = orig_year;
622 }
623 cal.disconnect(id_1);
624 cal.disconnect(id_2);
625 d.destroy();
626 update_date_labels();
627 }
628
629 private void on_one_clicked() {
630 popup_calendar(cal_one);
631 }
632
633 private void on_two_clicked() {
634 popup_calendar(cal_two);
635 }568 }
636 }569 }
637 570
638 private Gtk.Builder builder;
639 private Gtk.Dialog dialog;571 private Gtk.Dialog dialog;
640 private Gtk.Button add_criteria;572 private Gtk.Button add_criteria;
641 private Gtk.ComboBoxText operator;573 private Gtk.ComboBoxText operator;
642 private Gtk.Box row_box;574 private Gtk.Grid row_box;
643 private Gtk.Entry search_title;575 private Gtk.Entry search_title;
644 private Gee.ArrayList<SearchRowContainer> row_list = new Gee.ArrayList<SearchRowContainer>();576 private Gee.ArrayList<SearchRowContainer> row_list = new Gee.ArrayList<SearchRowContainer>();
645 private bool edit_mode = false;577 private bool edit_mode = false;
@@ -658,8 +590,8 @@
658 row_list.get(0).allow_removal(false);590 row_list.get(0).allow_removal(false);
659 591
660 // Add buttons for new search.592 // Add buttons for new search.
661 dialog.add_action_widget(new Gtk.Button.from_stock(Gtk.Stock.CANCEL), Gtk.ResponseType.CANCEL);593 dialog.add_action_widget(new Gtk.Button.with_label(_("Cancel")), Gtk.ResponseType.CANCEL);
662 Gtk.Button ok_button = new Gtk.Button.from_stock(Gtk.Stock.OK);594 Gtk.Button ok_button = new Gtk.Button.with_label(_("Add"));
663 ok_button.can_default = true;595 ok_button.can_default = true;
664 dialog.add_action_widget(ok_button, Gtk.ResponseType.OK);596 dialog.add_action_widget(ok_button, Gtk.ResponseType.OK);
665 dialog.set_default_response(Gtk.ResponseType.OK);597 dialog.set_default_response(Gtk.ResponseType.OK);
@@ -674,7 +606,7 @@
674 setup_dialog();606 setup_dialog();
675 607
676 // Add close button.608 // Add close button.
677 Gtk.Button close_button = new Gtk.Button.from_stock(Gtk.Stock.CLOSE);609 Gtk.Button close_button = new Gtk.Button.with_label(_("Save"));
678 close_button.can_default = true;610 close_button.can_default = true;
679 dialog.add_action_widget(close_button, Gtk.ResponseType.OK);611 dialog.add_action_widget(close_button, Gtk.ResponseType.OK);
680 dialog.set_default_response(Gtk.ResponseType.OK);612 dialog.set_default_response(Gtk.ResponseType.OK);
@@ -697,32 +629,69 @@
697 ~SavedSearchDialog() {629 ~SavedSearchDialog() {
698 search_title.changed.disconnect(on_title_changed);630 search_title.changed.disconnect(on_title_changed);
699 }631 }
700 632
701 // Builds the dialog UI. Doesn't add buttons to the dialog or call dialog.show().633 // Builds the dialog UI. Doesn't add buttons to the dialog or call dialog.show().
702 private void setup_dialog() {634 private void setup_dialog() {
703 builder = AppWindow.create_builder();635 dialog = new Gtk.Dialog();
704 636 dialog.title = _("Smart Album");
705 dialog = builder.get_object("Search criteria") as Gtk.Dialog;637 dialog.modal = true;
706 dialog.set_parent_window(AppWindow.get_instance().get_parent_window());638 dialog.transient_for= AppWindow.get_instance();
707 dialog.set_transient_for(AppWindow.get_instance());
708 dialog.response.connect(on_response);639 dialog.response.connect(on_response);
709 640
710 add_criteria = builder.get_object("Add search button") as Gtk.Button;641 add_criteria = new Gtk.Button.from_icon_name("list-add-symbolic", Gtk.IconSize.BUTTON);
711 add_criteria.button_press_event.connect(on_add_criteria);642 add_criteria.button_press_event.connect (on_add_criteria);
712 643
713 search_title = builder.get_object("Search title") as Gtk.Entry;644 Gtk.Label search_label = new Gtk.Label("Name:");
714 search_title.set_activates_default(true);645
646 search_title = new Gtk.Entry();
647 search_title.activates_default = true;
648 search_title.hexpand = true;
715 search_title.changed.connect(on_title_changed);649 search_title.changed.connect(on_title_changed);
716 650
717 row_box = builder.get_object("row_box") as Gtk.Box;651 Gtk.Grid search_content_grid = new Gtk.Grid();
718 652 search_content_grid.orientation = Gtk.Orientation.HORIZONTAL;
719 operator = builder.get_object("Type of search criteria") as Gtk.ComboBoxText;653 search_content_grid.column_spacing = 6;
654 search_content_grid.add(search_label);
655 search_content_grid.add(search_title);
656
657 Gtk.Label match_label = new Gtk.Label.with_mnemonic(_("_Match"));
658 Gtk.Label match2_label = new Gtk.Label.with_mnemonic(_("of the following:"));
659 match2_label.hexpand = true;
660 match2_label.xalign = 0;
661
662 row_box = new Gtk.Grid();
663 row_box.orientation = Gtk.Orientation.VERTICAL;
664 row_box.row_spacing = 12;
665
666 operator = new Gtk.ComboBoxText();
720 operator.append_text(_("any"));667 operator.append_text(_("any"));
721 operator.append_text(_("all"));668 operator.append_text(_("all"));
722 operator.append_text(_("none"));669 operator.append_text(_("none"));
723 operator.set_active(0);670 operator.active = 0;
671
672 Gtk.Grid match_grid = new Gtk.Grid();
673 match_grid.orientation = Gtk.Orientation.HORIZONTAL;
674 match_grid.column_spacing = 6;
675 match_grid.add(match_label);
676 match_grid.add(operator);
677 match_grid.add(match2_label);
678 match_grid.add(add_criteria);
679
680 Gtk.Grid search_grid = new Gtk.Grid();
681 search_grid.orientation = Gtk.Orientation.VERTICAL;
682 search_grid.margin = 12;
683 search_grid.row_spacing = 12;
684
685 search_grid.add(search_content_grid);
686 search_grid.add(new Gtk.Separator(Gtk.Orientation.HORIZONTAL));
687 search_grid.add(match_grid);
688 search_grid.add(new Gtk.Separator(Gtk.Orientation.HORIZONTAL));
689 search_grid.add(row_box);
690
691 Gtk.Box content = dialog.get_content_area() as Gtk.Box;
692 content.add(search_grid);
724 }693 }
725 694
726 // Displays the dialog.695 // Displays the dialog.
727 public void show() {696 public void show() {
728 dialog.run();697 dialog.run();
@@ -826,4 +795,4 @@
826 795
827 dialog.set_response_sensitive(Gtk.ResponseType.OK, valid);796 dialog.set_response_sensitive(Gtk.ResponseType.OK, valid);
828 }797 }
829}798}
830\ No newline at end of file799\ No newline at end of file
831800
=== modified file 'src/sidebar/Tree.vala'
--- src/sidebar/Tree.vala 2014-06-08 20:11:20 +0000
+++ src/sidebar/Tree.vala 2014-06-23 18:22:30 +0000
@@ -196,7 +196,7 @@
196 Gtk.ActionEntry[] actions = new Gtk.ActionEntry[0];196 Gtk.ActionEntry[] actions = new Gtk.ActionEntry[0];
197 197
198 Gtk.ActionEntry new_search = { "CommonNewSearch", null, TRANSLATABLE, null, null, on_new_search };198 Gtk.ActionEntry new_search = { "CommonNewSearch", null, TRANSLATABLE, null, null, on_new_search };
199 new_search.label = _("Ne_w Saved Search...");199 new_search.label = _("New Smart Album…");
200 actions += new_search;200 actions += new_search;
201201
202 Gtk.ActionEntry new_tag = { "CommonNewTag", null, TRANSLATABLE, null, null, on_new_tag };202 Gtk.ActionEntry new_tag = { "CommonNewTag", null, TRANSLATABLE, null, null, on_new_tag };
203203
=== modified file 'ui/shotwell.glade'
--- ui/shotwell.glade 2014-05-20 03:38:19 +0000
+++ ui/shotwell.glade 2014-06-23 18:22:30 +0000
@@ -2,204 +2,6 @@
2<!-- Generated with glade 3.16.1 -->2<!-- Generated with glade 3.16.1 -->
3<interface>3<interface>
4 <requires lib="gtk+" version="3.0"/>4 <requires lib="gtk+" version="3.0"/>
5 <object class="GtkDialog" id="Search criteria">
6 <property name="can_focus">False</property>
7 <property name="border_width">5</property>
8 <property name="title" translatable="yes">Search</property>
9 <property name="resizable">False</property>
10 <property name="modal">True</property>
11 <property name="destroy_with_parent">True</property>
12 <property name="type_hint">dialog</property>
13 <property name="skip_taskbar_hint">True</property>
14 <child internal-child="vbox">
15 <object class="GtkBox" id="dialog-vbox6">
16 <property name="visible">True</property>
17 <property name="can_focus">False</property>
18 <property name="orientation">vertical</property>
19 <property name="spacing">2</property>
20 <child internal-child="action_area">
21 <object class="GtkButtonBox" id="search dialog buttons">
22 <property name="visible">True</property>
23 <property name="can_focus">False</property>
24 <property name="layout_style">end</property>
25 <child>
26 <placeholder/>
27 </child>
28 </object>
29 <packing>
30 <property name="expand">False</property>
31 <property name="fill">True</property>
32 <property name="pack_type">end</property>
33 <property name="position">0</property>
34 </packing>
35 </child>
36 <child>
37 <object class="GtkAlignment" id="title_aln">
38 <property name="visible">True</property>
39 <property name="can_focus">False</property>
40 <child>
41 <object class="GtkBox" id="hbox3">
42 <property name="visible">True</property>
43 <property name="can_focus">False</property>
44 <child>
45 <object class="GtkLabel" id="Name of search:">
46 <property name="visible">True</property>
47 <property name="can_focus">False</property>
48 <property name="label" translatable="yes">_Name of search:</property>
49 <property name="use_underline">True</property>
50 <property name="mnemonic_widget">Search title</property>
51 </object>
52 <packing>
53 <property name="expand">False</property>
54 <property name="fill">True</property>
55 <property name="padding">8</property>
56 <property name="position">0</property>
57 </packing>
58 </child>
59 <child>
60 <object class="GtkEntry" id="Search title">
61 <property name="visible">True</property>
62 <property name="can_focus">True</property>
63 <property name="invisible_char">•</property>
64 <property name="width_chars">20</property>
65 <property name="primary_icon_activatable">False</property>
66 <property name="secondary_icon_activatable">False</property>
67 </object>
68 <packing>
69 <property name="expand">True</property>
70 <property name="fill">True</property>
71 <property name="padding">8</property>
72 <property name="position">1</property>
73 </packing>
74 </child>
75 </object>
76 </child>
77 </object>
78 <packing>
79 <property name="expand">True</property>
80 <property name="fill">True</property>
81 <property name="position">1</property>
82 </packing>
83 </child>
84 <child>
85 <object class="GtkHSeparator" id="hseparator1">
86 <property name="visible">True</property>
87 <property name="can_focus">False</property>
88 </object>
89 <packing>
90 <property name="expand">False</property>
91 <property name="fill">True</property>
92 <property name="padding">8</property>
93 <property name="position">2</property>
94 </packing>
95 </child>
96 <child>
97 <object class="GtkAlignment" id="alignment9">
98 <property name="visible">True</property>
99 <property name="can_focus">False</property>
100 <child>
101 <object class="GtkBox" id="hbox2">
102 <property name="visible">True</property>
103 <property name="can_focus">False</property>
104 <property name="spacing">10</property>
105 <child>
106 <object class="GtkLabel" id="Match">
107 <property name="visible">True</property>
108 <property name="can_focus">False</property>
109 <property name="label" translatable="yes">_Match</property>
110 <property name="use_underline">True</property>
111 <property name="justify">right</property>
112 <property name="mnemonic_widget">Type of search criteria</property>
113 </object>
114 <packing>
115 <property name="expand">False</property>
116 <property name="fill">True</property>
117 <property name="padding">8</property>
118 <property name="position">0</property>
119 </packing>
120 </child>
121 <child>
122 <object class="GtkComboBoxText" id="Type of search criteria">
123 <property name="visible">True</property>
124 <property name="can_focus">False</property>
125 </object>
126 <packing>
127 <property name="expand">False</property>
128 <property name="fill">False</property>
129 <property name="padding">1</property>
130 <property name="position">1</property>
131 </packing>
132 </child>
133 <child>
134 <object class="GtkLabel" id="of the following:">
135 <property name="visible">True</property>
136 <property name="can_focus">False</property>
137 <property name="ypad">3</property>
138 <property name="label" translatable="yes">of the following:</property>
139 </object>
140 <packing>
141 <property name="expand">False</property>
142 <property name="fill">True</property>
143 <property name="padding">8</property>
144 <property name="position">2</property>
145 </packing>
146 </child>
147 <child>
148 <placeholder/>
149 </child>
150 <child>
151 <object class="GtkButton" id="Add search button">
152 <property name="label"> + </property>
153 <property name="visible">True</property>
154 <property name="can_focus">True</property>
155 <property name="receives_default">True</property>
156 </object>
157 <packing>
158 <property name="expand">False</property>
159 <property name="fill">False</property>
160 <property name="pack_type">end</property>
161 <property name="position">4</property>
162 </packing>
163 </child>
164 </object>
165 </child>
166 </object>
167 <packing>
168 <property name="expand">True</property>
169 <property name="fill">True</property>
170 <property name="position">3</property>
171 </packing>
172 </child>
173 <child>
174 <object class="GtkHSeparator" id="hseparator2">
175 <property name="visible">True</property>
176 <property name="can_focus">False</property>
177 </object>
178 <packing>
179 <property name="expand">False</property>
180 <property name="fill">True</property>
181 <property name="padding">8</property>
182 <property name="position">4</property>
183 </packing>
184 </child>
185 <child>
186 <object class="GtkBox" id="row_box">
187 <property name="visible">True</property>
188 <property name="can_focus">False</property>
189 <property name="orientation">vertical</property>
190 <child>
191 <placeholder/>
192 </child>
193 </object>
194 <packing>
195 <property name="expand">True</property>
196 <property name="fill">True</property>
197 <property name="position">5</property>
198 </packing>
199 </child>
200 </object>
201 </child>
202 </object>
203 <object class="GtkAdjustment" id="bg_color_adjustment">5 <object class="GtkAdjustment" id="bg_color_adjustment">
204 <property name="upper">65535</property>6 <property name="upper">65535</property>
205 <property name="step_increment">1000</property>7 <property name="step_increment">1000</property>

Subscribers

People subscribed via source and target branches

to all changes: