[Xfce4-commits] [xfce/thunar] 15/46: uca: UI modernization

noreply at xfce.org noreply at xfce.org
Tue Aug 15 02:35:23 CEST 2017


This is an automated email from the git hooks/post-receive script.

a   n   d   r   e       p   u   s   h   e   d       a       c   o   m   m   i   t       t   o       b   r   a   n   c   h       m   a   s   t   e   r   
   in repository xfce/thunar.

commit 862f151cc79bcf042b9e27a82de29c7527655609
Author: Jonas Kümmerlin <rgcjonas at gmail.com>
Date:   Wed Aug 12 17:56:16 2015 +0200

    uca: UI modernization
    
    Now making use of widget templates and proper height-for-width geometry.
    Header bars are used depending on the gtk setting, and deprecated
    functions have been removed (modulo GtkAction).
---
 .gitignore                                  |   1 +
 plugins/thunar-uca/Makefile.am              |  14 +-
 plugins/thunar-uca/thunar-uca-chooser.c     | 159 ++-----
 plugins/thunar-uca/thunar-uca-chooser.ui    | 134 ++++++
 plugins/thunar-uca/thunar-uca-editor.c      | 410 ++---------------
 plugins/thunar-uca/thunar-uca-editor.ui     | 683 ++++++++++++++++++++++++++++
 plugins/thunar-uca/thunar-uca-model.c       |  12 -
 plugins/thunar-uca/thunar-uca-provider.c    |  10 +-
 plugins/thunar-uca/thunar-uca.gresource.xml |   7 +
 po/POTFILES.in                              |   2 +
 10 files changed, 938 insertions(+), 494 deletions(-)

diff --git a/.gitignore b/.gitignore
index 6c7af6d..5f5c19b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -87,6 +87,7 @@ plugins/thunar-tpa/.*.swp
 plugins/thunar-tpa/thunar-tpa
 plugins/thunar-uca/.*.swp
 plugins/thunar-uca/uca.xml
+plugins/thunar-uca/thunar-uca.gresource.c
 po-doc/.*.swp
 po-doc/.xml2po.mo
 po/Makefile.in.in
diff --git a/plugins/thunar-uca/Makefile.am b/plugins/thunar-uca/Makefile.am
index 98be9aa..d0f3a0a 100644
--- a/plugins/thunar-uca/Makefile.am
+++ b/plugins/thunar-uca/Makefile.am
@@ -26,7 +26,8 @@ thunar_uca_la_SOURCES =							\
 	thunar-uca-private.c						\
 	thunar-uca-private.h						\
 	thunar-uca-provider.c						\
-	thunar-uca-provider.h
+	thunar-uca-provider.h						\
+	thunar-uca.gresource.c
 
 thunar_uca_la_CFLAGS =							\
 	$(EXO_CFLAGS)							\
@@ -51,6 +52,17 @@ thunar_uca_la_LIBADD =							\
 thunar_uca_la_DEPENDENCIES =						\
 	$(top_builddir)/thunarx/libthunarx-$(THUNARX_VERSION_API).la
 
+thunar_uca_templates =							\
+	thunar-uca-ui.xml
+
+GLIB_COMPILE_RESOURCES = $(shell $(PKG_CONFIG) --variable=glib_compile_resources gio-2.0)
+
+resource_files = $(shell $(GLIB_COMPILE_RESOURCES) --sourcedir=$(srcdir) --generate-dependencies $(srcdir)/thunar-uca.gresource.xml)
+
+thunar-uca.gresource.c: thunar-uca.gresource.xml $(resource_files)
+	$(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) $< \
+		--target=$@ --sourcedir=$(srcdir) --generate-source
+
 defaultsdir = $(sysconfdir)/xdg/Thunar
 defaults_in_files = uca.xml.in
 defaults_DATA = $(defaults_in_files:.xml.in=.xml)
diff --git a/plugins/thunar-uca/thunar-uca-chooser.c b/plugins/thunar-uca/thunar-uca-chooser.c
index 0e16ae5..399f82b 100644
--- a/plugins/thunar-uca/thunar-uca-chooser.c
+++ b/plugins/thunar-uca/thunar-uca-chooser.c
@@ -81,14 +81,32 @@ THUNARX_DEFINE_TYPE (ThunarUcaChooser, thunar_uca_chooser, GTK_TYPE_DIALOG);
 static void
 thunar_uca_chooser_class_init (ThunarUcaChooserClass *klass)
 {
-  GtkDialogClass *gtkdialog_class;
-  GtkWidgetClass *gtkwidget_class;
-
-  gtkwidget_class = GTK_WIDGET_CLASS (klass);
-  gtkwidget_class->key_press_event = thunar_uca_chooser_key_press_event;
-
-  gtkdialog_class = GTK_DIALOG_CLASS (klass);
-  gtkdialog_class->response = thunar_uca_chooser_response;
+  GtkDialogClass *dialog_class;
+  GtkWidgetClass *widget_class;
+
+  widget_class = GTK_WIDGET_CLASS (klass);
+  widget_class->key_press_event = thunar_uca_chooser_key_press_event;
+
+  dialog_class = GTK_DIALOG_CLASS (klass);
+  dialog_class->response = thunar_uca_chooser_response;
+
+  /* Setup the template xml */
+  gtk_widget_class_set_template_from_resource (widget_class, "/org/xfce/thunar/uca/chooser.ui");
+
+  /* bind stuff */
+  gtk_widget_class_bind_template_child (widget_class, ThunarUcaChooser, treeview);
+  gtk_widget_class_bind_template_child (widget_class, ThunarUcaChooser, add_button);
+  gtk_widget_class_bind_template_child (widget_class, ThunarUcaChooser, edit_button);
+  gtk_widget_class_bind_template_child (widget_class, ThunarUcaChooser, delete_button);
+  gtk_widget_class_bind_template_child (widget_class, ThunarUcaChooser, up_button);
+  gtk_widget_class_bind_template_child (widget_class, ThunarUcaChooser, down_button);
+
+  gtk_widget_class_bind_template_callback(widget_class, thunar_uca_chooser_add_clicked);
+  gtk_widget_class_bind_template_callback(widget_class, thunar_uca_chooser_edit_clicked);
+  gtk_widget_class_bind_template_callback(widget_class, thunar_uca_chooser_delete_clicked);
+  gtk_widget_class_bind_template_callback(widget_class, thunar_uca_chooser_up_clicked);
+  gtk_widget_class_bind_template_callback(widget_class, thunar_uca_chooser_down_clicked);
+  gtk_widget_class_bind_template_callback(widget_class, thunar_uca_chooser_selection_changed);
 }
 
 
@@ -97,56 +115,26 @@ static void
 thunar_uca_chooser_init (ThunarUcaChooser *uca_chooser)
 {
   GtkTreeViewColumn *column;
-  GtkTreeSelection  *selection;
   GtkCellRenderer   *renderer;
   ThunarUcaModel    *uca_model;
-  GtkWidget         *image;
-  GtkWidget         *label;
-  GtkWidget         *hbox;
-  GtkWidget         *swin;
-  GtkWidget         *vbox;
+  GtkWidget         *button;
+  gboolean           have_header_bar;
+
+  /* Initialize the template for this instance */
+  gtk_widget_init_template (GTK_WIDGET (uca_chooser));
 
   /* configure the dialog window */
-  gtk_dialog_add_button (GTK_DIALOG (uca_chooser), _("_Help"), GTK_RESPONSE_HELP);
-  gtk_dialog_add_button (GTK_DIALOG (uca_chooser), _("_Close"), GTK_RESPONSE_CLOSE);
+  g_object_get (uca_chooser, "use-header-bar", &have_header_bar, NULL);
+
+  if (!have_header_bar)
+    {
+      /* add a regular close button, the header bar already provides one */
+      gtk_dialog_add_button (GTK_DIALOG (uca_chooser), _("_Close"), GTK_RESPONSE_CLOSE);
+    }
+
   gtk_dialog_set_default_response (GTK_DIALOG (uca_chooser), GTK_RESPONSE_CLOSE);
-  gtk_window_set_default_size (GTK_WINDOW (uca_chooser), 500, 350);
-  gtk_window_set_destroy_with_parent (GTK_WINDOW (uca_chooser), TRUE);
-  gtk_window_set_title (GTK_WINDOW (uca_chooser), _("Custom Actions"));
-
-  hbox = gtk_hbox_new (FALSE, 3);
-  gtk_container_set_border_width (GTK_CONTAINER (hbox), 6);
-  gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (uca_chooser))), hbox, FALSE, TRUE, 0);
-  gtk_widget_show (hbox);
-
-  image = gtk_image_new_from_icon_name ("dialog-information", GTK_ICON_SIZE_DND);
-  gtk_box_pack_start (GTK_BOX (hbox), image, FALSE, FALSE, 0);
-  gtk_widget_show (image);
-
-  label = gtk_label_new (_("You can configure custom actions that will appear in the\n"
-                           "file managers context menus for certain kinds of files."));
-  gtk_misc_set_alignment (GTK_MISC (label), 0.0f, 0.5f);
-  gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0);
-  gtk_widget_show (label);
-
-  hbox = gtk_hbox_new (FALSE, 3);
-  gtk_container_set_border_width (GTK_CONTAINER (hbox), 6);
-  gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (uca_chooser))), hbox, TRUE, TRUE, 0);
-  gtk_widget_show (hbox);
-
-  swin = gtk_scrolled_window_new (NULL, NULL);
-  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (swin), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
-  gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (swin), GTK_SHADOW_IN);
-  gtk_box_pack_start (GTK_BOX (hbox), swin, TRUE, TRUE, 0);
-  gtk_widget_show (swin);
-
-  uca_chooser->treeview = gtk_tree_view_new ();
-  gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (uca_chooser->treeview), FALSE);
-  gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (uca_chooser->treeview), TRUE);
-  gtk_container_add (GTK_CONTAINER (swin), uca_chooser->treeview);
-  g_signal_connect_swapped (G_OBJECT (uca_chooser->treeview), "row-activated", G_CALLBACK (thunar_uca_chooser_edit_clicked), uca_chooser);
-  gtk_widget_show (uca_chooser->treeview);
 
