Commit bf909f56 authored by Tristan Van Berkom's avatar Tristan Van Berkom

GtkFileChooserDefault: Define children with a GtkBuilder template

parent 09b44d7a
......@@ -1102,6 +1102,7 @@ COMPOSITE_TEMPLATES = \
gtkassistant.ui \
gtkcolorchooserdialog.ui \
gtkdialog.ui \
gtkfilechooserdefault.ui \
gtkinfobar.ui \
gtklockbutton.ui \
gtkmessagedialog.ui \
......
......@@ -17,6 +17,7 @@
<file compressed="true">gtkassistant.ui</file>
<file compressed="true">gtkcolorchooserdialog.ui</file>
<file compressed="true">gtkdialog.ui</file>
<file compressed="true">gtkfilechooserdefault.ui</file>
<file compressed="true">gtkinfobar.ui</file>
<file compressed="true">gtklockbutton.ui</file>
<file compressed="true">gtkmessagedialog.ui</file>
......
This diff is collapsed.
This diff is collapsed.
......@@ -46,6 +46,7 @@ G_BEGIN_DECLS
#define GTK_FILE_CHOOSER_GET_IFACE(inst) (G_TYPE_INSTANCE_GET_INTERFACE ((inst), GTK_TYPE_FILE_CHOOSER, GtkFileChooserIface))
typedef struct _GtkFileChooserIface GtkFileChooserIface;
typedef struct _GtkFileChooserDefaultPrivate GtkFileChooserDefaultPrivate;
struct _GtkFileChooserIface
{
......@@ -152,160 +153,9 @@ struct _GtkFileChooserDefault
{
GtkBox parent_instance;
GtkFileChooserAction action;
GtkFileSystem *file_system;
/* Save mode widgets */
GtkWidget *save_widgets;
GtkWidget *save_widgets_table;
GtkWidget *save_folder_label;
/* The file browsing widgets */
GtkWidget *browse_widgets_box;
GtkWidget *browse_widgets_hpaned;
GtkWidget *browse_header_box;
GtkWidget *browse_shortcuts_tree_view;
GtkWidget *browse_shortcuts_add_button;
GtkWidget *browse_shortcuts_remove_button;
GtkWidget *browse_shortcuts_popup_menu;
GtkWidget *browse_shortcuts_popup_menu_remove_item;
GtkWidget *browse_shortcuts_popup_menu_rename_item;
GtkWidget *browse_files_tree_view;
GtkWidget *browse_files_popup_menu;
GtkWidget *browse_files_popup_menu_add_shortcut_item;
GtkWidget *browse_files_popup_menu_hidden_files_item;
GtkWidget *browse_files_popup_menu_size_column_item;
GtkWidget *browse_files_popup_menu_copy_file_location_item;
GtkWidget *browse_files_popup_menu_visit_file_item;
GtkWidget *browse_new_folder_button;
GtkWidget *browse_path_bar_hbox;
GtkSizeGroup *browse_path_bar_size_group;
GtkWidget *browse_path_bar;
GtkWidget *browse_special_mode_icon;
GtkWidget *browse_special_mode_label;
GtkWidget *browse_select_a_folder_info_bar;
GtkWidget *browse_select_a_folder_label;
GtkWidget *browse_select_a_folder_icon;
GtkFileSystemModel *browse_files_model;
char *browse_files_last_selected_name;
/* OPERATION_MODE_SEARCH */
GtkWidget *search_hbox;
GtkWidget *search_entry;
GtkSearchEngine *search_engine;
GtkQuery *search_query;
GtkFileSystemModel *search_model;
/* OPERATION_MODE_RECENT */
GtkRecentManager *recent_manager;
GtkFileSystemModel *recent_model;
guint load_recent_id;
GtkWidget *filter_combo_hbox;
GtkWidget *filter_combo;
GtkWidget *preview_box;
GtkWidget *preview_label;
GtkWidget *preview_widget;
GtkWidget *extra_align;
GtkWidget *extra_widget;
GtkWidget *location_button;
GtkWidget *location_entry_box;
GtkWidget *location_label;
GtkWidget *location_entry;
LocationMode location_mode;
GtkListStore *shortcuts_model;
/* Filter for the shortcuts pane. We filter out the "current folder" row and
* the separator that we use for the "Save in folder" combo.
*/
GtkTreeModel *shortcuts_pane_filter_model;
/* Handles */
GSList *loading_shortcuts;
GSList *reload_icon_cancellables;
GCancellable *file_list_drag_data_received_cancellable;
GCancellable *update_current_folder_cancellable;
GCancellable *should_respond_get_info_cancellable;
GCancellable *file_exists_get_info_cancellable;
GCancellable *update_from_entry_cancellable;
GCancellable *shortcuts_activate_iter_cancellable;
LoadState load_state;
ReloadState reload_state;
guint load_timeout_id;
OperationMode operation_mode;
GSList *pending_select_files;
GtkFileFilter *current_filter;
GSList *filters;
int num_volumes;
int num_shortcuts;
int num_bookmarks;
gulong volumes_changed_id;
gulong bookmarks_changed_id;
GFile *current_volume_file;
GFile *current_folder;
GFile *preview_file;
char *preview_display_name;
GtkTreeViewColumn *list_name_column;
GtkCellRenderer *list_name_renderer;
GtkTreeViewColumn *list_mtime_column;
GtkTreeViewColumn *list_size_column;
GSource *edited_idle;
char *edited_new_text;
gulong settings_signal_id;
int icon_size;
GSource *focus_entry_idle;
gulong toplevel_set_focus_id;
GtkWidget *toplevel_last_focus_widget;
gint sort_column;
GtkSortType sort_order;
#if 0
GdkDragContext *shortcuts_drag_context;
GSource *shortcuts_drag_outside_idle;
#endif
/* Flags */
guint local_only : 1;
guint preview_widget_active : 1;
guint use_preview_label : 1;
guint select_multiple : 1;
guint show_hidden : 1;
guint do_overwrite_confirmation : 1;
guint list_sort_ascending : 1;
guint changing_folder : 1;
guint shortcuts_current_folder_active : 1;
guint has_home : 1;
guint has_desktop : 1;
guint has_search : 1;
guint has_recent: 1;
guint show_size_column : 1;
guint create_folders : 1;
#if 0
guint shortcuts_drag_outside : 1;
#endif
GtkFileChooserDefaultPrivate *priv;
};
G_END_DECLS
#endif /* __GTK_FILE_CHOOSER_PRIVATE_H__ */
......@@ -18,6 +18,14 @@
*/
#include <gtk/gtk.h>
static gboolean
main_loop_quit_cb (gpointer data)
{
gtk_main_quit ();
return FALSE;
}
static void
test_dialog_basic (void)
{
......@@ -25,6 +33,9 @@ test_dialog_basic (void)
dialog = gtk_dialog_new();
g_assert (GTK_IS_DIALOG (dialog));
g_assert (gtk_dialog_get_action_area (GTK_DIALOG (dialog)) != NULL);
g_assert (gtk_dialog_get_content_area (GTK_DIALOG (dialog)) != NULL);
gtk_widget_destroy (dialog);
}
......@@ -136,6 +147,13 @@ test_app_chooser_dialog_basic (void)
widget = gtk_app_chooser_dialog_new_for_content_type (NULL, 0, "text/plain");
g_assert (GTK_IS_APP_CHOOSER_DIALOG (widget));
/* GtkAppChooserDialog bug, if destroyed before spinning
* the main context then app_chooser_online_get_default_ready_cb()
* will be eventually called and segfault.
*/
g_timeout_add (500, main_loop_quit_cb, NULL);
gtk_main();
gtk_widget_destroy (widget);
}
......@@ -149,6 +167,44 @@ test_color_chooser_dialog_basic (void)
gtk_widget_destroy (widget);
}
/* Avoid warnings from GVFS-RemoteVolumeMonitor */
static gboolean
ignore_gvfs_warning (const gchar *log_domain,
GLogLevelFlags log_level,
const gchar *message,
gpointer user_data)
{
if (g_strcmp0 (log_domain, "GVFS-RemoteVolumeMonitor") == 0)
return FALSE;
return TRUE;
}
static void
test_file_chooser_widget_basic (void)
{
GtkWidget *widget;
g_test_log_set_fatal_handler (ignore_gvfs_warning, NULL);
widget = gtk_file_chooser_widget_new (GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER);
g_assert (GTK_IS_FILE_CHOOSER_WIDGET (widget));
/* XXX BUG:
*
* Spin the mainloop for a bit, this allows the file operations
* to complete, GtkFileChooserDefault has a bug where it leaks
* GtkTreeRowReferences to the internal shortcuts_model
*
* Since we assert all automated children are finalized we
* can catch this
*/
g_timeout_add (100, main_loop_quit_cb, NULL);
gtk_main();
gtk_widget_destroy (widget);
}
int
main (int argc, char **argv)
{
......@@ -173,6 +229,7 @@ main (int argc, char **argv)
g_test_add_func ("/Template/GtkAppChooserWidget/Basic", test_app_chooser_widget_basic);
g_test_add_func ("/Template/GtkAppChooserDialog/Basic", test_app_chooser_dialog_basic);
g_test_add_func ("/Template/GtkColorChooserDialog/Basic", test_color_chooser_dialog_basic);
g_test_add_func ("/Template/GtkFileChooserWidget/Basic", test_file_chooser_widget_basic);
return g_test_run();
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment