[epiphany] EphyBookmarkProperties: Use template.



commit d7833a79f0e5f044f6976ecad824bec907e9dc49
Author: Arnaud Bonatti <arnaud bonatti gmail com>
Date:   Fri Nov 6 23:53:06 2015 +0100

    EphyBookmarkProperties: Use template.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=757669

 src/Makefile.am                          |    1 +
 src/bookmarks/ephy-bookmark-properties.c |  186 +++++++++++-------------------
 src/bookmarks/ephy-bookmarks-editor.c    |    2 +-
 src/bookmarks/ephy-bookmarks-ui.c        |    4 +-
 src/bookmarks/ephy-bookmarks-ui.h        |    3 +-
 src/epiphany.gresource.xml               |    1 +
 src/resources/bookmark-properties.ui     |  121 +++++++++++++++++++
 7 files changed, 196 insertions(+), 122 deletions(-)
---
diff --git a/src/Makefile.am b/src/Makefile.am
index 5b21ca7..7eb82ef 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -104,6 +104,7 @@ libephymain_la_CFLAGS = \
 
 RESOURCE_FILES = \
        resources/about.css                       \
+       resources/bookmark-properties.ui          \
        resources/clear-data-dialog.ui            \
        resources/cookies-dialog.ui               \
        resources/encoding-dialog.ui              \
diff --git a/src/bookmarks/ephy-bookmark-properties.c b/src/bookmarks/ephy-bookmark-properties.c
index 54033de..db9591a 100644
--- a/src/bookmarks/ephy-bookmark-properties.c
+++ b/src/bookmarks/ephy-bookmark-properties.c
@@ -49,15 +49,23 @@ struct _EphyBookmarkProperties
 {
        GtkDialog parent_instance;
 
+       /* construct properties */
        EphyBookmarks *bookmarks;
        EphyNode *bookmark;
        gboolean creating;
 
+       /* counters */
        gint duplicate_count;
        gint duplicate_idle;
 
-       GtkWidget *warning;
-       GtkWidget *entry;
+       /* from UI file */
+       GtkGrid           *grid;
+       GtkEntry          *title_entry;
+       GtkEntry          *adress_entry;
+       GtkLabel          *topics_label;
+       GtkExpander       *topics_expander;
+       GtkScrolledWindow *topics_scrolled_window;
+       GtkLabel          *warning_label;
 };
 
 enum
@@ -82,7 +90,7 @@ update_warning (EphyBookmarkProperties *properties)
         /* Translators: This string is used when counting bookmarks that
          * are similar to each other */
        label = g_strdup_printf (ngettext("%d bookmark is similar", "%d bookmarks are similar", 
properties->duplicate_count), properties->duplicate_count);
-       gtk_label_set_text (GTK_LABEL (properties->warning), label);
+       gtk_label_set_text (properties->warning_label, label);
        g_free (label);
 
        return FALSE;
@@ -161,8 +169,8 @@ ephy_bookmark_properties_set_bookmark (EphyBookmarkProperties *properties,
 }
 
 static void
-bookmark_properties_destroy_cb (GtkDialog *dialog,
-                               gpointer data)
+ephy_bookmark_properties_destroy_cb (GtkDialog *dialog,
+                                     gpointer   data)
 {
        EphyBookmarkProperties *properties = EPHY_BOOKMARK_PROPERTIES (dialog);
 
@@ -180,9 +188,9 @@ bookmark_properties_destroy_cb (GtkDialog *dialog,
 }
 
 static void
-bookmark_properties_response_cb (GtkDialog *dialog,
-                                int response_id,
-                                gpointer data)
+ephy_bookmark_properties_response_cb (GtkDialog *dialog,
+                                      int        response_id,
+                                      gpointer   data)
 {
        EphyBookmarkProperties *properties = EPHY_BOOKMARK_PROPERTIES (dialog);
 
@@ -279,153 +287,75 @@ list_unmapped_cb (GtkWidget *widget,
 static void
 ephy_bookmark_properties_init (EphyBookmarkProperties *properties)
 {
-       gtk_window_set_modal (GTK_WINDOW (properties), TRUE);
 }
 
 static GObject *
-ephy_bookmark_properties_constructor (GType type,
-                                     guint n_construct_properties,
-                                     GObjectConstructParam *construct_params)
+ephy_bookmark_properties_constructor (GType                  type,
+                                      guint                  n_construct_properties,
+                                      GObjectConstructParam *construct_params)
 {
-       GObject *object;
+       GObject                *object;
        EphyBookmarkProperties *properties;
-       GtkWidget *widget, *grid, *label, *entry, *container;
-       GtkWidget *content_area;
-       GtkWindow *window;
-       GtkDialog *dialog;
-       gboolean lockdown;
+
+       gboolean    lockdown;
        const char *tmp;
-       char *unescaped_url;
+       char       *unescaped_url;
+       GtkWidget  *entry;
+       GtkWidget  *widget;
 
        object = G_OBJECT_CLASS (ephy_bookmark_properties_parent_class)->constructor (type,
                                                                                       n_construct_properties,
                                                                                       construct_params);
-
-       widget = GTK_WIDGET (object);
-       window = GTK_WINDOW (object);
-       dialog = GTK_DIALOG (object);
        properties = EPHY_BOOKMARK_PROPERTIES (object);
 
-       gtk_window_set_type_hint (window, GDK_WINDOW_TYPE_HINT_DIALOG);
-
-       g_signal_connect (properties, "response",
-                         G_CALLBACK (bookmark_properties_response_cb), properties);
-
-       g_signal_connect (properties, "destroy",
-                         G_CALLBACK (bookmark_properties_destroy_cb), properties);
+       gtk_widget_init_template (GTK_WIDGET (properties));
 
        if (!properties->creating)
        {
-               ephy_initial_state_add_window (widget,
-                                               "bookmark_properties",
-                                               290, 280, FALSE,
-                                               EPHY_INITIAL_STATE_WINDOW_SAVE_POSITION |
-                                               EPHY_INITIAL_STATE_WINDOW_SAVE_SIZE);
+               ephy_initial_state_add_window (GTK_WIDGET (properties),
+                                              "bookmark_properties",
+                                              290, 280, FALSE,
+                                              EPHY_INITIAL_STATE_WINDOW_SAVE_POSITION |
+                                              EPHY_INITIAL_STATE_WINDOW_SAVE_SIZE);
        }
        /* Lockdown */
        lockdown = g_settings_get_boolean (EPHY_SETTINGS_LOCKDOWN,
-                                          EPHY_PREFS_LOCKDOWN_BOOKMARK_EDITING);
+                                          EPHY_PREFS_LOCKDOWN_BOOKMARK_EDITING);
 
        update_window_title (properties);
-       content_area = gtk_dialog_get_content_area (dialog);
-
-       gtk_container_set_border_width (GTK_CONTAINER (properties), 5);
-       gtk_box_set_spacing (GTK_BOX (content_area), 2);
 
-       grid = gtk_grid_new ();
-       gtk_grid_set_row_spacing (GTK_GRID (grid), 6);
-       gtk_grid_set_column_spacing (GTK_GRID (grid), 12);
-       gtk_container_set_border_width (GTK_CONTAINER (grid), 5);
-       gtk_widget_show (grid);
-
-       entry = gtk_entry_new ();
-       gtk_editable_set_editable (GTK_EDITABLE (entry), !lockdown);
-       tmp = ephy_node_get_property_string (properties->bookmark,
-                                            EPHY_NODE_BMK_PROP_TITLE);
-       gtk_entry_set_text (GTK_ENTRY (entry), tmp);
-       g_signal_connect (entry, "changed",
-                         G_CALLBACK (title_entry_changed_cb), properties);
-       gtk_entry_set_activates_default (GTK_ENTRY (entry), TRUE);
-       gtk_widget_set_size_request (entry, 200, -1);
-       gtk_widget_show (entry);
-       label = gtk_label_new_with_mnemonic (_("_Title:"));
-       gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
-       gtk_label_set_mnemonic_widget (GTK_LABEL (label), entry);
-       gtk_widget_show (label);
-       gtk_grid_attach (GTK_GRID (grid), label, 0, 0, 1, 1);
-       gtk_grid_attach (GTK_GRID (grid), entry, 1, 0, 1, 1);
-       gtk_widget_set_hexpand (entry, TRUE);
+       gtk_editable_set_editable (GTK_EDITABLE (properties->title_entry), !lockdown);
+       tmp = ephy_node_get_property_string (properties->bookmark, EPHY_NODE_BMK_PROP_TITLE);
+       gtk_entry_set_text (properties->title_entry, tmp);
 
-       entry = gtk_entry_new ();
-       gtk_editable_set_editable (GTK_EDITABLE (entry), !lockdown);
-       tmp = ephy_node_get_property_string (properties->bookmark,
-                                            EPHY_NODE_BMK_PROP_LOCATION);
+       gtk_editable_set_editable (GTK_EDITABLE (properties->adress_entry), !lockdown);
+       tmp = ephy_node_get_property_string (properties->bookmark, EPHY_NODE_BMK_PROP_LOCATION);
        unescaped_url = ephy_uri_safe_unescape (tmp);
-       gtk_entry_set_text (GTK_ENTRY (entry), unescaped_url);
-       g_signal_connect (entry, "changed",
-                         G_CALLBACK (location_entry_changed_cb), properties);
-       gtk_entry_set_activates_default (GTK_ENTRY (entry), TRUE);
-       gtk_widget_show (entry);
-       label = gtk_label_new_with_mnemonic (_("A_ddress:"));
-       gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
-       gtk_label_set_mnemonic_widget (GTK_LABEL (label), entry);
-       gtk_widget_show (label);
-       gtk_grid_attach (GTK_GRID (grid), label, 0, 1, 1, 1);
-       gtk_grid_attach (GTK_GRID (grid), entry, 1, 1, 1, 1);
-       gtk_widget_set_hexpand (entry, TRUE);
+       gtk_entry_set_text (properties->adress_entry, unescaped_url);
        g_free (unescaped_url);
 
        entry = ephy_topics_entry_new (properties->bookmarks, properties->bookmark);
        gtk_editable_set_editable (GTK_EDITABLE (entry), !lockdown);
-       properties->entry = entry;
+       gtk_label_set_mnemonic_widget (properties->topics_label, entry);
        gtk_widget_show (entry);
-       label = gtk_label_new_with_mnemonic(_("T_opics:"));
-       gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
-       gtk_label_set_mnemonic_widget (GTK_LABEL (label), entry);
-       gtk_widget_show (label);
-       gtk_grid_attach (GTK_GRID (grid), label, 0, 2, 1, 1);
-       gtk_grid_attach (GTK_GRID (grid), entry, 1, 2, 1, 1);
+       gtk_grid_attach (properties->grid, entry, 1, 2, 1, 1);
        gtk_widget_set_hexpand (entry, TRUE);
 
        widget = ephy_topics_palette_new (properties->bookmarks, properties->bookmark);
-       container = g_object_new (GTK_TYPE_SCROLLED_WINDOW,
-                                 "hadjustment", NULL,
-                                 "vadjustment", NULL,
-                                 "hscrollbar_policy", GTK_POLICY_AUTOMATIC,
-                                 "vscrollbar_policy", GTK_POLICY_AUTOMATIC,
-                                 "shadow_type", GTK_SHADOW_IN,
-                                 NULL);
-       gtk_container_add (GTK_CONTAINER (container), widget);
-       gtk_widget_show (widget);
-       gtk_widget_set_sensitive (container, !lockdown);
-       gtk_widget_show (container);
-       g_signal_connect (container, "map", G_CALLBACK (list_mapped_cb), properties);
-       g_signal_connect (container, "unmap", G_CALLBACK (list_unmapped_cb), properties);
-
-       widget = gtk_expander_new (_("Sho_w all topics"));
-       gtk_expander_set_use_underline (GTK_EXPANDER (widget), TRUE);
-       ephy_initial_state_add_expander (widget, "bookmark_properties_list", FALSE);
-       gtk_container_add (GTK_CONTAINER (widget), container);
+       gtk_container_add (GTK_CONTAINER (properties->topics_scrolled_window), widget);
        gtk_widget_show (widget);
-       gtk_grid_attach (GTK_GRID (grid), widget, 1, 3, 1, 1);
-       gtk_widget_set_hexpand (widget, TRUE);
-       gtk_widget_set_vexpand (widget, TRUE);
+       gtk_widget_set_sensitive (GTK_WIDGET (properties->topics_scrolled_window), !lockdown);
+       /* TODO remove these hacks */
+       g_signal_connect (properties->topics_scrolled_window, "map", G_CALLBACK (list_mapped_cb), properties);
+       g_signal_connect (properties->topics_scrolled_window, "unmap", G_CALLBACK (list_unmapped_cb), 
properties);
 
-       properties->warning = gtk_label_new (NULL);
-       gtk_grid_attach (GTK_GRID (grid), properties->warning, 0, 4, 2, 1);
-       gtk_widget_show (properties->warning);
-
-       gtk_box_pack_start (GTK_BOX (content_area), grid, TRUE, TRUE, 0);
+       ephy_initial_state_add_expander (properties->topics_expander, "bookmark_properties_list", FALSE);
 
        if (properties->creating)
        {
-               gtk_dialog_add_button (dialog,
-                                      _("_Cancel"),
-                                      GTK_RESPONSE_CANCEL);
-               gtk_dialog_add_button (dialog,
-                                      _("_Add"),
-                                      GTK_RESPONSE_ACCEPT);
-               gtk_dialog_set_default_response (dialog, GTK_RESPONSE_ACCEPT);
+               gtk_dialog_add_button (GTK_DIALOG (properties), _("_Cancel"), GTK_RESPONSE_CANCEL);
+               gtk_dialog_add_button (GTK_DIALOG (properties), _("_Add"), GTK_RESPONSE_ACCEPT);
+               gtk_dialog_set_default_response (GTK_DIALOG (properties), GTK_RESPONSE_ACCEPT);
        }
 
        update_warning (properties);
@@ -496,6 +426,7 @@ static void
 ephy_bookmark_properties_class_init (EphyBookmarkPropertiesClass *klass)
 {
        GObjectClass *object_class = G_OBJECT_CLASS (klass);
+       GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
 
        object_class->constructor = ephy_bookmark_properties_constructor;
        object_class->set_property = ephy_bookmark_properties_set_property;
@@ -523,6 +454,23 @@ ephy_bookmark_properties_class_init (EphyBookmarkPropertiesClass *klass)
                                                               "creating",
                                                               FALSE,
                                                               G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+
+       /* from UI file */
+       gtk_widget_class_set_template_from_resource (widget_class,
+                                                    "/org/gnome/epiphany/bookmark-properties.ui");
+
+       gtk_widget_class_bind_template_child (widget_class, EphyBookmarkProperties, grid);
+       gtk_widget_class_bind_template_child (widget_class, EphyBookmarkProperties, title_entry);
+       gtk_widget_class_bind_template_child (widget_class, EphyBookmarkProperties, adress_entry);
+       gtk_widget_class_bind_template_child (widget_class, EphyBookmarkProperties, topics_label);
+       gtk_widget_class_bind_template_child (widget_class, EphyBookmarkProperties, topics_expander);
+       gtk_widget_class_bind_template_child (widget_class, EphyBookmarkProperties, topics_scrolled_window);
+       gtk_widget_class_bind_template_child (widget_class, EphyBookmarkProperties, warning_label);
+
+       gtk_widget_class_bind_template_callback (widget_class, title_entry_changed_cb);
+       gtk_widget_class_bind_template_callback (widget_class, location_entry_changed_cb);
+       gtk_widget_class_bind_template_callback (widget_class, ephy_bookmark_properties_response_cb);
+       gtk_widget_class_bind_template_callback (widget_class, ephy_bookmark_properties_destroy_cb);
 }
 
 /* public API */
diff --git a/src/bookmarks/ephy-bookmarks-editor.c b/src/bookmarks/ephy-bookmarks-editor.c
index f7fea73..63eb735 100644
--- a/src/bookmarks/ephy-bookmarks-editor.c
+++ b/src/bookmarks/ephy-bookmarks-editor.c
@@ -898,7 +898,7 @@ cmd_bookmark_properties (GtkAction *action,
        {
                EphyNode *node = l->data;
 
-               ephy_bookmarks_ui_show_bookmark (node);
+               ephy_bookmarks_ui_show_bookmark (GTK_WINDOW (editor), node);
        }
 
        g_list_free (selection);
diff --git a/src/bookmarks/ephy-bookmarks-ui.c b/src/bookmarks/ephy-bookmarks-ui.c
index 4e41638..744033b 100644
--- a/src/bookmarks/ephy-bookmarks-ui.c
+++ b/src/bookmarks/ephy-bookmarks-ui.c
@@ -328,7 +328,7 @@ ephy_bookmarks_ui_add_bookmark (GtkWindow *parent,
 }
 
 void
-ephy_bookmarks_ui_show_bookmark (EphyNode *bookmark)
+ephy_bookmarks_ui_show_bookmark (GtkWindow *parent, EphyNode *bookmark)
 {
        EphyBookmarks *bookmarks;
        GtkWidget *dialog;
@@ -355,6 +355,8 @@ ephy_bookmarks_ui_show_bookmark (EphyNode *bookmark)
                                     bookmark, dialog);
        }
 
+       gtk_window_set_transient_for (GTK_WINDOW (dialog), parent);
+
        gtk_window_present_with_time (GTK_WINDOW (dialog),
                                      gtk_get_current_event_time ());
 }
diff --git a/src/bookmarks/ephy-bookmarks-ui.h b/src/bookmarks/ephy-bookmarks-ui.h
index c44f2a2..e1b5e8b 100644
--- a/src/bookmarks/ephy-bookmarks-ui.h
+++ b/src/bookmarks/ephy-bookmarks-ui.h
@@ -59,7 +59,8 @@ void  ephy_bookmarks_ui_add_bookmark          (GtkWindow *parent,
                                                 const char *location,
                                                 const char *title);
 
-void   ephy_bookmarks_ui_show_bookmark         (EphyNode *bookmark);
+void   ephy_bookmarks_ui_show_bookmark         (GtkWindow *parent,
+                                                                                        EphyNode  *bookmark);
 
 G_END_DECLS
 
diff --git a/src/epiphany.gresource.xml b/src/epiphany.gresource.xml
index 89975b5..7dc6bfd 100644
--- a/src/epiphany.gresource.xml
+++ b/src/epiphany.gresource.xml
@@ -2,6 +2,7 @@
 <gresources>
   <gresource prefix="/org/gnome/epiphany">
     <file>incognito.png</file>
+    <file preprocess="xml-stripblanks" compressed="true">bookmark-properties.ui</file>
     <file preprocess="xml-stripblanks" compressed="true">encoding-dialog.ui</file>
     <file preprocess="xml-stripblanks" compressed="true">prefs-dialog.ui</file>
     <file preprocess="xml-stripblanks" compressed="true">prefs-lang-dialog.ui</file>
diff --git a/src/resources/bookmark-properties.ui b/src/resources/bookmark-properties.ui
new file mode 100644
index 0000000..39c4c80
--- /dev/null
+++ b/src/resources/bookmark-properties.ui
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+  <requires lib="gtk+" version="3.10"/>
+  <template class="EphyBookmarkProperties" parent="GtkDialog">
+    <property name="modal">True</property>
+    <property name="resizable">False</property>
+    <property name="width-request">450</property>
+    <property name="type_hint">dialog</property>
+    <property name="border-width">5</property>
+    <signal name="response" handler="ephy_bookmark_properties_response_cb"/>
+    <signal name="destroy" handler="ephy_bookmark_properties_destroy_cb"/>
+    <child internal-child="vbox">
+      <object class="GtkBox">
+        <property name="spacing">2</property>
+        <child>
+          <object class="GtkGrid" id="grid"> <!-- TODO has (0,3) empty -->
+            <property name="visible">True</property>
+            <property name="row-spacing">6</property>
+            <property name="column-spacing">12</property>
+            <property name="border-width">5</property>
+            <child>
+              <object class="GtkLabel">
+                <property name="visible">True</property>
+                <property name="halign">start</property>
+                <property name="use-underline">True</property>
+                <property name="label" translatable="yes">_Title:</property>
+                <property name="mnemonic-widget">title_entry</property>
+              </object>
+              <packing>
+                <property name="left-attach">0</property>
+                <property name="top-attach">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkEntry" id="title_entry">
+                <property name="visible">True</property>
+                <property name="hexpand">True</property>
+                <property name="width-request">200</property>
+                <property name="activates-default">True</property>
+                <signal name="changed" handler="title_entry_changed_cb"/>
+              </object>
+              <packing>
+                <property name="left-attach">1</property>
+                <property name="top-attach">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel">
+                <property name="visible">True</property>
+                <property name="halign">start</property>
+                <property name="use-underline">True</property>
+                <property name="label" translatable="yes">A_ddress:</property>
+                <property name="mnemonic-widget">adress_entry</property>
+              </object>
+              <packing>
+                <property name="left-attach">0</property>
+                <property name="top-attach">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkEntry" id="adress_entry">
+                <property name="visible">True</property>
+                <property name="hexpand">True</property>
+                <property name="width-request">200</property>
+                <property name="activates-default">True</property>
+                <signal name="changed" handler="location_entry_changed_cb"/>
+              </object>
+              <packing>
+                <property name="left-attach">1</property>
+                <property name="top-attach">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="topics_label">
+                <property name="visible">True</property>
+                <property name="halign">start</property>
+                <property name="use-underline">True</property>
+                <property name="label" translatable="yes">T_opics:</property>
+              </object>
+              <packing>
+                <property name="left-attach">0</property>
+                <property name="top-attach">2</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkExpander" id="topics_expander">
+                <property name="visible">True</property>
+                <property name="expand">True</property>
+                <property name="use-underline">True</property>
+                <property name="label" translatable="yes">Sho_w all topics</property>
+                <child>
+                  <object class="GtkScrolledWindow" id="topics_scrolled_window">
+                    <property name="visible">True</property>
+                    <property name="shadow-type">in</property>
+                    <property name="width-request">290</property>
+                    <property name="height-request">250</property>
+                  </object>
+                </child>
+              </object>
+              <packing>
+                <property name="left-attach">1</property>
+                <property name="top-attach">3</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="warning_label">
+                <property name="visible">True</property>
+              </object>
+              <packing>
+                <property name="left-attach">0</property>
+                <property name="top-attach">4</property>
+                <property name="width">2</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+          </object>
+        </child>
+      </object>
+    </child>
+  </template>
+</interface>


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]