+  /* configure the tree view */
   uca_model = thunar_uca_model_get_default ();
   gtk_tree_view_set_model (GTK_TREE_VIEW (uca_chooser->treeview), GTK_TREE_MODEL (uca_model));
   g_object_unref (G_OBJECT (uca_model));
@@ -164,65 +152,8 @@ thunar_uca_chooser_init (ThunarUcaChooser *uca_chooser)
   gtk_tree_view_column_pack_start (column, renderer, TRUE);
   gtk_tree_view_column_set_attributes (column, renderer, "markup", THUNAR_UCA_MODEL_COLUMN_STOCK_LABEL, NULL);
 
-  vbox = gtk_vbox_new (FALSE, 3);
-  gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, FALSE, 0);
-  gtk_widget_show (vbox);
-
-  uca_chooser->add_button = gtk_button_new ();
-  gtk_widget_set_tooltip_text (uca_chooser->add_button, _("Add a new custom action."));
-  gtk_box_pack_start (GTK_BOX (vbox), uca_chooser->add_button, FALSE, FALSE, 0);
-  g_signal_connect_swapped (G_OBJECT (uca_chooser->add_button), "clicked", G_CALLBACK (thunar_uca_chooser_add_clicked), uca_chooser);
-  gtk_widget_show (uca_chooser->add_button);
-
-  image = gtk_image_new_from_icon_name ("list-add-symbolic", GTK_ICON_SIZE_BUTTON);
-  gtk_container_add (GTK_CONTAINER (uca_chooser->add_button), image);
-  gtk_widget_show (image);
-
-  uca_chooser->edit_button = gtk_button_new ();
-  gtk_widget_set_tooltip_text (uca_chooser->edit_button, _("Edit the currently selected action."));
-  gtk_box_pack_start (GTK_BOX (vbox), uca_chooser->edit_button, FALSE, FALSE, 0);
-  g_signal_connect_swapped (G_OBJECT (uca_chooser->edit_button), "clicked", G_CALLBACK (thunar_uca_chooser_edit_clicked), uca_chooser);
-  gtk_widget_show (uca_chooser->edit_button);
-
-  image = gtk_image_new_from_icon_name ("emblem-system-symbolic", GTK_ICON_SIZE_BUTTON);
-  gtk_container_add (GTK_CONTAINER (uca_chooser->edit_button), image);
-  gtk_widget_show (image);
-
-  uca_chooser->delete_button = gtk_button_new ();
-  gtk_widget_set_tooltip_text (uca_chooser->delete_button, _("Delete the currently selected action."));
-  gtk_box_pack_start (GTK_BOX (vbox), uca_chooser->delete_button, FALSE, FALSE, 0);
-  g_signal_connect_swapped (G_OBJECT (uca_chooser->delete_button), "clicked", G_CALLBACK (thunar_uca_chooser_delete_clicked), uca_chooser);
-  gtk_widget_show (uca_chooser->delete_button);
-
-  image = gtk_image_new_from_icon_name ("list-remove-symbolic", GTK_ICON_SIZE_BUTTON);
-  gtk_container_add (GTK_CONTAINER (uca_chooser->delete_button), image);
-  gtk_widget_show (image);
-
-  uca_chooser->up_button = gtk_button_new ();
-  gtk_widget_set_tooltip_text (uca_chooser->up_button, _("Move the currently selected action up by one row."));
-  gtk_box_pack_start (GTK_BOX (vbox), uca_chooser->up_button, FALSE, FALSE, 0);
-  g_signal_connect_swapped (G_OBJECT (uca_chooser->up_button), "clicked", G_CALLBACK (thunar_uca_chooser_up_clicked), uca_chooser);
-  gtk_widget_show (uca_chooser->up_button);
-
-  image = gtk_image_new_from_icon_name ("go-up-symbolic", GTK_ICON_SIZE_BUTTON);
-  gtk_container_add (GTK_CONTAINER (uca_chooser->up_button), image);
-  gtk_widget_show (image);
-
-  uca_chooser->down_button = gtk_button_new ();
-  gtk_widget_set_tooltip_text (uca_chooser->down_button, _("Move the currently selected action down by one row."));
-  gtk_box_pack_start (GTK_BOX (vbox), uca_chooser->down_button, FALSE, FALSE, 0);
-  g_signal_connect_swapped (G_OBJECT (uca_chooser->down_button), "clicked", G_CALLBACK (thunar_uca_chooser_down_clicked), uca_chooser);
-  gtk_widget_show (uca_chooser->down_button);
-
-  image = gtk_image_new_from_icon_name ("go-down-symbolic", GTK_ICON_SIZE_BUTTON);
-  gtk_container_add (GTK_CONTAINER (uca_chooser->down_button), image);
-  gtk_widget_show (image);
-
-  /* configure the tree view selection after the buttons have been created */
-  selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (uca_chooser->treeview));
-  gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE);
-  g_signal_connect_swapped (G_OBJECT (selection), "changed", G_CALLBACK (thunar_uca_chooser_selection_changed), uca_chooser);
-  thunar_uca_chooser_selection_changed (uca_chooser, selection);
+  /* configure the tree view selection */
+  thunar_uca_chooser_selection_changed (uca_chooser, gtk_tree_view_get_selection (GTK_TREE_VIEW (uca_chooser->treeview)));
 }
 
 
@@ -327,11 +258,15 @@ thunar_uca_chooser_open_editor (ThunarUcaChooser *uca_chooser,
   GtkTreeModel     *model;
   GtkTreeIter       iter;
   GtkWidget        *editor;
+  gboolean          use_header_bar = FALSE;
 
   g_return_if_fail (THUNAR_UCA_IS_CHOOSER (uca_chooser));
 
   /* allocate the new editor */
-  editor = g_object_new (THUNAR_UCA_TYPE_EDITOR, NULL);
+  g_object_get (gtk_settings_get_for_screen (gtk_widget_get_screen (GTK_WIDGET (uca_chooser))),
+                "gtk-dialogs-use-header", &use_header_bar, NULL);
+
+  editor = g_object_new (THUNAR_UCA_TYPE_EDITOR, "use-header-bar", use_header_bar, NULL);
   gtk_window_set_title (GTK_WINDOW (editor), edit ? _("Edit Action") : _("Create Action"));
   gtk_window_set_transient_for (GTK_WINDOW (editor), GTK_WINDOW (uca_chooser));
 
diff --git a/plugins/thunar-uca/thunar-uca-chooser.ui b/plugins/thunar-uca/thunar-uca-chooser.ui
new file mode 100644
index 0000000..7c96b7a
--- /dev/null
+++ b/plugins/thunar-uca/thunar-uca-chooser.ui
@@ -0,0 +1,134 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    For now, better don't edit this with glade, since glade insists upon inserting
+    deprecated properties and otherwise messing with the file.
+-->
+<interface>
+  <requires lib="gtk+" version="3.12"/>
+  <template class="ThunarUcaChooser" parent="GtkDialog">
+    <property name="default-width">500</property>
+    <property name="default-height">350</property>
+    <property name="type-hint">dialog</property>
+    <property name="title" translatable="yes">Custom Actions</property>
+    <property name="destroy-with-parent">True</property>
+    <child internal-child="vbox">
+      <object class="GtkBox" id="vbox">
+        <!-- label at the top -->
+        <child>
+          <object class="GtkBox">
+            <property name="border-width">6</property>
+            <property name="spacing">3</property>
+            <property name="visible">TRUE</property>
+            <child>
+              <object class="GtkImage">
+                <property name="icon-name">dialog-information</property>
+                <property name="icon-size">5</property>
+                <property name="visible">TRUE</property>
+              </object>
+            </child>
+            <child>
+              <object class="GtkLabel">
+                <property name="label" translatable="yes">You can configure custom actions that will appear in the file managers context menus for certain kinds of files.</property>
+                <property name="xalign">0.0</property>
+                <property name="yalign">0.5</property>
+                <property name="visible">TRUE</property>
+                <property name="wrap">TRUE</property>
+              </object>
+            </child>
+          </object>
+        </child>
+        <!-- main part -->
+        <child>
+          <object class="GtkFrame">
+            <property name="border-width">6</property>
+            <property name="visible">true</property>
+            <child>
+              <object class="GtkBox">
+                <property name="spacing">0</property>
+                <property name="visible">TRUE</property>
+                <property name="hexpand">TRUE</property>
+                <property name="vexpand">TRUE</property>
+                <!-- tree view containing the list of items -->
+                <child>
+                  <object class="GtkScrolledWindow">
+                    <property name="visible">TRUE</property>
+                    <property name="expand">TRUE</property>
+                    <child>
+                      <object class="GtkTreeView" id="treeview">
+                        <property name="headers-visible">FALSE</property>
+                        <property name="visible">TRUE</property>
+                        <signal name="row-activated" handler="thunar_uca_chooser_edit_clicked" swapped="true" />
+                        <!-- TODO: setup columns here -->
+                        <child internal-child="selection">
+                          <object class="GtkTreeSelection">
+                            <property name="mode">GTK_SELECTION_SINGLE</property>
+                            <signal name="changed" handler="thunar_uca_chooser_selection_changed" swapped="true" />
+                          </object>
+                        </child>
+                      </object>
+                    </child>
+                  </object>
+                </child>
+                <!-- buttons -->
+                <child>
+                  <object class="GtkToolbar">
+                    <property name="orientation">GTK_ORIENTATION_VERTICAL</property>
+                    <property name="visible">TRUE</property>
+                    <property name="toolbar-style">GTK_TOOLBAR_ICONS</property>
+                    <property name="icon-size">GTK_ICON_SIZE_BUTTON</property>
+                    <property name="show-arrow">false</property>
+                    <!-- add button -->
+                    <child>
+                      <object class="GtkToolButton" id="add_button">
+                        <property name="tooltip-text" translatable="yes">Add a new custom action.</property>
+                        <property name="visible">TRUE</property>
+                        <property name="icon-name">list-add-symbolic</property>
+                        <signal name="clicked" handler="thunar_uca_chooser_add_clicked" swapped="true" />
+                      </object>
+                    </child>
+                    <!-- edit button -->
+                    <child>
+                      <object class="GtkToolButton" id="edit_button">
+                        <property name="tooltip-text" translatable="yes">Edit the currently selected action.</property>
+                        <property name="visible">TRUE</property>
+                        <property name="icon-name">emblem-system-symbolic</property>
+                        <signal name="clicked" handler="thunar_uca_chooser_edit_clicked" swapped="true" />
+                      </object>
+                    </child>
+                    <!-- remove button -->
+                    <child>
+                      <object class="GtkToolButton" id="delete_button">
+                        <property name="tooltip-text" translatable="yes">Delete the currently selected action.</property>
+                        <property name="visible">TRUE</property>
+                        <property name="icon-name">list-remove-symbolic</property>
+                        <signal name="clicked" handler="thunar_uca_chooser_delete_clicked" swapped="true" />
+                      </object>
+                    </child>
+                    <!-- move up button -->
+                    <child>
+                      <object class="GtkToolButton" id="up_button">
+                        <property name="tooltip-text" translatable="yes">Move the currently selected action up by one row.</property>
+                        <property name="visible">TRUE</property>
+                        <property name="icon-name">go-up-symbolic</property>
+                        <signal name="clicked" handler="thunar_uca_chooser_up_clicked" swapped="true" />
+                      </object>
+                    </child>
+                    <!-- move down button -->
+                    <child>
+                      <object class="GtkToolButton" id="down_button">
+                        <property name="tooltip-text" translatable="yes">Move the currently selected action down by one row.</property>
+                        <property name="visible">TRUE</property>
+                        <property name="icon-name">go-down-symbolic</property>
+                        <signal name="clicked" handler="thunar_uca_chooser_down_clicked" swapped="true" />
+                      </object>
+                    </child>
+                  </object>
+                </child> <!-- end: buttons toolbar -->
+              </object>
+            </child> <!-- end of main part hbox -->
+          </object>
+        </child> <!-- end of main part frame -->
+      </object>
+    </child>
+  </template>
+</interface>
diff --git a/plugins/thunar-uca/thunar-uca-editor.c b/plugins/thunar-uca/thunar-uca-editor.c
index 2ca7ead..13717c0 100644
--- a/plugins/thunar-uca/thunar-uca-editor.c
+++ b/plugins/thunar-uca/thunar-uca-editor.c
@@ -44,6 +44,7 @@ static void           thunar_uca_editor_set_types       (ThunarUcaEditor
                                                          ThunarUcaTypes          types);
 static void           thunar_uca_editor_command_clicked (ThunarUcaEditor        *uca_editor);
 static void           thunar_uca_editor_icon_clicked    (ThunarUcaEditor        *uca_editor);
+static void           thunar_uca_editor_constructed     (GObject                *object);
 
 
 
@@ -56,12 +57,12 @@ struct _ThunarUcaEditor
 {
   GtkDialog __parent__;
 
+  GtkWidget   *notebook;
   GtkWidget   *name_entry;
   GtkWidget   *description_entry;
   GtkWidget   *icon_button;
   GtkWidget   *command_entry;
   GtkWidget   *sn_button;
-  GtkWidget   *parameter_entry;
   GtkWidget   *patterns_entry;
   GtkWidget   *directories_button;
   GtkWidget   *audio_files_button;
@@ -80,6 +81,32 @@ THUNARX_DEFINE_TYPE (ThunarUcaEditor, thunar_uca_editor, GTK_TYPE_DIALOG);
 static void
 thunar_uca_editor_class_init (ThunarUcaEditorClass *klass)
 {
+  GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+  GObjectClass   *object_class = G_OBJECT_CLASS (klass);
+
+  /* vfuncs */
+  object_class->constructed = thunar_uca_editor_constructed;
+
+  /* Setup the template xml */
+  gtk_widget_class_set_template_from_resource (widget_class, "/org/xfce/thunar/uca/editor.ui");
+
+  /* bind stuff */
+  gtk_widget_class_bind_template_child (widget_class, ThunarUcaEditor, notebook);
+  gtk_widget_class_bind_template_child (widget_class, ThunarUcaEditor, name_entry);
+  gtk_widget_class_bind_template_child (widget_class, ThunarUcaEditor, description_entry);
+  gtk_widget_class_bind_template_child (widget_class, ThunarUcaEditor, icon_button);
+  gtk_widget_class_bind_template_child (widget_class, ThunarUcaEditor, command_entry);
+  gtk_widget_class_bind_template_child (widget_class, ThunarUcaEditor, sn_button);
+  gtk_widget_class_bind_template_child (widget_class, ThunarUcaEditor, patterns_entry);
+  gtk_widget_class_bind_template_child (widget_class, ThunarUcaEditor, directories_button);
+  gtk_widget_class_bind_template_child (widget_class, ThunarUcaEditor, audio_files_button);
+  gtk_widget_class_bind_template_child (widget_class, ThunarUcaEditor, image_files_button);
+  gtk_widget_class_bind_template_child (widget_class, ThunarUcaEditor, text_files_button);
+  gtk_widget_class_bind_template_child (widget_class, ThunarUcaEditor, video_files_button);
+  gtk_widget_class_bind_template_child (widget_class, ThunarUcaEditor, other_files_button);
+
+  gtk_widget_class_bind_template_callback(widget_class, thunar_uca_editor_icon_clicked);
+  gtk_widget_class_bind_template_callback(widget_class, thunar_uca_editor_command_clicked);
 }
 
 
@@ -87,373 +114,27 @@ thunar_uca_editor_class_init (ThunarUcaEditorClass *klass)
 static void
 thunar_uca_editor_init (ThunarUcaEditor *uca_editor)
 {
-  AtkRelationSet *relations;
-  PangoAttribute *attribute;
-  PangoAttrList  *attrs_small_bold;
-  PangoAttrList  *attrs_small;
-  AtkRelation    *relation;
-  AtkObject      *object;
-  GtkWidget      *notebook;
-  GtkWidget      *button;
-  GtkWidget      *itable;
-  GtkWidget      *align;
-  GtkWidget      *image;
-  GtkWidget      *label;
-  GtkWidget      *table;
-  GtkWidget      *hbox;
-  GtkWidget      *vbox;
+  /* Initialize the template for this instance */
+  gtk_widget_init_template (GTK_WIDGET (uca_editor));
 
   /* configure the dialog properties */
   gtk_dialog_add_button (GTK_DIALOG (uca_editor), _("_Cancel"), GTK_RESPONSE_CANCEL);
   gtk_dialog_add_button (GTK_DIALOG (uca_editor), _("_OK"), GTK_RESPONSE_OK);
-  gtk_dialog_set_alternative_button_order (GTK_DIALOG (uca_editor), GTK_RESPONSE_OK, GTK_RESPONSE_CANCEL, -1);
   gtk_dialog_set_default_response (GTK_DIALOG (uca_editor), GTK_RESPONSE_OK);
-  gtk_window_set_destroy_with_parent (GTK_WINDOW (uca_editor), TRUE);
-  gtk_window_set_resizable (GTK_WINDOW (uca_editor), FALSE);
-
-  notebook = gtk_notebook_new ();
-  gtk_container_set_border_width (GTK_CONTAINER (notebook), 6);
-  gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (uca_editor))), notebook, TRUE, TRUE, 0);
-  gtk_widget_show (notebook);
-
-  /*
-     Basic
-   */
-  label = gtk_label_new (_("Basic"));
-  table = gtk_table_new (7, 2, FALSE);
-  gtk_table_set_col_spacings (GTK_TABLE (table), 12);
-  gtk_table_set_row_spacings (GTK_TABLE (table), 6);
-  gtk_container_set_border_width (GTK_CONTAINER (table), 12);
-  gtk_notebook_append_page (GTK_NOTEBOOK (notebook), table, label);
-  gtk_widget_show (label);
-  gtk_widget_show (table);
-
-  label = g_object_new (GTK_TYPE_LABEL, "label", _("_Name:"), "use-underline", TRUE, "xalign", 0.0f, NULL);
-  gtk_table_attach (GTK_TABLE (table), label, 0, 1, 0, 1, GTK_FILL, GTK_FILL, 0, 0);
-  gtk_widget_show (label);
-
-  uca_editor->name_entry = g_object_new (GTK_TYPE_ENTRY, "activates-default", TRUE, NULL);
-  gtk_widget_set_tooltip_text (uca_editor->name_entry, _("The name of the action that will be displayed in the context menu."));
-  gtk_table_attach (GTK_TABLE (table), uca_editor->name_entry, 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
-  gtk_label_set_mnemonic_widget (GTK_LABEL (label), uca_editor->name_entry);
-  gtk_widget_grab_focus (uca_editor->name_entry);
-  gtk_widget_show (uca_editor->name_entry);
-
-  /* set Atk label relation for the entry */
-  object = gtk_widget_get_accessible (uca_editor->name_entry);
-  relations = atk_object_ref_relation_set (gtk_widget_get_accessible (label));
-  relation = atk_relation_new (&object, 1, ATK_RELATION_LABEL_FOR);
-  atk_relation_set_add (relations, relation);
-  g_object_unref (G_OBJECT (relation));
-
-  label = g_object_new (GTK_TYPE_LABEL, "label", _("_Description:"), "use-underline", TRUE, "xalign", 0.0f, NULL);
-  gtk_table_attach (GTK_TABLE (table), label, 0, 1, 1, 2, GTK_FILL, GTK_FILL, 0, 0);
-  gtk_widget_show (label);
-
-  uca_editor->description_entry = g_object_new (GTK_TYPE_ENTRY, "activates-default", TRUE, NULL);
-  gtk_widget_set_tooltip_text (uca_editor->description_entry, _("The description of the action that will be displayed as tooltip "
-                                                                "in the statusbar when selecting the item from the context menu."));
-  gtk_table_attach (GTK_TABLE (table), uca_editor->description_entry, 1, 2, 1, 2, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
-  gtk_label_set_mnemonic_widget (GTK_LABEL (label), uca_editor->description_entry);
-  gtk_widget_show (uca_editor->description_entry);
-
-  /* set Atk label relation for the entry */
-  object = gtk_widget_get_accessible (uca_editor->description_entry);
-  relations = atk_object_ref_relation_set (gtk_widget_get_accessible (label));
-  relation = atk_relation_new (&object, 1, ATK_RELATION_LABEL_FOR);
-  atk_relation_set_add (relations, relation);
-  g_object_unref (G_OBJECT (relation));
-
-  label = g_object_new (GTK_TYPE_LABEL, "label", _("_Command:"), "use-underline", TRUE, "xalign", 0.0f, NULL);
-  gtk_table_attach (GTK_TABLE (table), label, 0, 1, 2, 3, GTK_FILL, GTK_FILL, 0, 0);
-  gtk_widget_show (label);
-
-  hbox = gtk_hbox_new (FALSE, 2);
-  gtk_table_attach (GTK_TABLE (table), hbox, 1, 2, 2, 3, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
-  gtk_widget_show (hbox);
-
-  uca_editor->command_entry = g_object_new (GTK_TYPE_ENTRY, "activates-default", TRUE, NULL);
-  gtk_widget_set_tooltip_text (uca_editor->command_entry, _("The command (including the necessary parameters) to perform the action. "
-                                                            "See the command parameter legend below for a list of supported parameter "
-                                                            "variables, which will be substituted when launching the command. When "
-                                                            "upper-case letters (e.g. %F, %D, %N) are used, the action will be applicable "
-                                                            "even if more than one item is selected. Else the action will only be "
-                                                            "applicable if exactly one item is selected."));
-  gtk_box_pack_start (GTK_BOX (hbox), uca_editor->command_entry, TRUE, TRUE, 0);
-  gtk_label_set_mnemonic_widget (GTK_LABEL (label), uca_editor->command_entry);
-  gtk_widget_show (uca_editor->command_entry);
-
-  button = gtk_button_new ();
-  gtk_widget_set_tooltip_text (button, _("Browse the file system to select an application to use for this action."));
-  gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0);
-  g_signal_connect_swapped (G_OBJECT (button), "clicked", G_CALLBACK (thunar_uca_editor_command_clicked), uca_editor);
-  gtk_widget_show (button);
-
-  image = gtk_image_new_from_icon_name ("document-open", GTK_ICON_SIZE_BUTTON);
-  gtk_container_add (GTK_CONTAINER (button), image);
-  gtk_widget_show (image);
-
-  /* set Atk label relation for the entry */
-  object = gtk_widget_get_accessible (uca_editor->command_entry);
-  relations = atk_object_ref_relation_set (gtk_widget_get_accessible (label));
-  relation = atk_relation_new (&object, 1, ATK_RELATION_LABEL_FOR);
-  atk_relation_set_add (relations, relation);
-  g_object_unref (G_OBJECT (relation));
-
-  uca_editor->sn_button = gtk_check_button_new_with_label (_("Use Startup Notification"));
-  gtk_widget_set_tooltip_text (uca_editor->sn_button, _("Enable this option if you want a waiting cursor to be shown while the "
-                                                        "action is launched. This is also highly recommended if you have focus "
-                                                        "stealing prevention enabled in your window manager."));
-  gtk_table_attach (GTK_TABLE (table), uca_editor->sn_button, 1, 2, 3, 4, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
-  gtk_widget_show (uca_editor->sn_button);
-
-  label = g_object_new (GTK_TYPE_LABEL, "label", _("_Icon:"), "use-underline", TRUE, "xalign", 0.0f, NULL);
-  gtk_table_attach (GTK_TABLE (table), label, 0, 1, 4, 5, GTK_FILL, GTK_FILL, 0, 0);
-  gtk_widget_show (label);
-
-  align = gtk_alignment_new (0.0f, 0.5f, 0.0f, 0.0f);
-  gtk_table_attach (GTK_TABLE (table), align, 1, 2, 4, 5, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
-  gtk_widget_show (align);
-
-  uca_editor->icon_button = gtk_button_new_with_label (_("No icon"));
-  gtk_widget_set_tooltip_text (uca_editor->icon_button, _("Click this button to select an icon file that will be displayed "
-                                                          "in the context menu in addition to the action name chosen above."));
-  gtk_container_add (GTK_CONTAINER (align), uca_editor->icon_button);
-  g_signal_connect_swapped (G_OBJECT (uca_editor->icon_button), "clicked", G_CALLBACK (thunar_uca_editor_icon_clicked), uca_editor);
-  gtk_label_set_mnemonic_widget (GTK_LABEL (label), uca_editor->icon_button);
-  gtk_widget_show (uca_editor->icon_button);
-
-  /* set Atk label relation for the button */
-  object = gtk_widget_get_accessible (uca_editor->icon_button);
-  relations = atk_object_ref_relation_set (gtk_widget_get_accessible (label));
-  relation = atk_relation_new (&object, 1, ATK_RELATION_LABEL_FOR);
-  atk_relation_set_add (relations, relation);
-  g_object_unref (G_OBJECT (relation));
-
-  align = g_object_new (GTK_TYPE_ALIGNMENT, "height-request", 12, NULL);
-  gtk_table_attach (GTK_TABLE (table), align, 0, 2, 5, 6, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
-  gtk_widget_show (align);
-
-  hbox = gtk_hbox_new (FALSE, 6);
-  gtk_table_attach (GTK_TABLE (table), hbox, 0, 2, 6, 7, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
-  gtk_widget_show (hbox);
-
-  image = gtk_image_new_from_icon_name ("dialog-information", GTK_ICON_SIZE_DND);
-  gtk_misc_set_alignment (GTK_MISC (image), 0.5f, 0.0f);
-  gtk_box_pack_start (GTK_BOX (hbox), image, FALSE, FALSE, 0);
-  gtk_widget_show (image);
-
-  vbox = gtk_vbox_new (FALSE, 6);
-  gtk_box_pack_start (GTK_BOX (hbox), vbox, TRUE, TRUE, 0);
-  gtk_widget_show (vbox);
-
-  label = gtk_label_new (_("The following command parameters will be\n"
-                           "substituted when launching the action:"));
-  gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
-  gtk_misc_set_alignment (GTK_MISC (label), 0.0f, 0.0f);
-  gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
-  gtk_widget_show (label);
-
-  table = gtk_table_new (2, 2, FALSE);
-  gtk_table_set_col_spacings (GTK_TABLE (table), 6);
-  gtk_table_set_row_spacings (GTK_TABLE (table), 3);
-  gtk_container_set_border_width (GTK_CONTAINER (table), 6);
-  gtk_box_pack_start (GTK_BOX (vbox), table, TRUE, TRUE, 0);
-  gtk_widget_show (table);
-
-  /* setup the small+bold attribute list */
-  attrs_small_bold = pango_attr_list_new ();
-  attribute = pango_attr_weight_new (PANGO_WEIGHT_BOLD);
-  attribute->start_index = 0;
-  attribute->end_index = -1;
-  pango_attr_list_insert (attrs_small_bold, attribute);
-  attribute = pango_attr_scale_new (PANGO_SCALE_SMALL);
-  attribute->start_index = 0;
-  attribute->end_index = -1;
-  pango_attr_list_insert (attrs_small_bold, attribute);
-
-  /* setup the small attribute list */
-  attrs_small = pango_attr_list_new ();
-  attribute = pango_attr_scale_new (PANGO_SCALE_SMALL);
-  attribute->start_index = 0;
-  attribute->end_index = -1;
-  pango_attr_list_insert (attrs_small, attribute);
-
-  label = gtk_label_new ("%f");
-  gtk_label_set_attributes (GTK_LABEL (label), attrs_small_bold);
-  gtk_misc_set_alignment (GTK_MISC (label), 0.0f, 0.0f);
-  gtk_table_attach (GTK_TABLE (table), label, 0, 1, 0, 1, GTK_FILL, GTK_FILL, 0, 0);
-  gtk_widget_show (label);
-
-  label = gtk_label_new (_("the path to the first selected file"));
-  gtk_label_set_attributes (GTK_LABEL (label), attrs_small);
-  gtk_misc_set_alignment (GTK_MISC (label), 0.0f, 0.0f);
-  gtk_table_attach (GTK_TABLE (table), label, 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
-  gtk_widget_show (label);
-
-  label = gtk_label_new ("%F");
-  gtk_label_set_attributes (GTK_LABEL (label), attrs_small_bold);
-  gtk_misc_set_alignment (GTK_MISC (label), 0.0f, 0.0f);
-  gtk_table_attach (GTK_TABLE (table), label, 0, 1, 1, 2, GTK_FILL, GTK_FILL, 0, 0);
-  gtk_widget_show (label);
-
-  label = gtk_label_new (_("the paths to all selected files"));
-  gtk_label_set_attributes (GTK_LABEL (label), attrs_small);
-  gtk_misc_set_alignment (GTK_MISC (label), 0.0f, 0.0f);
-  gtk_table_attach (GTK_TABLE (table), label, 1, 2, 1, 2, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
-  gtk_widget_show (label);
-
-  label = gtk_label_new ("%d");
-  gtk_label_set_attributes (GTK_LABEL (label), attrs_small_bold);
-  gtk_misc_set_alignment (GTK_MISC (label), 0.0f, 0.0f);
-  gtk_table_attach (GTK_TABLE (table), label, 0, 1, 2, 3, GTK_FILL, GTK_FILL, 0, 0);
-  gtk_widget_show (label);
-
-  label = gtk_label_new (_("directory containing the file that is passed in %f"));
-  gtk_label_set_attributes (GTK_LABEL (label), attrs_small);
-  gtk_misc_set_alignment (GTK_MISC (label), 0.0f, 0.0f);
-  gtk_table_attach (GTK_TABLE (table), label, 1, 2, 2, 3, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
-  gtk_widget_show (label);
-
-  label = gtk_label_new ("%D");
-  gtk_label_set_attributes (GTK_LABEL (label), attrs_small_bold);
-  gtk_misc_set_alignment (GTK_MISC (label), 0.0f, 0.0f);
-  gtk_table_attach (GTK_TABLE (table), label, 0, 1, 3, 4, GTK_FILL, GTK_FILL, 0, 0);
-  gtk_widget_show (label);
-
-  label = gtk_label_new (_("directories containing the files that are passed in %F"));
-  gtk_label_set_attributes (GTK_LABEL (label), attrs_small);
-  gtk_misc_set_alignment (GTK_MISC (label), 0.0f, 0.0f);
-  gtk_table_attach (GTK_TABLE (table), label, 1, 2, 3, 4, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
-  gtk_widget_show (label);
-
-  label = gtk_label_new ("%n");
-  gtk_label_set_attributes (GTK_LABEL (label), attrs_small_bold);
-  gtk_misc_set_alignment (GTK_MISC (label), 0.0f, 0.0f);
-  gtk_table_attach (GTK_TABLE (table), label, 0, 1, 4, 5, GTK_FILL, GTK_FILL, 0, 0);
-  gtk_widget_show (label);
-
-  label = gtk_label_new (_("the first selected filename (without path)"));
-  gtk_label_set_attributes (GTK_LABEL (label), attrs_small);
-  gtk_misc_set_alignment (GTK_MISC (label), 0.0f, 0.0f);
-  gtk_table_attach (GTK_TABLE (table), label, 1, 2, 4, 5, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
-  gtk_widget_show (label);
-
-  label = gtk_label_new ("%N");
-  gtk_label_set_attributes (GTK_LABEL (label), attrs_small_bold);
-  gtk_misc_set_alignment (GTK_MISC (label), 0.0f, 0.0f);
-  gtk_table_attach (GTK_TABLE (table), label, 0, 1, 5, 6, GTK_FILL, GTK_FILL, 0, 0);
-  gtk_widget_show (label);
-
-  label = gtk_label_new (_("the selected filenames (without paths)"));
-  gtk_label_set_attributes (GTK_LABEL (label), attrs_small);
-  gtk_misc_set_alignment (GTK_MISC (label), 0.0f, 0.0f);
-  gtk_table_attach (GTK_TABLE (table), label, 1, 2, 5, 6, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
-  gtk_widget_show (label);
-
-  /* release the pango attribute lists */
-  pango_attr_list_unref (attrs_small_bold);
-  pango_attr_list_unref (attrs_small);
-
-  /*
-     Appearance Conditions
-   */
-  table = gtk_table_new (3, 2, FALSE);
-  label = gtk_label_new (_("Appearance Conditions"));
-  gtk_table_set_col_spacings (GTK_TABLE (table), 12);
-  gtk_table_set_row_spacings (GTK_TABLE (table), 6);
-  gtk_container_set_border_width (GTK_CONTAINER (table), 12);
-  gtk_notebook_append_page (GTK_NOTEBOOK (notebook), table, label);
-  gtk_widget_show (label);
-  gtk_widget_show (table);
-
-  label = g_object_new (GTK_TYPE_LABEL, "label", _("_File Pattern:"), "use-underline", TRUE, "xalign", 0.0f, NULL);
-  gtk_table_attach (GTK_TABLE (table), label, 0, 1, 0, 1, GTK_FILL, GTK_FILL, 0, 0);
-  gtk_widget_show (label);
-
-  uca_editor->patterns_entry = g_object_new (GTK_TYPE_ENTRY, "activates-default", TRUE, "text", "*", NULL);
-  gtk_widget_set_tooltip_text (uca_editor->patterns_entry, _("Enter a list of patterns that will be used to determine "
-                                                             "whether this action should be displayed for a selected "
-                                                             "file. If you specify more than one pattern here, the list "
-                                                             "items must be separated with semicolons (e.g. *.txt;*.doc)."));
-  gtk_table_attach (GTK_TABLE (table), uca_editor->patterns_entry, 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
-  gtk_label_set_mnemonic_widget (GTK_LABEL (label), uca_editor->patterns_entry);
-  gtk_widget_show (uca_editor->patterns_entry);
-
-  /* set Atk label relation for the entry */
-  object = gtk_widget_get_accessible (uca_editor->patterns_entry);
-  relations = atk_object_ref_relation_set (gtk_widget_get_accessible (label));
-  relation = atk_relation_new (&object, 1, ATK_RELATION_LABEL_FOR);
-  atk_relation_set_add (relations, relation);
-  g_object_unref (G_OBJECT (relation));
-
-  align = g_object_new (GTK_TYPE_ALIGNMENT, "height-request", 0, NULL);
-  gtk_table_attach (GTK_TABLE (table), align, 0, 2, 1, 2, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
-  gtk_widget_show (align);
-
-  label = g_object_new (GTK_TYPE_LABEL, "label", _("Appears if selection contains:"), "xalign", 0.0f, NULL);
-  gtk_table_attach (GTK_TABLE (table), label, 0, 2, 2, 3, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
-  gtk_widget_show (label);
-
-  align = g_object_new (GTK_TYPE_ALIGNMENT, "left-padding", 18, NULL);
-  gtk_table_attach (GTK_TABLE (table), align, 0, 2, 3, 4, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
-  gtk_widget_show (align);
-
-  itable = gtk_table_new (3, 2, TRUE);
-  gtk_table_set_col_spacings (GTK_TABLE (itable), 12);
-  gtk_container_add (GTK_CONTAINER (align), itable);
-  gtk_widget_show (itable);
-
-  uca_editor->directories_button = gtk_check_button_new_with_mnemonic (_("_Directories"));
-  gtk_table_attach (GTK_TABLE (itable), uca_editor->directories_button, 0, 1, 0, 1, GTK_FILL, GTK_FILL, 0, 0);
-  gtk_widget_show (uca_editor->directories_button);
-
-  uca_editor->audio_files_button = gtk_check_button_new_with_mnemonic (_("_Audio Files"));
-  gtk_table_attach (GTK_TABLE (itable), uca_editor->audio_files_button, 0, 1, 1, 2, GTK_FILL, GTK_FILL, 0, 0);
-  gtk_widget_show (uca_editor->audio_files_button);
-
-  uca_editor->image_files_button = gtk_check_button_new_with_mnemonic (_("_Image Files"));
-  gtk_table_attach (GTK_TABLE (itable), uca_editor->image_files_button, 0, 1, 2, 3, GTK_FILL, GTK_FILL, 0, 0);
-  gtk_widget_show (uca_editor->image_files_button);
-
-  uca_editor->text_files_button = gtk_check_button_new_with_mnemonic (_("_Text Files"));
-  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (uca_editor->text_files_button), TRUE);
-  gtk_table_attach (GTK_TABLE (itable), uca_editor->text_files_button, 1, 2, 0, 1, GTK_FILL, GTK_FILL, 0, 0);
-  gtk_widget_show (uca_editor->text_files_button);
-
-  uca_editor->video_files_button = gtk_check_button_new_with_mnemonic (_("_Video Files"));
-  gtk_table_attach (GTK_TABLE (itable), uca_editor->video_files_button, 1, 2, 1, 2, GTK_FILL, GTK_FILL, 0, 0);
-  gtk_widget_show (uca_editor->video_files_button);
-
-  uca_editor->other_files_button = gtk_check_button_new_with_mnemonic (_("_Other Files"));
-  gtk_table_attach (GTK_TABLE (itable), uca_editor->other_files_button, 1, 2, 2, 3, GTK_FILL, GTK_FILL, 0, 0);
-  gtk_widget_show (uca_editor->other_files_button);
-
-  align = g_object_new (GTK_TYPE_ALIGNMENT, "height-request", 12, NULL);
-  gtk_table_attach (GTK_TABLE (table), align, 0, 2, 4, 5, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
-  gtk_widget_show (align);
-
-  hbox = gtk_hbox_new (FALSE, 6);
-  gtk_table_attach (GTK_TABLE (table), hbox, 0, 2, 5, 6, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
-  gtk_widget_show (hbox);
-
-  image = gtk_image_new_from_icon_name ("dialog-information", GTK_ICON_SIZE_DND);
-  gtk_misc_set_alignment (GTK_MISC (image), 0.5f, 0.0f);
-  gtk_box_pack_start (GTK_BOX (hbox), image, FALSE, FALSE, 0);
-  gtk_widget_show (image);
-
-  label = gtk_label_new (_("This page lists the conditions under which the\n"
-                           "action will appear in the file managers context\n"
-                           "menus. The file patterns are specified as a list\n"
-                           "of simple file patterns separated by semicolons\n"
-                           "(e.g. *.txt;*.doc). For an action to appear in the\n"
-                           "context menu of a file or folder, at least one of\n"
-                           "these patterns must match the name of the file\n"
-                           "or folder. Additionally, you can specify that the\n"
-                           "action should only appear for certain kinds of\nfiles."));
-  gtk_misc_set_alignment (GTK_MISC (label), 0.0f, 0.0f);
-  gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0);
-  gtk_widget_show (label);
+}
+
+
+
+static void
+thunar_uca_editor_constructed (GObject *object)
+{
+  ThunarUcaEditor *editor = THUNAR_UCA_EDITOR (object);
+
+  G_OBJECT_CLASS (thunar_uca_editor_parent_class)->constructed (object);
+
+  /* Visual tweaks for header-bar mode only */
+  g_object_set (gtk_dialog_get_content_area (GTK_DIALOG (editor)), "border-width", 0, NULL);
+  g_object_set (editor->notebook, "show-border", FALSE, NULL);
 }
 
 
@@ -476,6 +157,7 @@ thunar_uca_editor_command_clicked (ThunarUcaEditor *uca_editor)
                                          _("_Cancel"), GTK_RESPONSE_CANCEL,
                                          _("_Open"), GTK_RESPONSE_ACCEPT,
                                          NULL);
+  gtk_dialog_set_default_response (GTK_DIALOG (chooser), GTK_RESPONSE_ACCEPT);
   gtk_file_chooser_set_local_only (GTK_FILE_CHOOSER (chooser), TRUE);
 
   /* add file chooser filters */
@@ -610,7 +292,6 @@ thunar_uca_editor_icon_clicked (ThunarUcaEditor *uca_editor)
                                          _("_Cancel"), GTK_RESPONSE_CANCEL,
                                          _("_OK"), GTK_RESPONSE_ACCEPT,
                                          NULL);
-  gtk_dialog_set_alternative_button_order (GTK_DIALOG (chooser), GTK_RESPONSE_ACCEPT, GTK_RESPONSE_CANCEL, -1);
   gtk_dialog_set_default_response (GTK_DIALOG (chooser), GTK_RESPONSE_ACCEPT);
   g_free (title);
 
@@ -665,6 +346,7 @@ thunar_uca_editor_set_icon_name (ThunarUcaEditor *uca_editor,
     {
       /* setup an image for the icon */
       image = gtk_image_new_from_gicon (icon, GTK_ICON_SIZE_DIALOG);
+      g_object_set (image, "icon-size", GTK_ICON_SIZE_DND, NULL);
       gtk_container_add (GTK_CONTAINER (uca_editor->icon_button), image);
       gtk_widget_show (image);
 
diff --git a/plugins/thunar-uca/thunar-uca-editor.ui b/plugins/thunar-uca/thunar-uca-editor.ui
new file mode 100644
index 0000000..e254072
--- /dev/null
+++ b/plugins/thunar-uca/thunar-uca-editor.ui
@@ -0,0 +1,683 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    For now, better don't edit this with glade, since glade insists upon inserting
+    deprecated properties and otherwise messing with the file.
+-->
+<interface>
+  <requires lib="gtk+" version="3.12"/>
+  <template class="ThunarUcaEditor" parent="GtkDialog">
+    <property name="can_focus">False</property>
+    <property name="title" translatable="yes">FIXME</property>
+    <property name="modal">True</property>
+    <property name="default_width">450</property>
+    <property name="default_height">500</property>
+    <property name="destroy_with_parent">True</property>
+    <property name="type_hint">dialog</property>
+    <child internal-child="vbox">
+      <object class="GtkBox" id="vbox">
+        <child>
+          <object class="GtkNotebook" id="notebook">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <child>
+              <object class="GtkGrid" id="grid1">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="margin_start">12</property>
+                <property name="margin_end">12</property>
+                <property name="margin_top">12</property>
+                <property name="margin_bottom">12</property>
+                <property name="row_spacing">12</property>
+                <property name="column_spacing">6</property>
+                <child>
+                  <object class="GtkLabel" id="name_label">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="label" translatable="yes">_Name:</property>
+                    <property name="use_underline">True</property>
+                    <property name="mnemonic_widget">name_entry</property>
+                    <property name="xalign">0</property>
+                    <accessibility>
+                      <relation type="label-for" target="name_entry"/>
+                    </accessibility>
+                  </object>
+                  <packing>
+                    <property name="left_attach">0</property>
+                    <property name="top_attach">0</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkEntry" id="name_entry">
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="tooltip_text" translatable="yes">The name of the action that will be displayed in the context menu.</property>
+                    <property name="hexpand">True</property>
+                    <property name="activates_default">True</property>
+                  </object>
+                  <packing>
+                    <property name="left_attach">1</property>
+                    <property name="top_attach">0</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkLabel" id="description_label">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="label" translatable="yes">_Description:</property>
+                    <property name="use_underline">True</property>
+                    <property name="mnemonic_widget">description_entry</property>
+                    <property name="xalign">0</property>
+                    <accessibility>
+                      <relation type="label-for" target="description_entry"/>
+                    </accessibility>
+                  </object>
+                  <packing>
+                    <property name="left_attach">0</property>
+                    <property name="top_attach">1</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkEntry" id="description_entry">
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="tooltip_text" translatable="yes">The description of the action that will be displayed as tooltip in the statusbar when selecting the item from the context menu.</property>
+                    <property name="hexpand">True</property>
+                    <property name="activates_default">True</property>
+                  </object>
+                  <packing>
+                    <property name="left_attach">1</property>
+                    <property name="top_attach">1</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkLabel" id="command_label">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="label" translatable="yes">_Command:</property>
+                    <property name="use_underline">True</property>
+                    <property name="mnemonic_widget">command_entry</property>
+                    <property name="xalign">0</property>
+                    <accessibility>
+                      <relation type="label-for" target="command_entry"/>
+                    </accessibility>
+                  </object>
+                  <packing>
+                    <property name="left_attach">0</property>
+                    <property name="top_attach">2</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkBox" id="box1">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <child>
+                      <object class="GtkEntry" id="command_entry">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="tooltip_text" translatable="yes">The command (including the necessary parameters) to perform the action. See the command parameter legend below for a list of supported parameter variables, which will be substituted when launching the command. When upper-case letters (e.g. %F, %D, %N) are used, the action will be applicable even if more than one item is selected. Else the action will only be applicable if exactly one item is selected.</property>
+                        <property name="hexpand">True</property>
+                        <property name="activates_default">True</property>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">True</property>
+                        <property name="position">0</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkButton" id="command_button">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="receives_default">True</property>
+                        <property name="tooltip_text" translatable="yes">Browse the file system to select an application to use for this action.</property>
+                        <signal name="clicked" handler="thunar_uca_editor_command_clicked" swapped="yes"/>
+                        <child>
+                          <object class="GtkImage" id="image1">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="icon_name">document-open-symbolic</property>
+                          </object>
+                        </child>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">True</property>
+                        <property name="position">1</property>
+                      </packing>
+                    </child>
+                    <style>
+                      <class name="linked"/>
+                    </style>
+                  </object>
+                  <packing>
+                    <property name="left_attach">1</property>
+                    <property name="top_attach">2</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkCheckButton" id="sn_button">
+                    <property name="label" translatable="yes">Use Startup Notification</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">False</property>
+                    <property name="tooltip_text" translatable="yes">Enable this option if you want a waiting cursor to be shown while the action is launched. This is also highly recommended if you have focus stealing prevention enabled in your window manager.</property>
+                    <property name="draw_indicator">True</property>
+                  </object>
+                  <packing>
+                    <property name="left_attach">1</property>
+                    <property name="top_attach">3</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkLabel" id="icon_label">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="label" translatable="yes">_Icon:</property>
+                    <property name="use_underline">True</property>
+                    <property name="mnemonic_widget">icon_button</property>
+                    <property name="ellipsize">end</property>
+                    <property name="xalign">0</property>
+                    <accessibility>
+                      <relation type="label-for" target="icon_button"/>
+                    </accessibility>
+                  </object>
+                  <packing>
+                    <property name="left_attach">0</property>
+                    <property name="top_attach">4</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkButton" id="icon_button">
+                    <property name="label" translatable="yes">No icon</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">True</property>
+                    <property name="tooltip_text" translatable="yes">Click this button to select an icon file that will be displayed in the context menu in addition to the action name chosen above.</property>
+                    <signal name="clicked" handler="thunar_uca_editor_icon_clicked" swapped="yes"/>
+                  </object>
+                  <packing>
+                    <property name="left_attach">1</property>
+                    <property name="top_attach">4</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkBox" id="box2">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <child>
+                      <placeholder/>
+                    </child>
+                    <child>
+                      <placeholder/>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="left_attach">0</property>
+                    <property name="top_attach">5</property>
+                    <property name="width">2</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkGrid" id="grid2">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="row_spacing">3</property>
+                    <property name="column_spacing">6</property>
+                    <child>
+                      <object class="GtkImage" id="image2">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="icon_name">dialog-information</property>
+                        <property name="icon_size">6</property>
+                      </object>
+                      <packing>
+                        <property name="left_attach">0</property>
+                        <property name="top_attach">0</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkLabel" id="label4">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="label" translatable="yes">The following command parameters will be substituted when launching the action:</property>
+                        <property name="wrap">True</property>
+                        <property name="xalign">0</property>
+                      </object>
+                      <packing>
+                        <property name="left_attach">1</property>
+                        <property name="top_attach">0</property>
+                        <property name="width">2</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkLabel" id="label5">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="label">%f</property>
+                        <property name="xalign">0</property>
+                        <attributes>
+                          <attribute name="weight" value="bold"/>
+                          <attribute name="scale" value="0.8"/>
+                        </attributes>
+                      </object>
+                      <packing>
+                        <property name="left_attach">1</property>
+                        <property name="top_attach">1</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkLabel" id="label6">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="label">%F</property>
+                        <property name="xalign">0</property>
+                        <attributes>
+                          <attribute name="weight" value="bold"/>
+                          <attribute name="scale" value="0.8"/>
+                        </attributes>
+                      </object>
+                      <packing>
+                        <property name="left_attach">1</property>
+                        <property name="top_attach">2</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkLabel" id="label7">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="label">%d</property>
+                        <property name="xalign">0</property>
+                        <attributes>
+                          <attribute name="weight" value="bold"/>
+                          <attribute name="scale" value="0.8"/>
+                        </attributes>
+                      </object>
+                      <packing>
+                        <property name="left_attach">1</property>
+                        <property name="top_attach">3</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkLabel" id="label8">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="label">%D</property>
+                        <property name="xalign">0</property>
+                        <attributes>
+                          <attribute name="weight" value="bold"/>
+                          <attribute name="scale" value="0.8"/>
+                        </attributes>
+                      </object>
+                      <packing>
+                        <property name="left_attach">1</property>
+                        <property name="top_attach">4</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkLabel" id="label9">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="label">%n</property>
+                        <property name="xalign">0</property>
+                        <attributes>
+                          <attribute name="weight" value="bold"/>
+                          <attribute name="scale" value="0.8"/>
+                        </attributes>
+                      </object>
+                      <packing>
+                        <property name="left_attach">1</property>
+                        <property name="top_attach">5</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkLabel" id="label10">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="label">%N</property>
+                        <property name="xalign">0</property>
+                        <attributes>
+                          <attribute name="weight" value="bold"/>
+                          <attribute name="scale" value="0.8"/>
+                        </attributes>
+                      </object>
+                      <packing>
+                        <property name="left_attach">1</property>
+                        <property name="top_attach">6</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkLabel" id="label11">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="label" translatable="yes">the path to the first selected file</property>
+                        <property name="xalign">0</property>
+                        <property name="expand">true</property>
+                        <attributes>
+                          <attribute name="scale" value="0.8"/>
+                        </attributes>
+                      </object>
+                      <packing>
+                        <property name="left_attach">2</property>
+                        <property name="top_attach">1</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkLabel" id="label12">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="label" translatable="yes">the paths to all selected files</property>
+                        <property name="xalign">0</property>
+                        <attributes>
+                          <attribute name="scale" value="0.8"/>
+                        </attributes>
+                      </object>
+                      <packing>
+                        <property name="left_attach">2</property>
+                        <property name="top_attach">2</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkLabel" id="label13">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="label" translatable="yes">directory containing the file that is passed in %f</property>
+                        <property name="xalign">0</property>
+                        <attributes>
+                          <attribute name="scale" value="0.8"/>
+                        </attributes>
+                      </object>
+                      <packing>
+                        <property name="left_attach">2</property>
+                        <property name="top_attach">3</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkLabel" id="label14">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="label" translatable="yes">directories containing the files that are passed in %F</property>
+                        <property name="xalign">0</property>
+                        <attributes>
+                          <attribute name="scale" value="0.8"/>
+                        </attributes>
+                      </object>
+                      <packing>
+                        <property name="left_attach">2</property>
+                        <property name="top_attach">4</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkLabel" id="label15">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="label" translatable="yes">the first selected filename (without path)</property>
+                        <property name="xalign">0</property>
+                        <attributes>
+                          <attribute name="scale" value="0.8"/>
+                        </attributes>
+                      </object>
+                      <packing>
+                        <property name="left_attach">2</property>
+                        <property name="top_attach">5</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkLabel" id="label16">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="label" translatable="yes">the selected filenames (without paths)</property>
+                        <property name="xalign">0</property>
+                        <attributes>
+                          <attribute name="scale" value="0.8"/>
+                        </attributes>
+                      </object>
+                      <packing>
+                        <property name="left_attach">2</property>
+                        <property name="top_attach">6</property>
+                      </packing>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="left_attach">0</property>
+                    <property name="top_attach">6</property>
+                    <property name="width">2</property>
+                  </packing>
+                </child>
+                <child>
+                  <placeholder/>
+                </child>
+              </object>
+            </child>
+            <child type="tab">
+              <object class="GtkLabel" id="label1">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="label" translatable="yes">Basic</property>
+              </object>
+              <packing>
+                <property name="tab_fill">False</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkGrid" id="grid3">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="margin_start">12</property>
+                <property name="margin_end">12</property>
+                <property name="margin_top">12</property>
+                <property name="margin_bottom">12</property>
+                <property name="row_spacing">6</property>
+                <property name="column_spacing">12</property>
+                <child>
+                  <object class="GtkLabel" id="label3">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="label" translatable="yes">_File Pattern:</property>
+                    <property name="use_underline">True</property>
+                    <property name="mnemonic_widget">patterns_entry</property>
+                    <property name="xalign">0</property>
+                    <accessibility>
+                      <relation type="label-for" target="patterns_entry"/>
+                    </accessibility>
+                  </object>
+                  <packing>
+                    <property name="left_attach">0</property>
+                    <property name="top_attach">0</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkEntry" id="patterns_entry">
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="tooltip_text" translatable="yes">Enter a list of patterns that will be used to determine whether this action should be displayed for a selected file. If you specify more than one pattern here, the list items must be separated with semicolons (e.g. *.txt;*.doc).</property>
+                    <property name="hexpand">True</property>
+                    <property name="activates_default">True</property>
+                    <property name="text" translatable="yes">*</property>
+                  </object>
+                  <packing>
+                    <property name="left_attach">1</property>
+                    <property name="top_attach">0</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkLabel" id="label17">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="label" translatable="yes">Appears if selection contains:</property>
+                    <property name="ellipsize">middle</property>
+                    <property name="xalign">0</property>
+                  </object>
+                  <packing>
+                    <property name="left_attach">0</property>
+                    <property name="top_attach">1</property>
+                    <property name="width">2</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkGrid" id="grid4">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="margin_start">18</property>
+                    <property name="column_spacing">48</property>
+                    <child>
+                      <object class="GtkCheckButton" id="directories_button">
+                        <property name="label" translatable="yes">_Directories</property>
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="receives_default">False</property>
+                        <property name="hexpand">False</property>
+                        <property name="use_underline">True</property>
+                        <property name="draw_indicator">True</property>
+                      </object>
+                      <packing>
+                        <property name="left_attach">0</property>
+                        <property name="top_attach">0</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkCheckButton" id="audio_files_button">
+                        <property name="label" translatable="yes">_Audio Files</property>
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="receives_default">False</property>
+                        <property name="use_underline">True</property>
+                        <property name="draw_indicator">True</property>
+                      </object>
+                      <packing>
+                        <property name="left_attach">0</property>
+                        <property name="top_attach">1</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkCheckButton" id="image_files_button">
+                        <property name="label" translatable="yes">_Image Files</property>
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="receives_default">False</property>
+                        <property name="use_underline">True</property>
+                        <property name="image_position">top</property>
+                        <property name="draw_indicator">True</property>
+                      </object>
+                      <packing>
+                        <property name="left_attach">0</property>
+                        <property name="top_attach">2</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkCheckButton" id="text_files_button">
+                        <property name="label" translatable="yes">_Text Files</property>
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="receives_default">False</property>
+                        <property name="use_underline">True</property>
+                        <property name="draw_indicator">True</property>
+                      </object>
+                      <packing>
+                        <property name="left_attach">1</property>
+                        <property name="top_attach">0</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkCheckButton" id="video_files_button">
+                        <property name="label" translatable="yes">_Video Files</property>
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="receives_default">False</property>
+                        <property name="use_underline">True</property>
+                        <property name="draw_indicator">True</property>
+                      </object>
+                      <packing>
+                        <property name="left_attach">1</property>
+                        <property name="top_attach">1</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkCheckButton" id="other_files_button">
+                        <property name="label" translatable="yes">_Other Files</property>
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="receives_default">False</property>
+                        <property name="use_underline">True</property>
+                        <property name="draw_indicator">True</property>
+                      </object>
+                      <packing>
+                        <property name="left_attach">1</property>
+                        <property name="top_attach">2</property>
+                      </packing>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="left_attach">0</property>
+                    <property name="top_attach">2</property>
+                    <property name="width">2</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkBox" id="box3">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="margin_top">12</property>
+                    <child>
+                      <object class="GtkImage" id="image3">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="halign">start</property>
+                        <property name="valign">start</property>
+                        <property name="icon_name">dialog-information</property>
+                        <property name="icon_size">6</property>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">True</property>
+                        <property name="position">0</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkLabel" id="label18">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="label" translatable="yes">This page lists the conditions under which the action will appear in the file managers context menus. The file patterns are specified as a list of simple file patterns separated by semicolons (e.g. *.txt;*.doc). For an action to appear in the context menu of a file or folder, at least one of these patterns must match the name of the file or folder. Additionally, you can specify that the action should only appear for certai [...]
+                        <property name="wrap">True</property>
+                        <property name="xalign">0</property>
+                        <property name="yalign">0</property>
+                      </object>
+                      <packing>
+                        <property name="expand">True</property>
+                        <property name="fill">True</property>
+                        <property name="position">1</property>
+                      </packing>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="left_attach">0</property>
+                    <property name="top_attach">3</property>
+                    <property name="width">2</property>
+                  </packing>
+                </child>
+              </object>
+              <packing>
+                <property name="position">1</property>
+              </packing>
+            </child>
+            <child type="tab">
+              <object class="GtkLabel" id="label2">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="label" translatable="yes">Appearance Conditions</property>
+              </object>
+              <packing>
+                <property name="position">1</property>
+                <property name="tab_fill">False</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">True</property>
+            <property name="fill">True</property>
+            <property name="position">1</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+  </template>
+</interface>
diff --git a/plugins/thunar-uca/thunar-uca-model.c b/plugins/thunar-uca/thunar-uca-model.c
index 023245a..fc5cef9 100644
--- a/plugins/thunar-uca/thunar-uca-model.c
+++ b/plugins/thunar-uca/thunar-uca-model.c
@@ -153,8 +153,6 @@ struct _ThunarUcaModel
 {
   GObject __parent__;
 
-  GtkIconFactory *icon_factory;
-
   GList          *items;
   gint            stamp;
 };
@@ -254,12 +252,6 @@ thunar_uca_model_init (ThunarUcaModel *uca_model)
   GError *error = NULL;
   gchar  *filename;
 
-  /* allocate a new icon factory for our action icons
-   * and add it to the default icon factories
-   */
-  uca_model->icon_factory = gtk_icon_factory_new ();
-  gtk_icon_factory_add_default (uca_model->icon_factory);
-
   /* generate a unique stamp */
   uca_model->stamp = g_random_int ();
 
@@ -286,10 +278,6 @@ thunar_uca_model_finalize (GObject *object)
 {
   ThunarUcaModel *uca_model = THUNAR_UCA_MODEL (object);
 
-  /* drop our icon factory */
-  gtk_icon_factory_remove_default (uca_model->icon_factory);
-  g_object_unref (G_OBJECT (uca_model->icon_factory));
-
   /* release all items */
   g_list_free_full (uca_model->items, thunar_uca_model_item_free);
 
diff --git a/plugins/thunar-uca/thunar-uca-provider.c b/plugins/thunar-uca/thunar-uca-provider.c
index 60a5b19..e14db0c 100644
--- a/plugins/thunar-uca/thunar-uca-provider.c
+++ b/plugins/thunar-uca/thunar-uca-provider.c
@@ -159,8 +159,12 @@ static void
 manage_actions (GtkWindow *window)
 {
   GtkWidget *dialog;
+  gboolean   use_header_bar = FALSE;
 
-  dialog = g_object_new (THUNAR_UCA_TYPE_CHOOSER, NULL);
+  g_object_get (gtk_settings_get_for_screen (gtk_widget_get_screen (GTK_WIDGET (window))),
+                "gtk-dialogs-use-header", &use_header_bar, NULL);
+
+  dialog = g_object_new (THUNAR_UCA_TYPE_CHOOSER, "use-header-bar", use_header_bar, NULL);
   gtk_window_set_transient_for (GTK_WINDOW (dialog), window);
   gtk_widget_show (dialog);
 }
@@ -435,8 +439,6 @@ thunar_uca_provider_child_watch (ThunarUcaProvider *uca_provider,
 
   g_return_if_fail (THUNAR_UCA_IS_PROVIDER (uca_provider));
 
-  GDK_THREADS_ENTER ();
-
   /* verify that we still have a valid child_watch_path */
   if (G_LIKELY (uca_provider->child_watch_path != NULL))
     {
@@ -457,8 +459,6 @@ thunar_uca_provider_child_watch (ThunarUcaProvider *uca_provider,
     }
 
   thunar_uca_provider_child_watch_destroy (uca_provider, NULL);
-
-  GDK_THREADS_LEAVE ();
 }
 
 
diff --git a/plugins/thunar-uca/thunar-uca.gresource.xml b/plugins/thunar-uca/thunar-uca.gresource.xml
new file mode 100644
index 0000000..dbaf9a3
--- /dev/null
+++ b/plugins/thunar-uca/thunar-uca.gresource.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<gresources>
+  <gresource prefix="/org/xfce/thunar/uca">
+    <file compressed="true" alias="editor.ui">thunar-uca-editor.ui</file>
+    <file compressed="true" alias="chooser.ui">thunar-uca-chooser.ui</file>
+  </gresource>
+</gresources>
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 9eddda1..8a02bc0 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -119,6 +119,8 @@ plugins/thunar-uca/thunar-uca-model.c
 plugins/thunar-uca/thunar-uca-plugin.c
 plugins/thunar-uca/thunar-uca-provider.c
 plugins/thunar-uca/uca.xml.in
+[type: gettext/glade]plugins/thunar-uca/thunar-uca-editor.ui
+[type: gettext/glade]plugins/thunar-uca/thunar-uca-chooser.ui
 
 plugins/thunar-wallpaper/twp-provider.c
 

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the Xfce4-commits mailing list