[file-roller/wip/gtk4: 10/54] gtk4: make it compile without errors
- From: Paolo Bacchilega <paobac src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [file-roller/wip/gtk4: 10/54] gtk4: make it compile without errors
- Date: Sun, 2 Oct 2022 17:56:48 +0000 (UTC)
commit 10a498e2834da27b36232b7c3bdd64ea0920df8b
Author: Paolo Bacchilega <paobac src gnome org>
Date: Thu Sep 29 15:25:19 2022 +0200
gtk4: make it compile without errors
meson.build | 3 +-
src/dlg-add.c | 58 +-
src/dlg-ask-password.c | 2 +-
src/dlg-batch-add.c | 44 +-
src/dlg-extract.c | 5 +-
src/dlg-open-with.c | 2 +-
src/dlg-package-installer.c | 19 +-
src/dlg-prop.c | 10 +-
src/fr-application.c | 16 -
src/fr-file-selector-dialog.c | 393 ++++----
src/fr-init.c | 10 +-
src/fr-location-bar.c | 58 --
src/fr-new-archive-dialog.c | 298 +++---
src/fr-new-archive-dialog.h | 14 +-
src/fr-window-actions-callbacks.c | 3 +-
src/fr-window.c | 1798 ++++++++++++-------------------------
src/fr-window.h | 8 -
src/glib-utils.c | 9 +
src/glib-utils.h | 3 +-
src/gtk-utils.c | 192 ++--
src/gtk-utils.h | 26 +-
src/meson.build | 7 +-
src/preferences.c | 2 +-
23 files changed, 1080 insertions(+), 1900 deletions(-)
---
diff --git a/meson.build b/meson.build
index 036aebd0..3e0c93e4 100644
--- a/meson.build
+++ b/meson.build
@@ -32,9 +32,8 @@ thread_dep = dependency('threads')
glib_dep = dependency('glib-2.0', version: glib_version)
gthread_dep = dependency('gthread-2.0')
gtk_dep = dependency('gtk4', version: gtk4_version)
-hdy_dep = dependency('libhandy-1', version: hdy_version)
libportal_dep = dependency('libportal', version: '>= 0.5', required: use_native_appchooser)
-libportal_gtk3_dep = dependency('libportal-gtk3', version: '>= 0.5', required: use_native_appchooser)
+libportal_gtk4_dep = dependency('libportal-gtk4', version: '>= 0.5', required: use_native_appchooser)
# Optional dependencies
gobject_introspection_dep = dependency('gobject-introspection-1.0', required: get_option('introspection'))
diff --git a/src/dlg-add.c b/src/dlg-add.c
index a3280caf..d7bff3c1 100644
--- a/src/dlg-add.c
+++ b/src/dlg-add.c
@@ -825,34 +825,58 @@ load_options_activate_cb (GSimpleAction *action,
static void
-save_options_activate_cb (GSimpleAction *action,
- GVariant *parameter,
- gpointer user_data)
+options_name_dialog_response_cb (GtkDialog *dialog,
+ int response_id,
+ gpointer user_data)
{
- GFile *options_dir;
- GFile *options_file;
- char *opt_filename;
DialogData *data = user_data;
+ char *opt_filename;
+ GFile *options_dir;
+ GFile *options_file;
- options_dir = _g_file_new_user_config_subdir (ADD_FOLDER_OPTIONS_DIR, TRUE);
- _g_file_make_directory_tree (options_dir, 0700, NULL);
+ if (response_id != GTK_RESPONSE_YES) {
+ gtk_window_destroy (GTK_WINDOW (dialog));
+ return;
+ }
+
+ opt_filename = _gth_request_dialog_get_text (dialog);
+ gtk_window_destroy (GTK_WINDOW (dialog));
- opt_filename = _gtk_request_dialog_run (GTK_WINDOW (data->dialog),
- GTK_DIALOG_MODAL,
- C_("Window title", "Save Options"),
- _("_Options Name:"),
- (data->last_options != NULL) ? data->last_options : "",
- 1024,
- _GTK_LABEL_CANCEL,
- _GTK_LABEL_SAVE);
if (opt_filename == NULL)
return;
+ options_dir = _g_file_new_user_config_subdir (ADD_FOLDER_OPTIONS_DIR, TRUE);
+ _g_file_make_directory_tree (options_dir, 0700, NULL);
+
options_file = g_file_get_child_for_display_name (options_dir, opt_filename, NULL);
dlg_add_folder_save_current_options (data, options_file);
dlg_add_folder_save_last_used_options (data, opt_filename);
- g_free (opt_filename);
g_object_unref (options_file);
g_object_unref (options_dir);
+ g_free (opt_filename);
+}
+
+
+static void
+save_options_activate_cb (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer user_data)
+{
+ DialogData *data = user_data;
+ GtkWidget *dialog;
+
+ dialog = _gtk_request_dialog_new (GTK_WINDOW (data->dialog),
+ GTK_DIALOG_MODAL,
+ C_("Window title", "Save Options"),
+ _("_Options Name:"),
+ (data->last_options != NULL) ? data->last_options : "",
+ 1024,
+ _GTK_LABEL_CANCEL,
+ _GTK_LABEL_SAVE);
+ g_signal_connect (dialog,
+ "response",
+ G_CALLBACK (options_name_dialog_response_cb),
+ data);
+ gtk_widget_show (dialog);
}
diff --git a/src/dlg-ask-password.c b/src/dlg-ask-password.c
index 9c3e9c23..d9720a1a 100644
--- a/src/dlg-ask-password.c
+++ b/src/dlg-ask-password.c
@@ -153,7 +153,7 @@ dlg_ask_password__common (FrWindow *window,
label = gtk_label_new (_("Wrong password."));
gtk_info_bar_add_child (GTK_INFO_BAR (info_bar), label);
gtk_info_bar_set_message_type (GTK_INFO_BAR (info_bar), GTK_MESSAGE_ERROR);
- _gtk_box_append_expanded (GTK_BOX (GET_WIDGET ("error_box")), info_bar);
+ _gtk_box_pack_start (GTK_BOX (GET_WIDGET ("error_box")), info_bar, TRUE, FALSE);
gtk_widget_show (GET_WIDGET ("error_box"));
_gtk_entry_set_locale_text (GTK_ENTRY (data->password_entry),
diff --git a/src/dlg-batch-add.c b/src/dlg-batch-add.c
index eda1739b..521b34b7 100644
--- a/src/dlg-batch-add.c
+++ b/src/dlg-batch-add.c
@@ -30,31 +30,41 @@
static void
-dialog_response_cb (GtkDialog *dialog,
- int response_id,
- gpointer user_data)
+new_archive_get_file_cb (FrNewArchiveDialog *dialog,
+ GFile *file,
+ const char *mime_type,
+ gpointer user_data)
{
FrWindow *window = user_data;
- if (response_id == GTK_RESPONSE_OK) {
- GFile *file;
- const char *mime_type;
+ if (file == NULL)
+ return;
- file = fr_new_archive_dialog_get_file (FR_NEW_ARCHIVE_DIALOG (dialog), &mime_type);
- if (file == NULL)
- return;
+ fr_window_set_password (window, fr_new_archive_dialog_get_password (FR_NEW_ARCHIVE_DIALOG (dialog)));
+ fr_window_set_encrypt_header (window, fr_new_archive_dialog_get_encrypt_header (FR_NEW_ARCHIVE_DIALOG
(dialog)));
+ fr_window_set_volume_size (window, fr_new_archive_dialog_get_volume_size (FR_NEW_ARCHIVE_DIALOG
(dialog)));
+ fr_window_create_archive_and_continue (window, file, mime_type, NULL);
- fr_window_set_password (window, fr_new_archive_dialog_get_password (FR_NEW_ARCHIVE_DIALOG
(dialog)));
- fr_window_set_encrypt_header (window, fr_new_archive_dialog_get_encrypt_header
(FR_NEW_ARCHIVE_DIALOG (dialog)));
- fr_window_set_volume_size (window, fr_new_archive_dialog_get_volume_size
(FR_NEW_ARCHIVE_DIALOG (dialog)));
- fr_window_create_archive_and_continue (window, file, mime_type, NULL);
+ gtk_window_destroy (GTK_WINDOW (dialog));
+}
- g_object_unref (file);
- }
- else
+
+static void
+dialog_response_cb (GtkDialog *dialog,
+ int response_id,
+ gpointer user_data)
+{
+ FrWindow *window = user_data;
+
+ if (response_id != GTK_RESPONSE_OK) {
fr_window_batch_stop (window);
+ gtk_window_destroy (GTK_WINDOW (dialog));
+ return;
+ }
- gtk_window_destroy (GTK_WINDOW (dialog));
+ fr_new_archive_dialog_get_file (FR_NEW_ARCHIVE_DIALOG (dialog),
+ new_archive_get_file_cb,
+ user_data);
}
diff --git a/src/dlg-extract.c b/src/dlg-extract.c
index 4c58bfca..45b51b65 100644
--- a/src/dlg-extract.c
+++ b/src/dlg-extract.c
@@ -325,16 +325,15 @@ dlg_extract__common (FrWindow *window,
gtk_window_set_default_size (GTK_WINDOW (data->dialog), 530, 510);
gtk_file_chooser_set_select_multiple (GTK_FILE_CHOOSER (data->dialog), FALSE);
- gtk_file_chooser_set_local_only (GTK_FILE_CHOOSER (data->dialog), FALSE);
gtk_file_chooser_set_create_folders (GTK_FILE_CHOOSER (data->dialog), TRUE);
gtk_dialog_set_default_response (GTK_DIALOG (data->dialog), GTK_RESPONSE_OK);
data->builder = gtk_builder_new_from_resource (FILE_ROLLER_RESOURCE_UI_PATH
"extract-dialog-options.ui");
- gtk_file_chooser_set_extra_widget (GTK_FILE_CHOOSER (data->dialog), GET_WIDGET ("extra_widget"));
+ //gtk_file_chooser_set_extra_widget (GTK_FILE_CHOOSER (data->dialog), GET_WIDGET ("extra_widget"));
/* Set widgets data. */
- gtk_file_chooser_set_current_folder_file (GTK_FILE_CHOOSER (data->dialog),
fr_window_get_extract_default_dir (window), NULL);
+ gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (data->dialog),
fr_window_get_extract_default_dir (window), NULL);
if (data->selected_files != NULL)
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (GET_WIDGET ("selected_files_radiobutton")),
TRUE);
diff --git a/src/dlg-open-with.c b/src/dlg-open-with.c
index 1dfead1e..d1a7d3f7 100644
--- a/src/dlg-open-with.c
+++ b/src/dlg-open-with.c
@@ -31,7 +31,7 @@
#ifdef USE_NATIVE_APPCHOOSER
# include <libportal/portal.h>
-# include <libportal-gtk3/portal-gtk3.h>
+# include <libportal-gtk4/portal-gtk4.h>
#endif
typedef struct {
diff --git a/src/dlg-package-installer.c b/src/dlg-package-installer.c
index e9eed908..d2efc094 100644
--- a/src/dlg-package-installer.c
+++ b/src/dlg-package-installer.c
@@ -55,11 +55,7 @@ package_installer_terminated (InstallerData *idata,
FrErrorType error_type,
const char *error_message)
{
- GdkWindow *window;
-
- window = gtk_widget_get_window (GTK_WIDGET (idata->window));
- if (window != NULL)
- gdk_window_set_cursor (window, NULL);
+ gtk_widget_set_cursor (GTK_WIDGET (idata->window), NULL);
if (error_type != FR_ERROR_NONE) {
fr_window_batch_stop_with_error (idata->window,
@@ -165,18 +161,9 @@ install_packages (InstallerData *idata)
connection = g_bus_get_sync (G_BUS_TYPE_SESSION, idata->cancellable, &error);
if (connection != NULL) {
- GdkWindow *window;
GDBusProxy *proxy;
- window = gtk_widget_get_window (GTK_WIDGET (idata->window));
- if (window != NULL) {
- GdkCursor *cursor;
-
- cursor = gdk_cursor_new_from_name (gdk_display_get_default(), "wait");
- gdk_window_set_cursor (window, cursor);
-
- g_object_unref (cursor);
- }
+ gtk_widget_set_cursor_from_name (GTK_WIDGET (idata->window), "wait");
proxy = g_dbus_proxy_new_sync (connection,
G_DBUS_PROXY_FLAGS_NONE,
@@ -195,7 +182,7 @@ install_packages (InstallerData *idata)
names = g_strsplit (idata->packages, ",", -1);
real_names = get_packages_real_names (names);
- desktop_startup_id = g_strdup_printf ("_TIME%i", gtk_get_current_event_time ());
+ desktop_startup_id = g_strdup_printf ("_TIME%i", 0 /* FIXME: delete if not needed */);
platform_data = g_variant_new_parsed ("{'desktop-startup-id': %v}",
g_variant_new_take_string (desktop_startup_id));
g_dbus_proxy_call (proxy,
diff --git a/src/dlg-prop.c b/src/dlg-prop.c
index 54898831..09ec84b6 100644
--- a/src/dlg-prop.c
+++ b/src/dlg-prop.c
@@ -70,11 +70,11 @@ dlg_prop (FrWindow *window)
/* Make the dialog */
- data->dialog = gtk_widget_new (GTK_TYPE_DIALOG,
- "transient-for", GTK_WINDOW (window),
- "modal", TRUE,
- "use-header-bar", _gtk_settings_get_dialogs_use_header (),
- NULL);
+ data->dialog = g_object_new (GTK_TYPE_DIALOG,
+ "transient-for", GTK_WINDOW (window),
+ "modal", TRUE,
+ "use-header-bar", _gtk_settings_get_dialogs_use_header (),
+ NULL);
gtk_box_append (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (data->dialog))), table);
diff --git a/src/fr-application.c b/src/fr-application.c
index 33227d0b..b7d4ecb6 100644
--- a/src/fr-application.c
+++ b/src/fr-application.c
@@ -28,7 +28,6 @@
#include <glib/gi18n.h>
#include <gtk/gtk.h>
#include <glib/gprintf.h>
-#include <handy.h>
#include "file-utils.h"
#include "fr-application.h"
#include "fr-application-menu.h"
@@ -489,10 +488,6 @@ fr_application_startup (GApplication *application)
"gtk-shell-shows-menubar", &shell_shows_menubar,
NULL);
- hdy_init ();
- hdy_style_manager_set_color_scheme (hdy_style_manager_get_default (),
- HDY_COLOR_SCHEME_PREFER_LIGHT);
-
if (shell_shows_menubar)
fr_initialize_app_menubar (application);
else
@@ -508,18 +503,12 @@ static GOptionContext *
fr_application_create_option_context (void)
{
GOptionContext *context;
- static gsize initialized = FALSE;
context = g_option_context_new (N_("— Create and modify an archive"));
g_option_context_set_translation_domain (context, GETTEXT_PACKAGE);
g_option_context_add_main_entries (context, options, GETTEXT_PACKAGE);
g_option_context_set_ignore_unknown_options (context, TRUE);
- if (g_once_init_enter (&initialized)) {
- g_option_context_add_group (context, gtk_get_option_group (TRUE));
- g_once_init_leave (&initialized, TRUE);
- }
-
return context;
}
@@ -528,9 +517,6 @@ static int
fr_application_command_line_finished (GApplication *application,
int status)
{
- if (status == EXIT_SUCCESS)
- gdk_notify_startup_complete ();
-
/* reset arguments */
remaining_args = NULL;
@@ -725,8 +711,6 @@ fr_application_activate (GApplication *application)
if (! fr_window_is_batch_mode (FR_WINDOW (link->data)))
gtk_widget_show (GTK_WIDGET (link->data));
}
-
- gdk_notify_startup_complete ();
}
diff --git a/src/fr-file-selector-dialog.c b/src/fr-file-selector-dialog.c
index 91bb5dc7..d1360a31 100644
--- a/src/fr-file-selector-dialog.c
+++ b/src/fr-file-selector-dialog.c
@@ -24,7 +24,6 @@
#include "gio-utils.h"
#include "glib-utils.h"
#include "gtk-utils.h"
-#include "gth-icon-cache.h"
#define GET_WIDGET(x) (_gtk_builder_get_widget (self->builder, (x)))
@@ -102,7 +101,6 @@ struct _FrFileSelectorDialog {
GtkWidget *extra_widget;
GFile *current_folder;
LoadData *current_operation;
- GthIconCache *icon_cache;
GSettings *settings;
gboolean show_hidden;
GSimpleActionGroup *action_map;
@@ -151,56 +149,7 @@ set_current_folder (FrFileSelectorDialog *self,
gtk_editable_set_text (GTK_EDITABLE (GET_WIDGET ("location_entry")), folder_name);
g_free (folder_name);
- gtk_places_sidebar_set_location (GTK_PLACES_SIDEBAR (GET_WIDGET ("places_sidebar")), folder);
-}
-
-
-/* Taken from the Gtk+ file gtkfilechooserdefault.c
- * Copyright (C) 2003, Red Hat, Inc.
- *
- * Changed by File-Roller authors
- *
- * Guesses a size based upon font sizes */
-static int
-get_font_size (GtkWidget *widget)
-{
- GtkStyleContext *context;
- GtkStateFlags state;
- int font_size;
- GdkScreen *screen;
- double resolution;
- PangoFontDescription *font;
-
- context = gtk_widget_get_style_context (widget);
- state = gtk_widget_get_state_flags (widget);
-
- screen = gtk_widget_get_screen (widget);
- if (screen) {
- resolution = gdk_screen_get_resolution (screen);
- if (resolution < 0.0) /* will be -1 if the resolution is not defined in the GdkScreen */
- resolution = 96.0;
- }
- else
- resolution = 96.0; /* wheeee */
-
- gtk_style_context_get (context, state, "font", &font, NULL);
- font_size = pango_font_description_get_size (font);
- font_size = PANGO_PIXELS (font_size) * resolution / 72.0;
-
- return font_size;
-}
-
-
-static void
-find_good_window_size_from_style (GtkWidget *widget,
- int *width,
- int *height)
-{
- int font_size;
-
- font_size = get_font_size (widget);
- *width = font_size * FILE_LIST_CHARS;
- *height = font_size * FILE_LIST_LINES;
+ //gtk_places_sidebar_set_location (GTK_PLACES_SIDEBAR (GET_WIDGET ("places_sidebar")), folder);
}
@@ -218,7 +167,8 @@ fr_file_selector_dialog_get_default_size (FrFileSelectorDialog *self,
return;
}
- find_good_window_size_from_style (GTK_WIDGET (self), default_width, default_height);
+ *default_width = 300;
+ *default_height = 300;
if ((self->extra_widget != NULL) && gtk_widget_get_visible (self->extra_widget)) {
GtkRequisition req;
@@ -244,41 +194,19 @@ static void
fr_file_selector_dialog_realize (GtkWidget *widget)
{
FrFileSelectorDialog *self;
- GIcon *icon;
int sidebar_size;
GTK_WIDGET_CLASS (fr_file_selector_dialog_parent_class)->realize (widget);
self = FR_FILE_SELECTOR_DIALOG (widget);
-
- self->icon_cache = gth_icon_cache_new_for_widget (GTK_WIDGET (self), GTK_ICON_SIZE_MENU);
- icon = g_content_type_get_icon ("text/plain");
- gth_icon_cache_set_fallback (self->icon_cache, icon);
- g_object_unref (icon);
-
_fr_file_selector_dialog_update_size (self);
-
sidebar_size = g_settings_get_int (self->settings, PREF_FILE_SELECTOR_SIDEBAR_SIZE);
if (sidebar_size <= 0)
- sidebar_size = get_font_size (widget) * SIDEBAR_CHARS;
+ sidebar_size = 300;
gtk_paned_set_position (GTK_PANED (GET_WIDGET ("main_paned")), sidebar_size);
}
-static void
-fr_file_selector_dialog_unrealize (GtkWidget *widget)
-{
- FrFileSelectorDialog *self;
-
- self = FR_FILE_SELECTOR_DIALOG (widget);
-
- gth_icon_cache_free (self->icon_cache);
- self->icon_cache = NULL;
-
- GTK_WIDGET_CLASS (fr_file_selector_dialog_parent_class)->unrealize (widget);
-}
-
-
static void
fr_file_selector_dialog_unmap (GtkWidget *widget)
{
@@ -288,7 +216,7 @@ fr_file_selector_dialog_unmap (GtkWidget *widget)
self = FR_FILE_SELECTOR_DIALOG (widget);
- gtk_window_get_size (GTK_WINDOW (self), &width, &height);
+ gtk_widget_get_size_request (GTK_WIDGET (self), &width, &height);
g_settings_set (self->settings, PREF_FILE_SELECTOR_WINDOW_SIZE, "(ii)", width, height);
g_settings_set_boolean (self->settings, PREF_FILE_SELECTOR_SHOW_HIDDEN, self->show_hidden);
g_settings_set_int (self->settings,
@@ -314,7 +242,6 @@ fr_file_selector_dialog_class_init (FrFileSelectorDialogClass *klass)
widget_class = (GtkWidgetClass *) klass;
widget_class->realize = fr_file_selector_dialog_realize;
- widget_class->unrealize = fr_file_selector_dialog_unrealize;
widget_class->unmap = fr_file_selector_dialog_unmap;
}
@@ -326,36 +253,36 @@ files_name_column_sort_func (GtkTreeModel *model,
gpointer user_data)
{
GtkSortType sort_order;
- char *key_a;
- char *key_b;
- gboolean is_folder_a;
- gboolean is_folder_b;
- gint result;
+ char *key_a;
+ char *key_b;
+ gboolean is_folder_a;
+ gboolean is_folder_b;
+ gint result;
gtk_tree_sortable_get_sort_column_id (GTK_TREE_SORTABLE (model), NULL, &sort_order);
- gtk_tree_model_get (model, a,
- FILE_LIST_COLUMN_NAME_ORDER, &key_a,
- FILE_LIST_COLUMN_IS_FOLDER, &is_folder_a,
- -1);
- gtk_tree_model_get (model, b,
- FILE_LIST_COLUMN_NAME_ORDER, &key_b,
- FILE_LIST_COLUMN_IS_FOLDER, &is_folder_b,
- -1);
-
- if (is_folder_a == is_folder_b) {
- result = strcmp (key_a, key_b);
- }
- else {
- result = is_folder_a ? -1 : 1;
- if (sort_order == GTK_SORT_DESCENDING)
- result = -1 * result;
- }
-
- g_free (key_a);
- g_free (key_b);
-
- return result;
+ gtk_tree_model_get (model, a,
+ FILE_LIST_COLUMN_NAME_ORDER, &key_a,
+ FILE_LIST_COLUMN_IS_FOLDER, &is_folder_a,
+ -1);
+ gtk_tree_model_get (model, b,
+ FILE_LIST_COLUMN_NAME_ORDER, &key_b,
+ FILE_LIST_COLUMN_IS_FOLDER, &is_folder_b,
+ -1);
+
+ if (is_folder_a == is_folder_b) {
+ result = strcmp (key_a, key_b);
+ }
+ else {
+ result = is_folder_a ? -1 : 1;
+ if (sort_order == GTK_SORT_DESCENDING)
+ result = -1 * result;
+ }
+
+ g_free (key_a);
+ g_free (key_b);
+
+ return result;
}
@@ -366,46 +293,46 @@ files_size_column_sort_func (GtkTreeModel *model,
gpointer user_data)
{
GtkSortType sort_order;
- char *key_a;
- char *key_b;
- gint64 size_a;
- gint64 size_b;
- gboolean is_folder_a;
- gboolean is_folder_b;
- int result;
-
- gtk_tree_sortable_get_sort_column_id (GTK_TREE_SORTABLE (model), NULL, &sort_order);
-
- gtk_tree_model_get (model, a,
- FILE_LIST_COLUMN_NAME_ORDER, &key_a,
- FILE_LIST_COLUMN_SIZE_ORDER, &size_a,
- FILE_LIST_COLUMN_IS_FOLDER, &is_folder_a,
- -1);
- gtk_tree_model_get (model, b,
- FILE_LIST_COLUMN_NAME_ORDER, &key_b,
- FILE_LIST_COLUMN_SIZE_ORDER, &size_b,
- FILE_LIST_COLUMN_IS_FOLDER, &is_folder_b,
- -1);
-
- if (is_folder_a == is_folder_b) {
- if (is_folder_a) {
- result = strcmp (key_a, key_b);
- if (sort_order == GTK_SORT_DESCENDING)
- result = -1 * result;
- }
- else
- result = size_a - size_b;
- }
- else {
- result = is_folder_a ? -1 : 1;
- if (sort_order == GTK_SORT_DESCENDING)
- result = -1 * result;
- }
-
- g_free (key_a);
- g_free (key_b);
-
- return result;
+ char *key_a;
+ char *key_b;
+ gint64 size_a;
+ gint64 size_b;
+ gboolean is_folder_a;
+ gboolean is_folder_b;
+ int result;
+
+ gtk_tree_sortable_get_sort_column_id (GTK_TREE_SORTABLE (model), NULL, &sort_order);
+
+ gtk_tree_model_get (model, a,
+ FILE_LIST_COLUMN_NAME_ORDER, &key_a,
+ FILE_LIST_COLUMN_SIZE_ORDER, &size_a,
+ FILE_LIST_COLUMN_IS_FOLDER, &is_folder_a,
+ -1);
+ gtk_tree_model_get (model, b,
+ FILE_LIST_COLUMN_NAME_ORDER, &key_b,
+ FILE_LIST_COLUMN_SIZE_ORDER, &size_b,
+ FILE_LIST_COLUMN_IS_FOLDER, &is_folder_b,
+ -1);
+
+ if (is_folder_a == is_folder_b) {
+ if (is_folder_a) {
+ result = strcmp (key_a, key_b);
+ if (sort_order == GTK_SORT_DESCENDING)
+ result = -1 * result;
+ }
+ else
+ result = size_a - size_b;
+ }
+ else {
+ result = is_folder_a ? -1 : 1;
+ if (sort_order == GTK_SORT_DESCENDING)
+ result = -1 * result;
+ }
+
+ g_free (key_a);
+ g_free (key_b);
+
+ return result;
}
@@ -416,33 +343,33 @@ files_modified_column_sort_func (GtkTreeModel *model,
gpointer user_data)
{
GtkSortType sort_order;
- glong modified_a;
- glong modified_b;
- gboolean is_folder_a;
- gboolean is_folder_b;
- int result;
-
- gtk_tree_sortable_get_sort_column_id (GTK_TREE_SORTABLE (model), NULL, &sort_order);
-
- gtk_tree_model_get (model, a,
- FILE_LIST_COLUMN_MODIFIED_ORDER, &modified_a,
- FILE_LIST_COLUMN_IS_FOLDER, &is_folder_a,
- -1);
- gtk_tree_model_get (model, b,
- FILE_LIST_COLUMN_MODIFIED_ORDER, &modified_b,
- FILE_LIST_COLUMN_IS_FOLDER, &is_folder_b,
- -1);
-
- if (is_folder_a == is_folder_b) {
- result = modified_a - modified_b;
- }
- else {
- result = is_folder_a ? -1 : 1;
- if (sort_order == GTK_SORT_DESCENDING)
- result = -1 * result;
- }
-
- return result;
+ glong modified_a;
+ glong modified_b;
+ gboolean is_folder_a;
+ gboolean is_folder_b;
+ int result;
+
+ gtk_tree_sortable_get_sort_column_id (GTK_TREE_SORTABLE (model), NULL, &sort_order);
+
+ gtk_tree_model_get (model, a,
+ FILE_LIST_COLUMN_MODIFIED_ORDER, &modified_a,
+ FILE_LIST_COLUMN_IS_FOLDER, &is_folder_a,
+ -1);
+ gtk_tree_model_get (model, b,
+ FILE_LIST_COLUMN_MODIFIED_ORDER, &modified_b,
+ FILE_LIST_COLUMN_IS_FOLDER, &is_folder_b,
+ -1);
+
+ if (is_folder_a == is_folder_b) {
+ result = modified_a - modified_b;
+ }
+ else {
+ result = is_folder_a ? -1 : 1;
+ if (sort_order == GTK_SORT_DESCENDING)
+ result = -1 * result;
+ }
+
+ return result;
}
@@ -499,9 +426,9 @@ is_selected_cellrenderertoggle_toggled_cb (GtkCellRendererToggle *cell_renderer,
return;
}
- gtk_tree_model_get (GTK_TREE_MODEL (list_store), &iter,
- FILE_LIST_COLUMN_IS_SELECTED, &is_selected,
- -1);
+ gtk_tree_model_get (GTK_TREE_MODEL (list_store), &iter,
+ FILE_LIST_COLUMN_IS_SELECTED, &is_selected,
+ -1);
gtk_list_store_set (list_store, &iter,
FILE_LIST_COLUMN_IS_SELECTED, ! is_selected,
-1);
@@ -528,14 +455,14 @@ files_treeview_row_activated_cb (GtkTreeView *tree_view,
if (! gtk_tree_model_get_iter (tree_model, &iter, path))
return;
- gtk_tree_model_get (tree_model, &iter,
- FILE_LIST_COLUMN_FILE, &file,
- FILE_LIST_COLUMN_IS_FOLDER, &is_folder,
- -1);
- if (is_folder)
- fr_file_selector_dialog_set_current_folder (self, file);
+ gtk_tree_model_get (tree_model, &iter,
+ FILE_LIST_COLUMN_FILE, &file,
+ FILE_LIST_COLUMN_IS_FOLDER, &is_folder,
+ -1);
+ if (is_folder)
+ fr_file_selector_dialog_set_current_folder (self, file);
- g_object_unref (file);
+ g_object_unref (file);
}
@@ -559,7 +486,7 @@ go_up_button_clicked_cb (GtkButton *button,
}
-static void
+/*static void
places_sidebar_open_location_cb (GtkPlacesSidebar *sidebar,
GFile *location,
GtkPlacesOpenFlags open_flags,
@@ -568,22 +495,19 @@ places_sidebar_open_location_cb (GtkPlacesSidebar *sidebar,
FrFileSelectorDialog *self = user_data;
fr_file_selector_dialog_set_current_folder (self, location);
-}
+ }*/
static gboolean
-files_treeview_button_press_event_cb (GtkWidget *widget,
- GdkEventButton *event,
- gpointer user_data)
+files_treeview_events_cb (GtkEventControllerLegacy *controller,
+ GdkEvent *event,
+ gpointer user_data)
{
FrFileSelectorDialog *self = user_data;
+ double x, y;
- if (event->button == 3) {
- int wx;
- int wy;
- gtk_tree_view_convert_bin_window_to_widget_coords (GTK_TREE_VIEW (widget), event->x,
event->y, &wx, &wy);
- _gtk_popover_popup_at_position (self->file_context_menu, wx, wy);
-
+ if (gdk_event_triggers_context_menu (event) && gdk_event_get_position (event, &x, &y)) {
+ _gtk_popover_popup_at_position (self->file_context_menu, x, y);
return TRUE;
}
@@ -604,8 +528,8 @@ select_all_files (FrFileSelectorDialog *self,
do {
gtk_list_store_set (list_store, &iter,
- FILE_LIST_COLUMN_IS_SELECTED, value,
- -1);
+ FILE_LIST_COLUMN_IS_SELECTED, value,
+ -1);
}
while (gtk_tree_model_iter_next (GTK_TREE_MODEL (list_store), &iter));
@@ -624,8 +548,8 @@ select_all_activate_cb (GSimpleAction *action,
static void
unselect_all_activate_cb (GSimpleAction *action,
- GVariant *state,
- gpointer user_data)
+ GVariant *state,
+ gpointer user_data)
{
select_all_files (FR_FILE_SELECTOR_DIALOG (user_data), FALSE);
}
@@ -639,8 +563,8 @@ _set_current_folder (FrFileSelectorDialog *self,
static void
show_hidden_files_toggled_cb (GSimpleAction *action,
- GVariant *state,
- gpointer user_data)
+ GVariant *state,
+ gpointer user_data)
{
FrFileSelectorDialog *self = user_data;
GFile *folder;
@@ -694,14 +618,13 @@ fr_file_selector_dialog_init (FrFileSelectorDialog *self)
{
self->current_folder = NULL;
self->builder = gtk_builder_new_from_resource (FILE_ROLLER_RESOURCE_UI_PATH "file-selector.ui");
- self->icon_cache = NULL;
self->settings = g_settings_new ("org.gnome.FileRoller.FileSelector");
self->show_hidden = g_settings_get_boolean (self->settings, PREF_FILE_SELECTOR_SHOW_HIDDEN);
self->action_map = g_simple_action_group_new ();
- self->file_context_menu = GTK_POPOVER (gtk_popover_new_from_model (GET_WIDGET ("files_treeview"),
G_MENU_MODEL (gtk_builder_get_object (self->builder, "file_list_context_menu_model"))));
+ self->file_context_menu = GTK_POPOVER (gtk_popover_menu_new_from_model (G_MENU_MODEL
(gtk_builder_get_object (self->builder, "file_list_context_menu_model"))));
- gtk_container_set_border_width (GTK_CONTAINER (self), 5);
- _gtk_box_append_expanded (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (self))), GET_WIDGET
("content"));
+ _gtk_widget_set_margin (GTK_WIDGET (self), 5);
+ _gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (self))), GET_WIDGET
("content"), TRUE, TRUE);
gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (GET_WIDGET ("files_liststore")),
FILE_LIST_COLUMN_NAME, files_name_column_sort_func, self, NULL);
gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (GET_WIDGET ("files_liststore")),
FILE_LIST_COLUMN_SIZE, files_size_column_sort_func, self, NULL);
@@ -720,14 +643,17 @@ fr_file_selector_dialog_init (FrFileSelectorDialog *self)
"clicked",
G_CALLBACK (go_up_button_clicked_cb),
self);
- g_signal_connect (GTK_PLACES_SIDEBAR (GET_WIDGET ("places_sidebar")),
+ /*g_signal_connect (GTK_PLACES_SIDEBAR (GET_WIDGET ("places_sidebar")),
"open-location",
G_CALLBACK (places_sidebar_open_location_cb),
+ self);*/
+
+ GtkEventController *event_controller = gtk_event_controller_legacy_new ();
+ g_signal_connect (event_controller,
+ "event",
+ G_CALLBACK (files_treeview_events_cb),
self);
- g_signal_connect (GTK_TREE_VIEW (GET_WIDGET ("files_treeview")),
- "button-press-event",
- G_CALLBACK (files_treeview_button_press_event_cb),
- self);
+ gtk_widget_add_controller (GET_WIDGET ("files_treeview"), GTK_EVENT_CONTROLLER (event_controller));
g_action_map_add_action_entries (G_ACTION_MAP (self->action_map),
dlg_entries, G_N_ELEMENTS (dlg_entries),
@@ -825,7 +751,7 @@ folder_mount_enclosing_volume_ready_cb (GObject *source_object,
static void
get_folder_content_done_cb (GError *error,
- gpointer user_data)
+ gpointer user_data)
{
LoadData *load_data = user_data;
FrFileSelectorDialog *self = load_data->dialog;
@@ -879,7 +805,7 @@ get_folder_content_done_cb (GError *error,
gtk_list_store_clear (list_store);
for (scan = load_data->files; scan; scan = scan->next) {
FileInfo *file_info = scan->data;
- GdkPixbuf *icon_pixbuf;
+ GIcon *icon;
char *size;
GTimeVal timeval;
GDateTime *datetime;
@@ -892,7 +818,7 @@ get_folder_content_done_cb (GError *error,
gtk_list_store_append (list_store, &iter);
- icon_pixbuf = gth_icon_cache_get_pixbuf (self->icon_cache, g_file_info_get_icon
(file_info->info));
+ icon = g_file_info_get_icon (file_info->info);
size = g_format_size (g_file_info_get_size (file_info->info));
g_file_info_get_modification_time (file_info->info, &timeval);
datetime = g_date_time_new_from_timeval_local (&timeval);
@@ -901,7 +827,7 @@ get_folder_content_done_cb (GError *error,
is_folder = (g_file_info_get_file_type (file_info->info) == G_FILE_TYPE_DIRECTORY);
gtk_list_store_set (list_store, &iter,
- FILE_LIST_COLUMN_ICON, icon_pixbuf,
+ FILE_LIST_COLUMN_ICON, icon,
FILE_LIST_COLUMN_NAME, g_file_info_get_display_name (file_info->info),
FILE_LIST_COLUMN_SIZE, (is_folder ? "" : size),
FILE_LIST_COLUMN_MODIFIED, modified,
@@ -917,7 +843,7 @@ get_folder_content_done_cb (GError *error,
g_free (modified);
g_date_time_unref (datetime);
g_free (size);
- _g_object_unref (icon_pixbuf);
+ _g_object_unref (icon);
}
gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (GET_WIDGET ("files_liststore")),
sort_column_id, sort_order);
@@ -952,19 +878,19 @@ _get_folder_list (LoadData *load_data)
g_directory_foreach_child (load_data->folder,
FALSE,
TRUE,
- (G_FILE_ATTRIBUTE_STANDARD_TYPE ","
- G_FILE_ATTRIBUTE_STANDARD_NAME ","
- G_FILE_ATTRIBUTE_STANDARD_SIZE ","
- G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME ","
- G_FILE_ATTRIBUTE_STANDARD_ICON ","
- G_FILE_ATTRIBUTE_STANDARD_IS_HIDDEN ","
- G_FILE_ATTRIBUTE_TIME_MODIFIED ","
- G_FILE_ATTRIBUTE_TIME_MODIFIED_USEC),
- load_data->cancellable,
- NULL,
- get_folder_content_for_each_child_cb,
- get_folder_content_done_cb,
- load_data);
+ (G_FILE_ATTRIBUTE_STANDARD_TYPE ","
+ G_FILE_ATTRIBUTE_STANDARD_NAME ","
+ G_FILE_ATTRIBUTE_STANDARD_SIZE ","
+ G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME ","
+ G_FILE_ATTRIBUTE_STANDARD_ICON ","
+ G_FILE_ATTRIBUTE_STANDARD_IS_HIDDEN ","
+ G_FILE_ATTRIBUTE_TIME_MODIFIED ","
+ G_FILE_ATTRIBUTE_TIME_MODIFIED_USEC),
+ load_data->cancellable,
+ NULL,
+ get_folder_content_for_each_child_cb,
+ get_folder_content_done_cb,
+ load_data);
}
@@ -990,7 +916,6 @@ fr_file_selector_dialog_set_current_folder (FrFileSelectorDialog *self,
GFile *folder)
{
g_return_if_fail (folder != NULL);
-
_set_current_folder (self, folder, NULL);
}
@@ -1034,15 +959,15 @@ fr_file_selector_dialog_get_selected_files (FrFileSelectorDialog *self)
GFile *file;
gboolean is_selected;
- gtk_tree_model_get (GTK_TREE_MODEL (list_store), &iter,
- FILE_LIST_COLUMN_FILE, &file,
- FILE_LIST_COLUMN_IS_SELECTED, &is_selected,
- -1);
+ gtk_tree_model_get (GTK_TREE_MODEL (list_store), &iter,
+ FILE_LIST_COLUMN_FILE, &file,
+ FILE_LIST_COLUMN_IS_SELECTED, &is_selected,
+ -1);
- if (is_selected)
- list = g_list_prepend (list, g_object_ref (file));
+ if (is_selected)
+ list = g_list_prepend (list, g_object_ref (file));
- g_object_unref (file);
+ g_object_unref (file);
}
while (gtk_tree_model_iter_next (GTK_TREE_MODEL (list_store), &iter));
diff --git a/src/fr-init.c b/src/fr-init.c
index fc8aa44b..2eaf7a6a 100644
--- a/src/fr-init.c
+++ b/src/fr-init.c
@@ -605,15 +605,7 @@ fr_initialize_data (void)
if (initialized)
return;
initialized = TRUE;
-
- ProgramsCache = g_hash_table_new_full (g_str_hash,
- g_str_equal,
- g_free,
- NULL);
-
- gtk_icon_theme_append_search_path (gtk_icon_theme_get_default (),
- PRIVDATADIR G_DIR_SEPARATOR_S "icons");
-
+ ProgramsCache = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
register_archives ();
compute_supported_archive_types ();
}
diff --git a/src/fr-location-bar.c b/src/fr-location-bar.c
index 6adb384b..c5e7952e 100644
--- a/src/fr-location-bar.c
+++ b/src/fr-location-bar.c
@@ -31,70 +31,12 @@ struct _FrLocationBar {
G_DEFINE_TYPE (FrLocationBar, fr_location_bar, GTK_TYPE_BOX)
-static gboolean
-fr_location_bar_draw (GtkWidget *widget,
- cairo_t *cr)
-{
- GtkStyleContext *context;
- guint border_width;
-
- context = gtk_widget_get_style_context (widget);
- border_width = gtk_container_get_border_width (GTK_CONTAINER (widget));
- gtk_render_background (context,
- cr,
- border_width,
- border_width,
- gtk_widget_get_allocated_width (widget) - 2 * border_width,
- gtk_widget_get_allocated_height (widget) - 2 * border_width);
- gtk_render_frame (context,
- cr,
- border_width,
- border_width,
- gtk_widget_get_allocated_width (widget) - 2 * border_width,
- gtk_widget_get_allocated_height (widget) - 2 * border_width);
-
- GTK_WIDGET_CLASS (fr_location_bar_parent_class)->draw (widget, cr);
-
- return FALSE;
-}
-
-
-static void
-fr_location_bar_class_init (FrLocationBarClass *klass)
-{
- GtkWidgetClass *widget_class;
-
- widget_class = GTK_WIDGET_CLASS (klass);
- widget_class->draw = fr_location_bar_draw;
-}
-
-
static const char *css =
".location-bar {\n"
" border-width: 0 0 1px 0;\n" /* remove the top border, already provided by the headerbar */
"}";
-static void
-fr_location_bar_init (FrLocationBar *self)
-{
- GtkStyleContext *style_context;
- GtkCssProvider *css_provider;
-
- gtk_orientable_set_orientation (GTK_ORIENTABLE (self), GTK_ORIENTATION_HORIZONTAL);
- gtk_box_set_spacing (GTK_BOX (self), 6);
-
- style_context = gtk_widget_get_style_context (GTK_WIDGET (self));
- gtk_style_context_add_class (style_context, "toolbar");
- gtk_style_context_add_class (style_context, "primary-toolbar");
- gtk_style_context_add_class (style_context, "location-bar");
-
- css_provider = gtk_css_provider_new ();
- gtk_css_provider_load_from_data (css_provider, css, -1, NULL);
- gtk_style_context_add_provider_for_screen (gdk_screen_get_default (),
- GTK_STYLE_PROVIDER (css_provider),
- GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
-}
GtkWidget *
diff --git a/src/fr-new-archive-dialog.c b/src/fr-new-archive-dialog.c
index 9739ea31..4322eab1 100644
--- a/src/fr-new-archive-dialog.c
+++ b/src/fr-new-archive-dialog.c
@@ -204,7 +204,7 @@ _fr_new_archive_dialog_construct (FrNewArchiveDialog *self,
gtk_window_set_transient_for (GTK_WINDOW (self), parent);
gtk_window_set_resizable (GTK_WINDOW (self), FALSE);
- gtk_container_set_border_width (GTK_CONTAINER (self), 5);
+ _gtk_widget_set_margin (GTK_WIDGET (self), 5);
self->builder = gtk_builder_new_from_resource (FILE_ROLLER_RESOURCE_UI_PATH "new-archive-dialog.ui");
@@ -247,7 +247,7 @@ _fr_new_archive_dialog_construct (FrNewArchiveDialog *self,
if (folder == NULL)
folder = _g_file_get_home ();
- gtk_file_chooser_set_current_folder_file (GTK_FILE_CHOOSER (GET_WIDGET ("parent_filechooserbutton")),
folder, NULL);
+ gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (GET_WIDGET ("parent_filechooserbutton")),
folder, NULL);
gtk_expander_set_expanded (GTK_EXPANDER (GET_WIDGET ("other_options_expander")),
g_settings_get_boolean (self->settings, PREF_NEW_EXPAND_OPTIONS));
@@ -326,9 +326,70 @@ fr_new_archive_dialog_set_files_to_add (FrNewArchiveDialog *self,
}
-GFile *
+/* -- fr_new_archive_dialog_get_file -- */
+
+
+typedef struct {
+ FrNewArchiveDialog *dialog;
+ FrNewArchiveDialogCallback callback;
+ GFile *file;
+ int n_format;
+ gpointer user_data;
+} OverwriteDialogData;
+
+
+static void
+overwrite_dialog_data_free (OverwriteDialogData *data)
+{
+ _g_object_unref (data->file);
+ g_free (data);
+}
+
+
+static void
+overwrite_dialog_response_cb (GtkDialog *dialog,
+ int response_id,
+ gpointer user_data)
+{
+ OverwriteDialogData *data = user_data;
+ gboolean overwrite = (response_id == GTK_RESPONSE_OK);
+
+ gtk_window_destroy (GTK_WINDOW (dialog));
+
+ if (overwrite) {
+ GError *error = NULL;
+
+ g_file_delete (data->file, NULL, &error);
+ if (error != NULL) {
+ GtkWidget *dialog = _gtk_error_dialog_new (
+ GTK_WINDOW (data->dialog),
+ GTK_DIALOG_MODAL,
+ NULL,
+ _("Could not delete the old archive."),
+ "%s",
+ error->message);
+ _gtk_dialog_run (GTK_DIALOG (dialog));
+
+ g_error_free (error);
+
+ data->callback (data->dialog, NULL, NULL, data->user_data);
+ overwrite_dialog_data_free (data);
+ return;
+ }
+ }
+
+ data->callback (data->dialog,
+ data->file,
+ mime_type_desc[data->n_format].mime_type,
+ data->user_data);
+ overwrite_dialog_data_free (data);
+}
+
+
+void
fr_new_archive_dialog_get_file (FrNewArchiveDialog *self,
- const char **mime_type)
+ FrNewArchiveDialogCallback callback,
+ gpointer user_data)
{
const char *basename;
int n_format;
@@ -336,85 +397,76 @@ fr_new_archive_dialog_get_file (FrNewArchiveDialog *self,
GFile *parent;
GFile *file;
GError *error = NULL;
- const char *file_mime_type;
GFileInfo *parent_info;
- GtkWidget *dialog;
/* Check whether the user entered a valid archive name. */
basename = gtk_editable_get_text (GTK_EDITABLE (GET_WIDGET ("filename_entry")));
if ((basename == NULL) || (*basename == '\0')) {
- GtkWidget *d;
-
- d = _gtk_error_dialog_new (GTK_WINDOW (self),
- GTK_DIALOG_MODAL,
- NULL,
- _("Could not create the archive"),
- "%s",
- _("You have to specify an archive name."));
- gtk_dialog_run (GTK_DIALOG (d));
- gtk_window_destroy (GTK_WINDOW (d));
-
- return NULL;
+ GtkWidget *msg_dialog = _gtk_error_dialog_new (
+ GTK_WINDOW (self),
+ GTK_DIALOG_MODAL,
+ NULL,
+ _("Could not create the archive"),
+ "%s",
+ _("You have to specify an archive name."));
+ _gtk_dialog_run (GTK_DIALOG (msg_dialog));
+
+ callback (self, NULL, NULL, user_data);
+ return;
}
- /* file */
+ /* File */
n_format = get_selected_format (self);
parent = gtk_file_chooser_get_file (GTK_FILE_CHOOSER (GET_WIDGET ("parent_filechooserbutton")));
if (parent == NULL) {
- GtkWidget *d;
-
- d = _gtk_error_dialog_new (GTK_WINDOW (self),
- GTK_DIALOG_MODAL,
- NULL,
- _("Could not create the archive"),
- "%s",
- _("You have to specify an archive name."));
- gtk_dialog_run (GTK_DIALOG (d));
- gtk_window_destroy (GTK_WINDOW (d));
-
- return NULL;
+ GtkWidget *msg_dialog = _gtk_error_dialog_new (
+ GTK_WINDOW (self),
+ GTK_DIALOG_MODAL,
+ NULL,
+ _("Could not create the archive"),
+ "%s",
+ _("You have to specify an archive name."));
+ _gtk_dialog_run (GTK_DIALOG (msg_dialog));
+
+ callback (self, NULL, NULL, user_data);
+ return;
}
basename_ext = g_strconcat (basename, mime_type_desc[n_format].default_ext, NULL);
file = g_file_get_child_for_display_name (parent, basename_ext, &error);
if (file == NULL) {
- dialog = _gtk_error_dialog_new (GTK_WINDOW (self),
- GTK_DIALOG_MODAL,
- NULL,
- _("Could not create the archive"),
- "%s",
- error->message);
- gtk_dialog_run (GTK_DIALOG (dialog));
-
- gtk_window_destroy (GTK_WINDOW (dialog));
+ GtkWidget *msg_dialog = _gtk_error_dialog_new (
+ GTK_WINDOW (self),
+ GTK_DIALOG_MODAL,
+ NULL,
+ _("Could not create the archive"),
+ "%s",
+ error->message);
+ _gtk_dialog_run (GTK_DIALOG (msg_dialog));
+
g_error_free (error);
g_free (basename_ext);
g_object_unref (parent);
- return NULL;
+ callback (self, NULL, NULL, user_data);
+ return;
}
g_free (basename_ext);
- /* mime type */
-
- file_mime_type = mime_type_desc[n_format].mime_type;
- if (mime_type != NULL)
- *mime_type = file_mime_type;
-
- /* check permissions */
+ /* Check permissions */
parent_info = g_file_query_info (parent,
- (G_FILE_ATTRIBUTE_ACCESS_CAN_READ ","
- G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE ","
- G_FILE_ATTRIBUTE_ACCESS_CAN_EXECUTE","
- G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME),
- 0,
- NULL,
- &error);
+ (G_FILE_ATTRIBUTE_ACCESS_CAN_READ ","
+ G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE ","
+ G_FILE_ATTRIBUTE_ACCESS_CAN_EXECUTE","
+ G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME),
+ 0,
+ NULL,
+ &error);
g_object_unref (parent);
@@ -425,119 +477,115 @@ fr_new_archive_dialog_get_file (FrNewArchiveDialog *self,
g_object_unref (parent_info);
g_object_unref (file);
- return NULL;
+ callback (self, NULL, NULL, user_data);
+ return;
}
if (g_file_info_has_attribute (parent_info, G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE) &&
- ! g_file_info_get_attribute_boolean (parent_info,
G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE)) {
- dialog = _gtk_error_dialog_new (GTK_WINDOW (self),
- GTK_DIALOG_MODAL,
- NULL,
- _("Could not create the archive"),
- "%s",
- _("You don’t have permission to create an archive in this
folder"));
- gtk_dialog_run (GTK_DIALOG (dialog));
-
- gtk_window_destroy (GTK_WINDOW (dialog));
+ ! g_file_info_get_attribute_boolean (parent_info, G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE))
+ {
+ GtkWidget *msg_dialog = _gtk_error_dialog_new (
+ GTK_WINDOW (self),
+ GTK_DIALOG_MODAL,
+ NULL,
+ _("Could not create the archive"),
+ "%s",
+ _("You don’t have permission to create an archive in this folder"));
+ _gtk_dialog_run (GTK_DIALOG (msg_dialog));
+
g_object_unref (parent_info);
g_object_unref (file);
- return NULL;
+ callback (self, NULL, NULL, user_data);
+ return;
}
- /* check whehter the file is equal to the original file */
+ /* Check whehter the file is equal to the original file */
if ((self->original_file != NULL) && (g_file_equal (file, self->original_file))) {
- dialog = _gtk_error_dialog_new (GTK_WINDOW (self),
- GTK_DIALOG_MODAL,
- NULL,
- _("Could not create the archive"),
- "%s",
- _("New name is the same as old one, please type other
name."));
- gtk_dialog_run (GTK_DIALOG (dialog));
-
- gtk_window_destroy (GTK_WINDOW (dialog));
+ GtkWidget *msg_dialog = _gtk_error_dialog_new (
+ GTK_WINDOW (self),
+ GTK_DIALOG_MODAL,
+ NULL,
+ _("Could not create the archive"),
+ "%s",
+ _("New name is the same as old one, please type other name."));
+ _gtk_dialog_run (GTK_DIALOG (msg_dialog));
+
g_object_unref (parent_info);
g_object_unref (file);
- return NULL;
+ callback (self, NULL, NULL, user_data);
+ return;
}
- /* check whether the file is included in the files to add */
+ /* Check whether the file is included in the files to add. */
{
GList *scan;
for (scan = self->files_to_add; scan; scan = scan->next) {
if (_g_file_cmp_uris (G_FILE (scan->data), file) == 0) {
- dialog = _gtk_error_dialog_new (GTK_WINDOW (self),
- GTK_DIALOG_MODAL,
- NULL,
- _("Could not create the archive"),
- "%s",
- _("You can’t add an archive to itself."));
- gtk_dialog_run (GTK_DIALOG (dialog));
-
- gtk_window_destroy (GTK_WINDOW (dialog));
+ GtkWidget *msg_dialog = _gtk_error_dialog_new (
+ GTK_WINDOW (self),
+ GTK_DIALOG_MODAL,
+ NULL,
+ _("Could not create the archive"),
+ "%s",
+ _("You can’t add an archive to itself."));
+ _gtk_dialog_run (GTK_DIALOG (msg_dialog));
+
g_object_unref (parent_info);
g_object_unref (file);
- return NULL;
+ callback (self, NULL, NULL, user_data);
+ return;
}
}
}
- /* overwrite confirmation */
+ /* Overwrite confirmation. */
if (g_file_query_exists (file, NULL)) {
char *filename;
char *message;
char *secondary_message;
- gboolean overwrite;
filename = _g_file_get_display_basename (file);
message = g_strdup_printf (_("A file named “%s” already exists. Do you want to replace
it?"), filename);
secondary_message = g_strdup_printf (_("The file already exists in “%s”. Replacing it will
overwrite its contents."), g_file_info_get_display_name (parent_info));
- dialog = _gtk_message_dialog_new (GTK_WINDOW (self),
- GTK_DIALOG_MODAL,
- message,
- secondary_message,
- _GTK_LABEL_CANCEL, GTK_RESPONSE_CANCEL,
- _("_Replace"), GTK_RESPONSE_OK,
- NULL);
- overwrite = gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_OK;
-
- gtk_window_destroy (GTK_WINDOW (dialog));
+ GtkWidget *msg_dialog = _gtk_message_dialog_new (
+ GTK_WINDOW (self),
+ GTK_DIALOG_MODAL,
+ message,
+ secondary_message,
+ _GTK_LABEL_CANCEL, GTK_RESPONSE_CANCEL,
+ _("_Replace"), GTK_RESPONSE_OK,
+ NULL);
+
+ OverwriteDialogData *overwrite_data = g_new0 (OverwriteDialogData, 1);
+ overwrite_data->dialog = self;
+ overwrite_data->file = g_object_ref (file);
+ overwrite_data->n_format = n_format;
+ overwrite_data->callback = callback;
+ overwrite_data->user_data = user_data;
+ g_signal_connect (msg_dialog,
+ "response",
+ G_CALLBACK (overwrite_dialog_response_cb),
+ overwrite_data);
+ gtk_widget_show (GTK_WIDGET (msg_dialog));
+
g_free (secondary_message);
g_free (message);
g_free (filename);
-
- if (overwrite) {
- g_file_delete (file, NULL, &error);
- if (error != NULL) {
- dialog = _gtk_error_dialog_new (GTK_WINDOW (self),
- GTK_DIALOG_MODAL,
- NULL,
- _("Could not delete the old archive."),
- "%s",
- error->message);
- gtk_dialog_run (GTK_DIALOG (dialog));
-
- gtk_window_destroy (GTK_WINDOW (dialog));
- g_error_free (error);
- g_object_unref (parent_info);
- g_object_unref (file);
-
- return NULL;
- }
- }
- else
- g_clear_object (&file);
}
+ else
+ callback (self,
+ file,
+ mime_type_desc[n_format].mime_type,
+ user_data);
g_object_unref (parent_info);
-
- return file;
}
diff --git a/src/fr-new-archive-dialog.h b/src/fr-new-archive-dialog.h
index 270c51fc..89ef3f2e 100644
--- a/src/fr-new-archive-dialog.h
+++ b/src/fr-new-archive-dialog.h
@@ -32,6 +32,11 @@ typedef enum {
G_DECLARE_FINAL_TYPE (FrNewArchiveDialog, fr_new_archive_dialog, FR, NEW_ARCHIVE_DIALOG, GtkDialog)
+typedef void (*FrNewArchiveDialogCallback) (FrNewArchiveDialog *dialog,
+ GFile *file,
+ const char *mime_type,
+ gpointer user_data);
+
GtkWidget * fr_new_archive_dialog_new (const char *title,
GtkWindow *parent,
FrNewArchiveAction action,
@@ -46,12 +51,9 @@ GtkWidget * fr_new_archive_dialog_new (const char *
void fr_new_archive_dialog_set_files_to_add (FrNewArchiveDialog *dialog,
GList *file_list);
-/**
- * fr_new_archive_dialog_get_file:
- * Returns: (transfer full)
- */
-GFile * fr_new_archive_dialog_get_file (FrNewArchiveDialog *dialog,
- const char **mime_type);
+void fr_new_archive_dialog_get_file (FrNewArchiveDialog *dialog,
+ FrNewArchiveDialogCallback callback,
+ gpointer user_data);
const char * fr_new_archive_dialog_get_password (FrNewArchiveDialog *dialog);
gboolean fr_new_archive_dialog_get_encrypt_header (FrNewArchiveDialog *dialog);
int fr_new_archive_dialog_get_volume_size (FrNewArchiveDialog *dialog);
diff --git a/src/fr-window-actions-callbacks.c b/src/fr-window-actions-callbacks.c
index 379fed76..ae44ec53 100644
--- a/src/fr-window-actions-callbacks.c
+++ b/src/fr-window-actions-callbacks.c
@@ -318,8 +318,7 @@ fr_window_activate_open (GSimpleAction *action,
_GTK_LABEL_OPEN, GTK_RESPONSE_OK,
NULL);
gtk_dialog_set_default_response (GTK_DIALOG (file_sel), GTK_RESPONSE_OK);
- gtk_file_chooser_set_local_only (GTK_FILE_CHOOSER (file_sel), FALSE);
- gtk_file_chooser_set_current_folder_file (GTK_FILE_CHOOSER (file_sel), fr_window_get_open_default_dir
(window), NULL);
+ gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (file_sel), fr_window_get_open_default_dir
(window), NULL);
_gtk_dialog_add_to_window_group (GTK_DIALOG (file_sel));
gtk_window_set_modal (GTK_WINDOW (file_sel), TRUE);
diff --git a/src/fr-window.c b/src/fr-window.c
index c075cc5d..9ced9e2f 100644
--- a/src/fr-window.c
+++ b/src/fr-window.c
@@ -26,9 +26,6 @@
#include <gio/gio.h>
#include <gtk/gtk.h>
#include <gdk/gdk.h>
-#ifdef GDK_WINDOWING_X11
-# include <gdk/gdkx.h>
-#endif
#include <gdk/gdkkeysyms.h>
#include <gdk-pixbuf/gdk-pixbuf.h>
#include "dlg-batch-add.h"
@@ -38,9 +35,7 @@
#include "dlg-ask-password.h"
#include "dlg-package-installer.h"
#include "dlg-update.h"
-#include "eggtreemultidnd.h"
#include "fr-marshal.h"
-#include "fr-list-model.h"
#include "fr-location-bar.h"
#include "fr-archive.h"
#include "fr-command.h"
@@ -77,9 +72,6 @@
#define DEF_WIN_HEIGHT 480
#define DEF_SIDEBAR_WIDTH 200
-#define FILE_LIST_ICON_SIZE GTK_ICON_SIZE_LARGE_TOOLBAR
-#define DIR_TREE_ICON_SIZE GTK_ICON_SIZE_MENU
-
#define BAD_CHARS "/\\*"
#define XDS_FILENAME "xds.txt"
@@ -89,13 +81,7 @@
#define OCTET_ATOM gdk_atom_intern ("application/octet-stream", FALSE)
#define XFR_ATOM gdk_atom_intern ("XdndFileRoller0", FALSE)
-#define FR_CLIPBOARD (gdk_atom_intern_static_string ("_FILE_ROLLER_SPECIAL_CLIPBOARD"))
-#define FR_SPECIAL_URI_LIST (gdk_atom_intern_static_string ("application/file-roller-uri-list"))
-
-static GtkTargetEntry clipboard_targets[] = {
- { "application/file-roller-uri-list", 0, 1 }
-};
-
+/*
static GtkTargetEntry target_table[] = {
{ "XdndFileRoller0", 0, 0 },
{ "text/uri-list", 0, 1 },
@@ -104,7 +90,7 @@ static GtkTargetEntry target_table[] = {
static GtkTargetEntry folder_tree_targets[] = {
{ "XdndFileRoller0", 0, 0 },
{ "XdndDirectSave0", 0, 2 }
-};
+ };*/
typedef struct {
@@ -198,6 +184,20 @@ fr_clipboard_data_unref (FrClipboardData *clipboard_data)
}
+static FrClipboardData *
+fr_clipboard_data_dup (FrClipboardData *other)
+{
+ FrClipboardData *data;
+
+ data = fr_clipboard_data_new ();
+ data->files = _g_string_list_dup (other->files);
+ data->op = other->op;
+ data->base_dir = other->base_dir;
+
+ return data;
+}
+
+
static void
fr_clipboard_data_set_password (FrClipboardData *clipboard_data,
const char *password)
@@ -208,6 +208,8 @@ fr_clipboard_data_set_password (FrClipboardData *clipboard_data,
clipboard_data->password = g_strdup (password);
}
+/* Internal clipboard used to copy and paste files between File Roller windows. */
+static FrClipboardData *app_clipboard = NULL;
/**/
@@ -271,7 +273,6 @@ typedef struct {
gboolean give_focus_to_the_list;
gboolean single_click;
- GtkTreePath *path_clicked;
FrWindowSortMethod sort_method;
GtkSortType sort_type;
@@ -300,7 +301,6 @@ typedef struct {
gboolean populating_file_list;
FrClipboardData *clipboard_data;
- FrClipboardData *copy_data;
FrArchive *copy_from_archive;
GFile *saving_file;
@@ -359,16 +359,12 @@ typedef struct {
GSettings *settings_dialogs;
GSettings *settings_nautilus;
- gulong theme_changed_handler_id;
gboolean update_dropped_files;
gboolean batch_adding_one_file;
GtkWindow *load_error_parent_window;
gboolean showing_error_dialog;
- GthIconCache *list_icon_cache;
- GthIconCache *tree_icon_cache;
-
GFile *last_extraction_destination;
GList *last_extraction_files_first_level; /* GFile list */
} FrWindowPrivate;
@@ -404,30 +400,18 @@ fr_window_free_batch_data (FrWindow *window)
}
-static GdkAtom
-_fr_window_get_clipboard_name (FrWindow *window)
-{
-#ifdef GDK_WINDOWING_X11
- if (GDK_IS_X11_DISPLAY (gtk_widget_get_display (GTK_WIDGET (window))))
- return FR_CLIPBOARD;
-#endif
- return GDK_SELECTION_CLIPBOARD;
-}
-
-
static void
fr_window_clipboard_remove_file_list (FrWindow *window,
GList *file_list)
{
- FrWindowPrivate *private = fr_window_get_instance_private (window);
GList *scan1;
- if (private->copy_data == NULL)
+ if (app_clipboard == NULL)
return;
if (file_list == NULL) {
- fr_clipboard_data_unref (private->copy_data);
- private->copy_data = NULL;
+ fr_clipboard_data_unref (app_clipboard);
+ app_clipboard = NULL;
return;
}
@@ -435,12 +419,12 @@ fr_window_clipboard_remove_file_list (FrWindow *window,
const char *name1 = scan1->data;
GList *scan2;
- for (scan2 = private->copy_data->files; scan2;) {
+ for (scan2 = app_clipboard->files; scan2;) {
const char *name2 = scan2->data;
if (strcmp (name1, name2) == 0) {
GList *tmp = scan2->next;
- private->copy_data->files = g_list_remove_link (private->copy_data->files,
scan2);
+ app_clipboard->files = g_list_remove_link (app_clipboard->files, scan2);
g_free (scan2->data);
g_list_free (scan2);
scan2 = tmp;
@@ -450,10 +434,9 @@ fr_window_clipboard_remove_file_list (FrWindow *window,
}
}
- if (private->copy_data->files == NULL) {
- fr_clipboard_data_unref (private->copy_data);
- private->copy_data = NULL;
- gtk_clipboard_clear (gtk_widget_get_clipboard (GTK_WIDGET (window),
_fr_window_get_clipboard_name (window)));
+ if (app_clipboard->files == NULL) {
+ fr_clipboard_data_unref (app_clipboard);
+ app_clipboard = NULL;
}
}
@@ -508,9 +491,6 @@ fr_window_free_private_data (FrWindow *window)
private->hide_progress_timeout = 0;
}
- if (private->theme_changed_handler_id != 0)
- g_signal_handler_disconnect (gtk_icon_theme_get_default (),
private->theme_changed_handler_id);
-
fr_window_history_clear (window);
_g_object_unref (private->open_default_dir);
@@ -532,9 +512,9 @@ fr_window_free_private_data (FrWindow *window)
fr_clipboard_data_unref (private->clipboard_data);
private->clipboard_data = NULL;
}
- if (private->copy_data != NULL) {
- fr_clipboard_data_unref (private->copy_data);
- private->copy_data = NULL;
+ if (app_clipboard != NULL) {
+ fr_clipboard_data_unref (app_clipboard);
+ app_clipboard = NULL;
}
if (private->copy_from_archive != NULL) {
g_object_unref (private->copy_from_archive);
@@ -586,9 +566,11 @@ fr_window_close (FrWindow *window)
if (gtk_widget_get_realized (GTK_WIDGET (window))) {
int width, height;
- gtk_window_get_size (GTK_WINDOW (window), &width, &height);
- g_settings_set_int (private->settings_ui, PREF_UI_WINDOW_WIDTH, width);
- g_settings_set_int (private->settings_ui, PREF_UI_WINDOW_HEIGHT, height);
+ gtk_widget_get_size_request (GTK_WIDGET (window), &width, &height);
+ if ((width > 0) && (height > 0)) {
+ g_settings_set_int (private->settings_ui, PREF_UI_WINDOW_WIDTH, width);
+ g_settings_set_int (private->settings_ui, PREF_UI_WINDOW_HEIGHT, height);
+ }
width = gtk_paned_get_position (GTK_PANED (private->paned));
if (width > 0)
@@ -730,8 +712,7 @@ fr_window_change_action_state (FrWindow *window,
static void
-fr_window_update_paste_command_sensitivity (FrWindow *window,
- GtkClipboard *clipboard)
+fr_window_update_paste_command_sensitivity (FrWindow *window)
{
FrWindowPrivate *private = fr_window_get_instance_private (window);
gboolean running;
@@ -741,11 +722,6 @@ fr_window_update_paste_command_sensitivity (FrWindow *window,
if (private->closing)
return;
- if (clipboard == NULL)
- clipboard = gtk_widget_get_clipboard (GTK_WIDGET (window), _fr_window_get_clipboard_name
(window));
- if (clipboard == NULL)
- return;
-
running = private->activity_ref > 0;
no_archive = (window->archive == NULL) || ! private->archive_present;
ro = ! no_archive && window->archive->read_only;
@@ -756,43 +732,18 @@ fr_window_update_paste_command_sensitivity (FrWindow *window,
&& ! running
&& fr_archive_is_capable_of (window->archive,
FR_ARCHIVE_CAN_STORE_MANY_FILES)
&& (private->list_mode != FR_WINDOW_LIST_MODE_FLAT)
- && gtk_clipboard_wait_is_target_available (clipboard, FR_SPECIAL_URI_LIST));
-}
-
-
-static void
-clipboard_owner_change_cb (GtkClipboard *clipboard,
- GdkEventOwnerChange *event,
- gpointer user_data)
-{
- fr_window_update_paste_command_sensitivity ((FrWindow *) user_data, clipboard);
+ && (app_clipboard != NULL));
}
static void
fr_window_realize (GtkWidget *widget)
{
- FrWindow *window = FR_WINDOW (widget);
+ FrWindow *window = FR_WINDOW (widget);
FrWindowPrivate *private = fr_window_get_instance_private (window);
- GIcon *icon;
- GtkClipboard *clipboard;
GTK_WIDGET_CLASS (fr_window_parent_class)->realize (widget);
- private->list_icon_cache = gth_icon_cache_new_for_widget (GTK_WIDGET (window),
GTK_ICON_SIZE_LARGE_TOOLBAR);
- private->tree_icon_cache = gth_icon_cache_new_for_widget (GTK_WIDGET (window), GTK_ICON_SIZE_MENU);
-
- icon = g_content_type_get_icon ("text/plain");
- gth_icon_cache_set_fallback (private->list_icon_cache, icon);
- gth_icon_cache_set_fallback (private->tree_icon_cache, icon);
- g_object_unref (icon);
-
- clipboard = gtk_widget_get_clipboard (widget, _fr_window_get_clipboard_name (window));
- g_signal_connect (clipboard,
- "owner_change",
- G_CALLBACK (clipboard_owner_change_cb),
- window);
-
gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (private->list_store),
g_settings_get_enum (private->settings_listing,
PREF_LISTING_SORT_METHOD),
g_settings_get_enum (private->settings_listing,
PREF_LISTING_SORT_TYPE));
@@ -802,28 +753,6 @@ fr_window_realize (GtkWidget *widget)
}
-static void
-fr_window_unrealize (GtkWidget *widget)
-{
- FrWindow *window = FR_WINDOW (widget);
- FrWindowPrivate *private = fr_window_get_instance_private (window);
- GtkClipboard *clipboard;
-
- gth_icon_cache_free (private->list_icon_cache);
- private->list_icon_cache = NULL;
-
- gth_icon_cache_free (private->tree_icon_cache);
- private->tree_icon_cache = NULL;
-
- clipboard = gtk_widget_get_clipboard (widget, _fr_window_get_clipboard_name (window));
- g_signal_handlers_disconnect_by_func (clipboard,
- G_CALLBACK (clipboard_owner_change_cb),
- window);
-
- GTK_WIDGET_CLASS (fr_window_parent_class)->unrealize (widget);
-}
-
-
static void
fr_window_unmap (GtkWidget *widget)
{
@@ -888,7 +817,6 @@ fr_window_class_init (FrWindowClass *klass)
widget_class = GTK_WIDGET_CLASS (klass);
widget_class->realize = fr_window_realize;
- widget_class->unrealize = fr_window_unrealize;
widget_class->unmap = fr_window_unmap;
}
@@ -1131,7 +1059,7 @@ fr_window_update_sensitivity (FrWindow *window)
GTK_RESPONSE_OK,
running && private->stoppable);
- fr_window_update_paste_command_sensitivity (window, NULL);
+ fr_window_update_paste_command_sensitivity (window);
fr_window_enable_action (window, "add-files", ! no_archive && ! ro && ! running &&
can_store_many_files);
fr_window_enable_action (window, "close", ! running || private->stoppable);
@@ -1441,33 +1369,14 @@ get_parent_dir (const char *current_dir)
}
-static GdkPixbuf *
-get_mime_type_icon (FrWindow *window,
- const char *mime_type)
-{
- FrWindowPrivate *private = fr_window_get_instance_private (window);
- GIcon *icon;
- GdkPixbuf *pixbuf;
-
- icon = g_content_type_get_icon (mime_type);
- pixbuf = gth_icon_cache_get_pixbuf (private->tree_icon_cache, icon);
-
- g_object_unref (icon);
-
- return pixbuf;
-}
-
-
-static GdkPixbuf *
-get_icon (FrWindow *window,
- FrFileData *fdata)
+static GIcon *
+fr_file_data_get_icon (FrFileData *fdata)
{
- FrWindowPrivate *private = fr_window_get_instance_private (window);
- GIcon *icon = NULL;
- GdkPixbuf *pixbuf = NULL;
+ GIcon *icon = NULL;
- if (fdata->link != NULL)
+ if (fdata->link != NULL) {
icon = g_themed_icon_new ("emblem-symbolic-link");
+ }
else {
const char *content_type;
@@ -1478,34 +1387,14 @@ get_icon (FrWindow *window,
icon = g_content_type_get_icon (content_type);
}
- pixbuf = gth_icon_cache_get_pixbuf (private->list_icon_cache, icon);
- g_object_unref (icon);
-
- return pixbuf;
+ return icon;
}
-static GdkPixbuf *
-get_emblem (FrWindow *window,
- FrFileData *fdata)
+static GIcon *
+fr_file_data_get_emblem (FrFileData *fdata)
{
- FrWindowPrivate *private = fr_window_get_instance_private (window);
- const char *emblem_name;
- GIcon *icon;
- GdkPixbuf *pixbuf;
-
- emblem_name = NULL;
- if (fdata->encrypted)
- emblem_name = "emblem-readonly";
-
- if (emblem_name == NULL)
- return NULL;
-
- icon = g_themed_icon_new (emblem_name);
- pixbuf = gth_icon_cache_get_pixbuf (private->list_icon_cache, icon);
- g_object_unref (icon);
-
- return pixbuf;
+ return fdata->encrypted ? g_themed_icon_new ("emblem-readonly") : NULL;
}
@@ -1567,7 +1456,7 @@ fr_window_populate_file_list (FrWindow *window,
for (guint i = 0; i < files->len; i++) {
FrFileData *fdata = g_ptr_array_index (files, i);
GtkTreeIter iter;
- GdkPixbuf *icon, *emblem;
+ GIcon *icon, *emblem;
char *utf8_name;
if (fdata->list_name == NULL)
@@ -1575,8 +1464,8 @@ fr_window_populate_file_list (FrWindow *window,
gtk_list_store_append (private->list_store, &iter);
- icon = get_icon (window, fdata);
- emblem = get_emblem (window, fdata);
+ icon = fr_file_data_get_icon (fdata);
+ emblem = fr_file_data_get_emblem (fdata);
utf8_name = g_filename_display_name (fdata->list_name);
if (fr_file_data_is_dir (fdata)) {
@@ -1587,7 +1476,6 @@ fr_window_populate_file_list (FrWindow *window,
if (fdata->list_dir)
tmp = _g_path_remove_ending_separator (fr_window_get_current_location
(window));
-
else
tmp = _g_path_remove_level (fdata->path);
utf8_path = g_filename_display_name (tmp);
@@ -1771,7 +1659,7 @@ fr_window_update_dir_tree (FrWindow *window)
GPtrArray *dirs;
GRegex *filter;
GHashTable *dir_cache;
- GdkPixbuf *icon;
+ GIcon *icon;
if (! gtk_widget_get_realized (GTK_WIDGET (window)))
return;
@@ -1837,7 +1725,7 @@ fr_window_update_dir_tree (FrWindow *window)
/**/
- icon = get_mime_type_icon (window, MIME_TYPE_ARCHIVE);
+ icon = g_content_type_get_icon (MIME_TYPE_ARCHIVE);
{
GtkTreeIter node;
char *name;
@@ -1859,7 +1747,7 @@ fr_window_update_dir_tree (FrWindow *window)
/**/
- icon = get_mime_type_icon (window, MIME_TYPE_DIRECTORY);
+ icon = g_content_type_get_icon (MIME_TYPE_DIRECTORY);
for (guint i = 0; i < dirs->len; i++) {
char *dir = g_ptr_array_index (dirs, i);
char *parent_dir;
@@ -1980,16 +1868,6 @@ fr_window_update_file_list (FrWindow *window,
}
-static void
-fr_window_set_title (FrWindow *window,
- const char *title)
-{
- FrWindowPrivate *private = fr_window_get_instance_private (window);
- gtk_window_set_title (GTK_WINDOW (window), title);
- gtk_header_bar_set_title (GTK_HEADER_BAR (private->headerbar), title);
-}
-
-
static void
fr_window_update_title (FrWindow *window)
{
@@ -1998,7 +1876,7 @@ fr_window_update_title (FrWindow *window)
char *name;
if (! private->archive_present) {
- fr_window_set_title (window, _("Archive Manager"));
+ gtk_window_set_title (GTK_WINDOW (window), _("Archive Manager"));
return;
}
@@ -2006,7 +1884,7 @@ fr_window_update_title (FrWindow *window)
title = g_strdup_printf ("%s %s",
name,
window->archive->read_only ? _("[read only]") : "");
- fr_window_set_title (window, title);
+ gtk_window_set_title (GTK_WINDOW (window), title);
g_free (title);
g_free (name);
@@ -2014,18 +1892,10 @@ fr_window_update_title (FrWindow *window)
static gboolean
-location_entry_key_press_event_cb (GtkWidget *widget,
- GdkEventKey *event,
- FrWindow *window)
+location_entry_activate_cb (GtkWidget *widget,
+ FrWindow *window)
{
- if ((event->keyval == GDK_KEY_Return)
- || (event->keyval == GDK_KEY_KP_Enter)
- || (event->keyval == GDK_KEY_ISO_Enter))
- {
- FrWindowPrivate *private = fr_window_get_instance_private (window);
- fr_window_go_to_location (window, gtk_editable_get_text (GTK_EDITABLE
(private->location_entry)), FALSE);
- }
-
+ fr_window_go_to_location (window, gtk_editable_get_text (GTK_EDITABLE (widget)), FALSE);
return FALSE;
}
@@ -2137,32 +2007,10 @@ static void
show_folder (GtkWindow *parent_window,
GFile *folder)
{
- GError *error = NULL;
- char *uri;
+ char *uri;
uri = g_file_get_uri (folder);
- if (! gtk_show_uri_on_window (parent_window, uri, GDK_CURRENT_TIME, &error))
- {
- GtkWidget *d;
- char *utf8_name;
- char *message;
-
- utf8_name = _g_file_get_display_basename (folder);
- message = g_strdup_printf (_("Could not display the folder “%s”"), utf8_name);
- g_free (utf8_name);
-
- d = _gtk_error_dialog_new (parent_window,
- GTK_DIALOG_MODAL,
- NULL,
- message,
- "%s",
- error->message);
- gtk_dialog_run (GTK_DIALOG (d));
- gtk_window_destroy (GTK_WINDOW (d));
-
- g_free (message);
- g_clear_error (&error);
- }
+ gtk_show_uri (parent_window, uri, GDK_CURRENT_TIME);
g_free (uri);
}
@@ -2550,15 +2398,16 @@ create_the_progress_dialog (FrWindow *window)
builder = gtk_builder_new_from_resource (FILE_ROLLER_RESOURCE_UI_PATH "progress-dialog.ui");
use_header_bar = _gtk_settings_get_dialogs_use_header ();
dialog = g_object_new (GTK_TYPE_DIALOG, "use-header-bar", use_header_bar, NULL);
- gtk_box_pack_end (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))),
- _gtk_builder_get_widget (builder, "progress_dialog_content"),
- TRUE, TRUE, 0);
+ _gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))),
+ _gtk_builder_get_widget (builder, "progress_dialog_content"),
+ TRUE,
+ TRUE);
gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK);
gtk_window_set_title (GTK_WINDOW (dialog), title);
gtk_window_set_transient_for (GTK_WINDOW (dialog), parent);
gtk_window_set_modal (GTK_WINDOW (dialog), (flags & GTK_DIALOG_MODAL));
gtk_window_set_destroy_with_parent (GTK_WINDOW (dialog), (flags & GTK_DIALOG_DESTROY_WITH_PARENT));
- g_object_weak_ref (G_OBJECT (dialog), (GWeakNotify) g_object_unref, builder);
+ g_object_weak_ref (G_OBJECT (dialog), _g_object_unref_on_weak_notify, builder);
_gtk_dialog_add_to_window_group (GTK_DIALOG (dialog));
@@ -2569,7 +2418,7 @@ create_the_progress_dialog (FrWindow *window)
if (use_header_bar) {
GtkWidget *header_bar = gtk_dialog_get_header_bar (GTK_DIALOG (dialog));
GtkWidget *cancel_button = gtk_dialog_get_widget_for_response (GTK_DIALOG (dialog),
GTK_RESPONSE_CANCEL);
- gtk_container_child_set (GTK_CONTAINER (header_bar), cancel_button, "pack-type",
GTK_PACK_END, NULL);
+ gtk_header_bar_pack_end (GTK_HEADER_BAR (header_bar), cancel_button);
}
private->progress_dialog = dialog;
@@ -3587,57 +3436,17 @@ fr_window_get_n_selected_files (FrWindow *window)
/**/
-static int
-dir_tree_button_press_cb (GtkWidget *widget,
- GdkEventButton *event,
- gpointer data)
+static gboolean
+dir_tree_events_cb (GtkEventControllerLegacy *self,
+ GdkEvent *event,
+ gpointer user_data)
{
- FrWindow *window = data;
+ FrWindow *window = user_data;
FrWindowPrivate *private = fr_window_get_instance_private (window);
- GtkTreeSelection *selection;
-
- if (event->window != gtk_tree_view_get_bin_window (GTK_TREE_VIEW (private->tree_view)))
- return FALSE;
-
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (private->tree_view));
- if (selection == NULL)
- return FALSE;
-
- if ((event->type == GDK_BUTTON_PRESS) && (event->button == 3)) {
- GtkTreePath *path;
- GtkTreeIter iter;
-
- if (gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (private->tree_view),
- event->x, event->y,
- &path, NULL, NULL, NULL)) {
- int wx;
- int wy;
-
- if (! gtk_tree_model_get_iter (GTK_TREE_MODEL (private->tree_store), &iter, path)) {
- gtk_tree_path_free (path);
- return FALSE;
- }
- gtk_tree_path_free (path);
-
- if (! gtk_tree_selection_iter_is_selected (selection, &iter)) {
- gtk_tree_selection_unselect_all (selection);
- gtk_tree_selection_select_iter (selection, &iter);
- }
-
- gtk_tree_view_convert_bin_window_to_widget_coords (GTK_TREE_VIEW (widget), event->x,
event->y, &wx, &wy);
- _gtk_popover_popup_at_position (GTK_POPOVER (private->sidebar_folder_popup_menu), wx,
wy);
- }
- else
- gtk_tree_selection_unselect_all (selection);
+ double x, y;
- return TRUE;
- }
- else if ((event->type == GDK_BUTTON_PRESS) && (event->button == 8)) {
- fr_window_go_back (window);
- return TRUE;
- }
- else if ((event->type == GDK_BUTTON_PRESS) && (event->button == 9)) {
- fr_window_go_forward (window);
+ if (gdk_event_triggers_context_menu (event) && gdk_event_get_position (event, &x, &y)) {
+ _gtk_popover_popup_at_position (GTK_POPOVER (private->sidebar_folder_popup_menu), x, y);
return TRUE;
}
@@ -3771,88 +3580,21 @@ row_activated_cb (GtkTreeView *tree_view,
}
-static int
-file_button_press_cb (GtkWidget *widget,
- GdkEventButton *event,
- gpointer data)
+static gboolean
+list_view_button_pressed_cb (GtkGestureClick *self,
+ gint n_press,
+ gdouble x,
+ gdouble y,
+ gpointer user_data)
{
- FrWindow *window = data;
- FrWindowPrivate *private = fr_window_get_instance_private (window);
- GtkTreeSelection *selection;
-
- if (event->window != gtk_tree_view_get_bin_window (GTK_TREE_VIEW (private->list_view)))
- return FALSE;
-
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (private->list_view));
- if (selection == NULL)
- return FALSE;
-
- if (private->path_clicked != NULL) {
- gtk_tree_path_free (private->path_clicked);
- private->path_clicked = NULL;
- }
-
- if ((event->type == GDK_BUTTON_PRESS) && (event->button == 3)) {
- GtkTreePath *path;
- GtkTreeIter iter;
- int n_selected;
- int wx;
- int wy;
-
- if (gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (private->list_view),
- event->x, event->y,
- &path, NULL, NULL, NULL)) {
-
- if (! gtk_tree_model_get_iter (GTK_TREE_MODEL (private->list_store), &iter, path)) {
- gtk_tree_path_free (path);
- return FALSE;
- }
- gtk_tree_path_free (path);
-
- if (! gtk_tree_selection_iter_is_selected (selection, &iter)) {
- gtk_tree_selection_unselect_all (selection);
- gtk_tree_selection_select_iter (selection, &iter);
- }
- }
- else
- gtk_tree_selection_unselect_all (selection);
-
- gtk_tree_view_convert_bin_window_to_widget_coords (GTK_TREE_VIEW (private->list_view),
event->x, event->y, &wx, &wy);
- n_selected = fr_window_get_n_selected_files (window);
- if ((n_selected == 1) && selection_has_a_dir (window))
- _gtk_popover_popup_at_position (GTK_POPOVER (private->folder_popup_menu), wx, wy);
- else
- _gtk_popover_popup_at_position (GTK_POPOVER (private->file_popup_menu), wx, wy);
- return TRUE;
- }
- else if ((event->type == GDK_BUTTON_PRESS) && (event->button == 1)) {
- GtkTreePath *path = NULL;
-
- if (! gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (private->list_view),
- event->x, event->y,
- &path, NULL, NULL, NULL)) {
- gtk_tree_selection_unselect_all (selection);
- }
-
- if (private->path_clicked != NULL) {
- gtk_tree_path_free (private->path_clicked);
- private->path_clicked = NULL;
- }
-
- if (path != NULL) {
- private->path_clicked = gtk_tree_path_copy (path);
- gtk_tree_path_free (path);
- }
+ FrWindow *window = user_data;
+ int button = gtk_gesture_single_get_current_button (GTK_GESTURE_SINGLE (self));
- return FALSE;
- }
- else if ((event->type == GDK_BUTTON_PRESS) && (event->button == 8)) {
- // go back
+ if ((n_press == 1) && (button == 8)) {
fr_window_go_back (window);
return TRUE;
}
- else if ((event->type == GDK_BUTTON_PRESS) && (event->button == 9)) {
- // go forward
+ else if ((n_press == 1) && (button == 9)) {
fr_window_go_forward (window);
return TRUE;
}
@@ -3861,60 +3603,29 @@ file_button_press_cb (GtkWidget *widget,
}
-static int
-file_button_release_cb (GtkWidget *widget,
- GdkEventButton *event,
- gpointer data)
+static gboolean
+list_view_events_cb (GtkEventControllerLegacy *self,
+ GdkEvent *event,
+ gpointer user_data)
{
- FrWindow *window = data;
+ FrWindow *window = user_data;
FrWindowPrivate *private = fr_window_get_instance_private (window);
- GtkTreeSelection *selection;
-
- if (event->window != gtk_tree_view_get_bin_window (GTK_TREE_VIEW (private->list_view)))
- return FALSE;
-
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (private->list_view));
- if (selection == NULL)
- return FALSE;
-
- if (private->path_clicked == NULL)
- return FALSE;
+ double x, y;
- if ((event->type == GDK_BUTTON_RELEASE)
- && (event->button == 1)
- && (private->path_clicked != NULL)) {
- GtkTreePath *path = NULL;
-
- if (gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (private->list_view),
- event->x, event->y,
- &path, NULL, NULL, NULL)) {
-
- if ((gtk_tree_path_compare (private->path_clicked, path) == 0)
- && private->single_click
- && ! ((event->state & GDK_CONTROL_MASK) || (event->state & GDK_SHIFT_MASK))) {
- gtk_tree_view_set_cursor (GTK_TREE_VIEW (widget),
- path,
- NULL,
- FALSE);
- gtk_tree_view_row_activated (GTK_TREE_VIEW (widget),
- path,
- NULL);
- }
- }
-
- if (path != NULL)
- gtk_tree_path_free (path);
- }
-
- if (private->path_clicked != NULL) {
- gtk_tree_path_free (private->path_clicked);
- private->path_clicked = NULL;
+ if (gdk_event_triggers_context_menu (event) && gdk_event_get_position (event, &x, &y)) {
+ int n_selected = fr_window_get_n_selected_files (window);
+ if ((n_selected == 1) && selection_has_a_dir (window))
+ _gtk_popover_popup_at_position (GTK_POPOVER (private->folder_popup_menu), x, y);
+ else
+ _gtk_popover_popup_at_position (GTK_POPOVER (private->file_popup_menu), x, y);
+ return TRUE;
}
return FALSE;
}
+#if 0
static gboolean
file_motion_notify_callback (GtkWidget *widget,
GdkEventMotion *event,
@@ -3940,12 +3651,11 @@ file_motion_notify_callback (GtkWidget *widget,
NULL, NULL, NULL);
if (private->list_hover_path != NULL)
- cursor = gdk_cursor_new_from_name (gtk_widget_get_display (GTK_WIDGET (window)),
- "pointer");
+ cursor = gdk_cursor_new_from_name ("pointer", NULL);
else
cursor = NULL;
- gdk_window_set_cursor (event->window, cursor);
+ gtk_widget_set_cursor (widget, cursor);
if (cursor != NULL)
g_object_unref (cursor);
@@ -3999,30 +3709,13 @@ file_leave_notify_callback (GtkWidget *widget,
return FALSE;
}
+#endif
/* -- drag and drop -- */
-static GList *
-get_file_list_from_selection_data (char *uri_list)
-{
- GList *list = NULL;
- char **uris;
-
- if (uri_list == NULL)
- return NULL;
-
- uris = g_uri_list_extract_uris (uri_list);
- for (size_t i = 0; uris[i] != NULL; i++)
- list = g_list_prepend (list, g_file_new_for_uri (uris[i]));
- g_strfreev (uris);
-
- return g_list_reverse (list);
-}
-
-
-static gboolean
+/*static gboolean
fr_window_drag_motion (GtkWidget *widget,
GdkDragContext *context,
gint x,
@@ -4041,42 +3734,12 @@ fr_window_drag_motion (GtkWidget *widget,
}
return TRUE;
-}
+ }*/
static void fr_window_paste_from_clipboard_data (FrWindow *window, FrClipboardData *data);
-static FrClipboardData*
-get_clipboard_data_from_selection_data (FrWindow *window,
- const char *data)
-{
- FrWindowPrivate *private = fr_window_get_instance_private (window);
- FrClipboardData *clipboard_data;
- char **uris;
-
- clipboard_data = fr_clipboard_data_new ();
-
- uris = g_strsplit (data, "\r\n", -1);
-
- clipboard_data->file = g_file_new_for_uri (uris[0]);
- if (private->second_password != NULL)
- clipboard_data->password = g_strdup (private->second_password);
- else if (strcmp (uris[1], "") != 0)
- clipboard_data->password = g_strdup (uris[1]);
- clipboard_data->op = (strcmp (uris[2], "copy") == 0) ? FR_CLIPBOARD_OP_COPY : FR_CLIPBOARD_OP_CUT;
- clipboard_data->base_dir = g_strdup (uris[3]);
- for (size_t i = 4; uris[i] != NULL; i++)
- if (uris[i][0] != '\0')
- clipboard_data->files = g_list_prepend (clipboard_data->files, g_strdup (uris[i]));
- clipboard_data->files = g_list_reverse (clipboard_data->files);
-
- g_strfreev (uris);
-
- return clipboard_data;
-}
-
-
gboolean
fr_window_create_archive_and_continue (FrWindow *window,
GFile *file,
@@ -4118,42 +3781,23 @@ _fr_window_get_ask_to_open_destination (FrWindow *window)
static void
-new_archive_dialog_response_cb (GtkDialog *dialog,
- int response,
- gpointer user_data)
+new_archive_get_file_cb (FrNewArchiveDialog *dialog,
+ GFile *file,
+ const char *mime_type,
+ gpointer user_data)
{
- FrWindow *window = user_data;
- GFile *file;
- const char *mime_type;
- GtkWidget *archive_window;
- gboolean new_window;
- const char *password;
- gboolean encrypt_header;
- int volume_size;
-
- if ((response == GTK_RESPONSE_CANCEL) || (response == GTK_RESPONSE_DELETE_EVENT)) {
- gtk_window_destroy (GTK_WINDOW (dialog));
- _archive_operation_cancelled (window, FR_ACTION_CREATING_NEW_ARCHIVE);
- return;
- }
+ FrWindow *window = user_data;
+ gboolean new_window;
+ GtkWidget *archive_window;
- file = fr_new_archive_dialog_get_file (FR_NEW_ARCHIVE_DIALOG (dialog), &mime_type);
if (file == NULL)
return;
new_window = fr_window_archive_is_present (window) && ! fr_window_is_batch_mode (window);
- if (new_window)
- archive_window = fr_window_new ();
- else
- archive_window = (GtkWidget *) window;
-
- password = fr_new_archive_dialog_get_password (FR_NEW_ARCHIVE_DIALOG (dialog));
- encrypt_header = fr_new_archive_dialog_get_encrypt_header (FR_NEW_ARCHIVE_DIALOG (dialog));
- volume_size = fr_new_archive_dialog_get_volume_size (FR_NEW_ARCHIVE_DIALOG (dialog));
-
- fr_window_set_password (FR_WINDOW (archive_window), password);
- fr_window_set_encrypt_header (FR_WINDOW (archive_window), encrypt_header);
- fr_window_set_volume_size (FR_WINDOW (archive_window), volume_size);
+ archive_window = new_window ? fr_window_new () : GTK_WIDGET (window);
+ fr_window_set_password (FR_WINDOW (archive_window), fr_new_archive_dialog_get_password (dialog));
+ fr_window_set_encrypt_header (FR_WINDOW (archive_window), fr_new_archive_dialog_get_encrypt_header
(dialog));
+ fr_window_set_volume_size (FR_WINDOW (archive_window), fr_new_archive_dialog_get_volume_size
(dialog));
if (fr_window_create_archive_and_continue (FR_WINDOW (archive_window),
file,
@@ -4164,11 +3808,29 @@ new_archive_dialog_response_cb (GtkDialog *dialog,
}
else if (new_window)
gtk_window_destroy (GTK_WINDOW (archive_window));
+}
+
+
+static void
+new_archive_dialog_response_cb (GtkDialog *dialog,
+ int response,
+ gpointer user_data)
+{
+ FrWindow *window = user_data;
+
+ if ((response == GTK_RESPONSE_CANCEL) || (response == GTK_RESPONSE_DELETE_EVENT)) {
+ gtk_window_destroy (GTK_WINDOW (dialog));
+ _archive_operation_cancelled (window, FR_ACTION_CREATING_NEW_ARCHIVE);
+ return;
+ }
- g_object_unref (file);
+ fr_new_archive_dialog_get_file (FR_NEW_ARCHIVE_DIALOG (dialog),
+ new_archive_get_file_cb,
+ user_data);
}
+#if 0
static void
fr_window_drag_data_received (GtkWidget *widget,
GdkDragContext *context,
@@ -4225,8 +3887,7 @@ fr_window_drag_data_received (GtkWidget *widget,
NULL,
_("Could not perform the operation"),
NULL);
- gtk_dialog_run (GTK_DIALOG (d));
- gtk_window_destroy (GTK_WINDOW (d));
+ _gtk_dialog_run (GTK_DIALOG (d));
return;
}
@@ -4353,11 +4014,6 @@ tree_view_drag_begin (GtkWidget *widget,
if (private->activity_ref > 0)
return FALSE;
- if (private->path_clicked != NULL) {
- gtk_tree_path_free (private->path_clicked);
- private->path_clicked = NULL;
- }
-
_g_clear_object (&private->drag_destination_folder);
g_free (private->drag_base_dir);
@@ -4399,7 +4055,7 @@ file_list_drag_begin (GtkWidget *widget,
FrWindow *window = data;
FrWindowPrivate *private = fr_window_get_instance_private (window);
tree_view_drag_begin(widget, context,
- GTK_TREE_MODEL(private->list_store),
+ GTK_TREE_MODEL(private->list_store),
COLUMN_NAME, data);
return;
}
@@ -4413,7 +4069,7 @@ folde_tree_drag_begin (GtkWidget *widget,
FrWindow *window = data;
FrWindowPrivate *private = fr_window_get_instance_private (window);
tree_view_drag_begin(widget, context,
- GTK_TREE_MODEL(private->tree_store),
+ GTK_TREE_MODEL(private->tree_store),
TREE_COLUMN_NAME, data);
return;
}
@@ -4446,359 +4102,10 @@ file_list_drag_end (GtkWidget *widget,
debug (DEBUG_INFO, "::DragEnd <--\n");
}
+#endif
-/* The following three functions taken from bugzilla
- * (http://bugzilla.gnome.org/attachment.cgi?id=49362&action=view)
- * Author: Christian Neumair
- * Copyright: 2005 Free Software Foundation, Inc
- * License: GPL */
-static char *
-get_xds_atom_value (GdkDragContext *context)
-{
- char *data = NULL;
- char *ret;
- int len;
-
- g_return_val_if_fail (context != NULL, NULL);
- g_return_val_if_fail (gdk_drag_context_get_source_window (context) != NULL, NULL);
-
- if (gdk_property_get (gdk_drag_context_get_source_window (context),
- XDS_ATOM, TEXT_ATOM,
- 0, MAX_XDS_ATOM_VAL_LEN,
- FALSE, NULL, NULL, &len,
- (unsigned char **) &ret))
- {
- data = g_strndup (ret, len);
- g_free (ret);
- }
- return data;
-}
-
-
-static gboolean
-context_offers_target (GdkDragContext *context,
- GdkAtom target)
-{
- return (g_list_find (gdk_drag_context_list_targets (context), target) != NULL);
-}
-
-
-static gboolean
-nautilus_xds_dnd_is_valid_xds_context (GdkDragContext *context)
-{
- gboolean ret = FALSE;
-
- g_return_val_if_fail (context != NULL, FALSE);
-
- if (context_offers_target (context, XDS_ATOM)) {
- char *tmp = get_xds_atom_value (context);
- ret = (tmp != NULL);
- g_free (tmp);
- }
-
- return ret;
-}
-
-
-static char *
-get_selection_data_from_clipboard_data (FrWindow *window,
- FrClipboardData *data)
-{
- FrWindowPrivate *private = fr_window_get_instance_private (window);
- GString *list;
- char *uri;
- GList *scan;
-
- if (data == NULL)
- return NULL;
-
- list = g_string_new (NULL);
-
- uri = g_file_get_uri (fr_archive_get_file (window->archive));
- g_string_append (list, uri);
- g_free (uri);
-
- g_string_append (list, "\r\n");
- if (private->password != NULL)
- g_string_append (list, private->password);
- g_string_append (list, "\r\n");
- g_string_append (list, (data->op == FR_CLIPBOARD_OP_COPY) ? "copy" : "cut");
- g_string_append (list, "\r\n");
- g_string_append (list, data->base_dir);
- g_string_append (list, "\r\n");
- for (scan = data->files; scan; scan = scan->next) {
- g_string_append (list, scan->data);
- g_string_append (list, "\r\n");
- }
-
- return g_string_free (list, FALSE);
-}
-
-
-/* -- wait_dnd_extraction -- */
-
-
-typedef struct {
- FrWindow *window;
- GMainLoop *loop;
-} DndWaitInfo;
-
-
-static gboolean
-extraction_is_finished (gpointer *data)
-{
- DndWaitInfo *wait_info;
- wait_info = (DndWaitInfo *) data;
- FrWindowPrivate *private = fr_window_get_instance_private (wait_info->window);
-
- return private->dnd_extract_is_running;
-}
-
-
-static void
-notify_extraction_finished (gpointer *data)
-{
- DndWaitInfo *wait_info;
- wait_info = (DndWaitInfo *) data;
-
- if (g_main_loop_is_running (wait_info->loop))
- g_main_loop_quit (wait_info->loop);
-}
-
-
-static void
-wait_dnd_extraction (FrWindow *window)
-{
- FrWindowPrivate *private = fr_window_get_instance_private (window);
- private->dnd_extract_is_running = TRUE;
- private->dnd_extract_finished_with_error = FALSE;
- fr_window_archive_extract (window,
- private->drag_file_list,
- private->drag_destination_folder,
- private->drag_base_dir,
- FALSE,
- FR_OVERWRITE_ASK,
- FALSE,
- FALSE);
-
- DndWaitInfo wait_info = { NULL, NULL };
- wait_info.loop = g_main_loop_new (NULL, FALSE);
- wait_info.window = window;
- g_timeout_add_full (G_PRIORITY_DEFAULT,
- 500,
- (GSourceFunc) extraction_is_finished,
- &wait_info,
- (GDestroyNotify) notify_extraction_finished);
-
- g_main_loop_run (wait_info.loop);
-
- g_main_loop_unref (wait_info.loop);
- wait_info.loop = NULL;
- wait_info.window = NULL;
- private->dnd_extract_is_running = FALSE;
-}
-
-
-static void
-fr_window_folder_tree_drag_data_get (GtkWidget *widget,
- GdkDragContext *context,
- GtkSelectionData *selection_data,
- guint info,
- guint time,
- gpointer user_data)
-{
- FrWindow *window = user_data;
- FrWindowPrivate *private = fr_window_get_instance_private (window);
- GList *file_list;
- char *uri;
- GFile *destination;
- GFile *destination_folder;
- char *xds_response;
-
- debug (DEBUG_INFO, "::DragDataGet -->\n");
-
- if (private->activity_ref > 0)
- return;
-
- file_list = fr_window_get_folder_tree_selection (window, TRUE, NULL);
- if (file_list == NULL)
- return;
-
- if (gtk_selection_data_get_target (selection_data) == XFR_ATOM) {
- FrClipboardData *tmp;
- char *data;
-
- tmp = fr_clipboard_data_new ();
- tmp->files = file_list;
- tmp->op = FR_CLIPBOARD_OP_COPY;
- tmp->base_dir = g_strdup (fr_window_get_current_location (window));
-
- data = get_selection_data_from_clipboard_data (window, tmp);
- gtk_selection_data_set (selection_data, XFR_ATOM, 8, (guchar *) data, strlen (data));
-
- fr_clipboard_data_unref (tmp);
- g_free (data);
-
- return;
- }
-
- if (! nautilus_xds_dnd_is_valid_xds_context (context))
- return;
-
- uri = get_xds_atom_value (context);
- g_return_if_fail(uri != NULL);
-
- destination = g_file_new_for_uri (uri);
- destination_folder = g_file_get_parent (destination);
-
- g_object_unref (destination);
- g_free (uri);
-
- /* check whether the extraction can be performed in the destination
- * folder */
-
- g_clear_error (&private->drag_error);
-
- if (! _g_file_check_permissions (destination_folder, R_OK | W_OK)) {
- char *display_name;
-
- display_name = _g_file_get_display_basename (destination_folder);
- private->drag_error = g_error_new (FR_ERROR, 0, _("You don’t have the right permissions to
extract archives in the folder “%s”"), display_name);
-
- g_free (display_name);
- }
-
- if (private->drag_error == NULL) {
- char *selected_folder;
-
- _g_object_unref (private->drag_destination_folder);
- g_free (private->drag_base_dir);
- _g_string_list_free (private->drag_file_list);
- private->drag_destination_folder = g_object_ref (destination_folder);
- selected_folder = fr_window_get_selected_folder_in_tree_view (window);
- private->drag_base_dir = _g_path_remove_level (selected_folder);
- private->drag_file_list = file_list;
-
- wait_dnd_extraction (window);
-
- g_free (selected_folder);
- }
-
- g_object_unref (destination_folder);
-
- /* sends back the response */
-
- xds_response = ((private->drag_error == NULL && !private->dnd_extract_finished_with_error) ? "S" :
"E");
- gtk_selection_data_set (selection_data, gtk_selection_data_get_target (selection_data), 8, (guchar *)
xds_response, 1);
-
- private->dnd_extract_finished_with_error = FALSE;
-
- debug (DEBUG_INFO, "::DragDataGet <--\n");
-
- return;
-}
-
-
-gboolean
-fr_window_file_list_drag_data_get (FrWindow *window,
- GdkDragContext *context,
- GtkSelectionData *selection_data,
- GList *path_list)
-{
- FrWindowPrivate *private = fr_window_get_instance_private (window);
- char *uri;
- char *xds_response;
- GFile *destination;
- GFile *destination_folder;
-
- debug (DEBUG_INFO, "::DragDataGet -->\n");
-
- if (private->path_clicked != NULL) {
- gtk_tree_path_free (private->path_clicked);
- private->path_clicked = NULL;
- }
-
- if (private->activity_ref > 0)
- return FALSE;
-
- if (gtk_selection_data_get_target (selection_data) == XFR_ATOM) {
- FrClipboardData *tmp;
- char *data;
-
- tmp = fr_clipboard_data_new ();
- tmp->files = fr_window_get_file_list_selection (window, TRUE, FALSE, NULL);
- tmp->op = FR_CLIPBOARD_OP_COPY;
- tmp->base_dir = g_strdup (fr_window_get_current_location (window));
-
- data = get_selection_data_from_clipboard_data (window, tmp);
- gtk_selection_data_set (selection_data, XFR_ATOM, 8, (guchar *) data, strlen (data));
-
- fr_clipboard_data_unref (tmp);
- g_free (data);
-
- return TRUE;
- }
-
- if (! nautilus_xds_dnd_is_valid_xds_context (context))
- return FALSE;
-
- uri = get_xds_atom_value (context);
- g_return_val_if_fail (uri != NULL, FALSE);
-
- destination = g_file_new_for_uri (uri);
- g_free (uri);
-
- if (destination == NULL)
- return FALSE;
-
- destination_folder = g_file_get_parent (destination);
- g_object_unref (destination);
-
- if (destination_folder == NULL)
- return FALSE;
-
- /* check whether the extraction can be performed in the destination
- * folder */
-
- g_clear_error (&private->drag_error);
-
- if (! _g_file_check_permissions (destination_folder, R_OK | W_OK)) {
- char *display_name;
-
- display_name = _g_file_get_display_basename (destination_folder);
- private->drag_error = g_error_new (FR_ERROR, 0, _("You don’t have the right permissions to
extract archives in the folder “%s”"), display_name);
-
- g_free (display_name);
- }
-
- if (private->drag_error == NULL) {
- _g_object_unref (private->drag_destination_folder);
- g_free (private->drag_base_dir);
- _g_string_list_free (private->drag_file_list);
- private->drag_destination_folder = g_object_ref (destination_folder);
- private->drag_base_dir = g_strdup (fr_window_get_current_location (window));
- private->drag_file_list = fr_window_get_file_list_from_path_list (window, path_list, NULL);
-
- wait_dnd_extraction (window);
- }
-
- g_object_unref (destination_folder);
-
- /* sends back the response */
-
- xds_response = ((private->drag_error == NULL && !private->dnd_extract_finished_with_error) ? "S" :
"E");
- gtk_selection_data_set (selection_data, gtk_selection_data_get_target (selection_data), 8, (guchar *)
xds_response, 1);
-
- private->dnd_extract_finished_with_error = FALSE;
-
- debug (DEBUG_INFO, "::DragDataGet <--\n");
-
- return TRUE;
-}
-
-
-/* -- window_new -- */
+/* -- window_new -- */
static void
@@ -4823,15 +4130,17 @@ fr_window_update_columns_visibility (FrWindow *window)
static gboolean
-key_press_cb (GtkWidget *widget,
- GdkEventKey *event,
- gpointer data)
+key_press_cb (GtkEventControllerKey *self,
+ guint keyval,
+ guint keycode,
+ GdkModifierType state,
+ gpointer user_data)
{
- FrWindow *window = data;
+ FrWindow *window = user_data;
FrWindowPrivate *private = fr_window_get_instance_private (window);
gboolean retval = GDK_EVENT_PROPAGATE;
- gboolean alt;
guint modifiers;
+ gboolean alt_pressed;
if (gtk_widget_has_focus (private->location_entry))
return GDK_EVENT_PROPAGATE;
@@ -4840,10 +4149,9 @@ key_press_cb (GtkWidget *widget,
return GDK_EVENT_PROPAGATE;
modifiers = gtk_accelerator_get_default_mod_mask ();
+ alt_pressed = (state & modifiers) == GDK_ALT_MASK;
- alt = (event->state & modifiers) == GDK_MOD1_MASK;
-
- switch (event->keyval) {
+ switch (keyval) {
case GDK_KEY_Escape:
fr_window_stop (window);
if (private->filter_mode)
@@ -4853,9 +4161,10 @@ key_press_cb (GtkWidget *widget,
case GDK_KEY_F10:
case GDK_KEY_Menu:
- if ((event->keyval == GDK_KEY_Menu) ||
- ((event->keyval == GDK_KEY_F10) &&
- (event->state & modifiers) == GDK_SHIFT_MASK)) {
+ if ((keyval == GDK_KEY_Menu) ||
+ ((keyval == GDK_KEY_F10) &&
+ (state & modifiers) == GDK_SHIFT_MASK))
+ {
GtkTreeSelection *selection;
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (private->list_view));
@@ -4869,7 +4178,7 @@ key_press_cb (GtkWidget *widget,
case GDK_KEY_Up:
case GDK_KEY_KP_Up:
- if (alt) {
+ if (alt_pressed) {
fr_window_go_up_one_level (window);
retval = GDK_EVENT_STOP;
}
@@ -4882,7 +4191,7 @@ key_press_cb (GtkWidget *widget,
case GDK_KEY_Right:
case GDK_KEY_KP_Right:
- if (alt) {
+ if (alt_pressed) {
fr_window_go_forward (window);
retval = GDK_EVENT_STOP;
}
@@ -4890,7 +4199,7 @@ key_press_cb (GtkWidget *widget,
case GDK_KEY_Left:
case GDK_KEY_KP_Left:
- if (alt) {
+ if (alt_pressed) {
fr_window_go_back (window);
retval = GDK_EVENT_STOP;
}
@@ -4898,7 +4207,7 @@ key_press_cb (GtkWidget *widget,
case GDK_KEY_Home:
case GDK_KEY_KP_Home:
- if (alt) {
+ if (alt_pressed) {
fr_window_go_to_location (window, "/", FALSE);
retval = GDK_EVENT_STOP;
}
@@ -5039,7 +4348,7 @@ add_dir_tree_columns (FrWindow *window,
renderer = gtk_cell_renderer_pixbuf_new ();
gtk_tree_view_column_pack_start (column, renderer, FALSE);
gtk_tree_view_column_set_attributes (column, renderer,
- "pixbuf", TREE_COLUMN_ICON,
+ "gicon", TREE_COLUMN_ICON,
NULL);
/* name */
@@ -5090,7 +4399,7 @@ add_file_list_columns (FrWindow *window,
renderer = gtk_cell_renderer_pixbuf_new ();
gtk_tree_view_column_pack_end (column, renderer, FALSE);
gtk_tree_view_column_set_attributes (column, renderer,
- "pixbuf", COLUMN_EMBLEM,
+ "gicon", COLUMN_EMBLEM,
NULL);
/* icon */
@@ -5098,7 +4407,7 @@ add_file_list_columns (FrWindow *window,
renderer = gtk_cell_renderer_pixbuf_new ();
gtk_tree_view_column_pack_start (column, renderer, FALSE);
gtk_tree_view_column_set_attributes (column, renderer,
- "pixbuf", COLUMN_ICON,
+ "gicon", COLUMN_ICON,
NULL);
/* name */
@@ -5346,22 +4655,20 @@ fr_window_show_cb (GtkWidget *widget,
static void
pref_view_folders_changed (GSettings *settings,
- const char *key,
- gpointer user_data)
+ const char *key,
+ gpointer user_data)
{
FrWindow *window = user_data;
-
fr_window_set_folders_visibility (window, g_settings_get_boolean (settings, key));
}
static void
pref_show_field_changed (GSettings *settings,
- const char *key,
- gpointer user_data)
+ const char *key,
+ gpointer user_data)
{
FrWindow *window = user_data;
-
fr_window_update_columns_visibility (window);
}
@@ -5372,43 +4679,20 @@ pref_list_mode_changed (GSettings *settings,
gpointer user_data)
{
FrWindow *window = user_data;
-
fr_window_set_list_mode (window, g_settings_get_enum (settings, key));
}
static void
pref_click_policy_changed (GSettings *settings,
- const char *key,
- gpointer user_data)
+ const char *key,
+ gpointer user_data)
{
- FrWindow *window = user_data;
+ FrWindow *window = user_data;
FrWindowPrivate *private = fr_window_get_instance_private (window);
- GdkWindow *win = gtk_tree_view_get_bin_window (GTK_TREE_VIEW (private->list_view));
- GdkDisplay *display;
private->single_click = is_single_click_policy (window);
-
- gdk_window_set_cursor (win, NULL);
- display = gtk_widget_get_display (GTK_WIDGET (private->list_view));
- if (display != NULL)
- gdk_display_flush (display);
-}
-
-
-static void
-theme_changed_cb (GtkIconTheme *theme,
- FrWindow *window)
-{
- FrWindowPrivate *private = fr_window_get_instance_private (window);
- if (private->populating_file_list)
- return;
-
- gth_icon_cache_clear (private->list_icon_cache);
- gth_icon_cache_clear (private->tree_icon_cache);
-
- fr_window_update_file_list (window, TRUE);
- fr_window_update_dir_tree (window);
+ gtk_tree_view_set_activate_on_single_click (GTK_TREE_VIEW (private->list_view),
private->single_click);
}
@@ -5418,19 +4702,19 @@ fr_archive_stoppable_cb (FrArchive *archive,
FrWindow *window)
{
FrWindowPrivate *private = fr_window_get_instance_private (window);
+
private->stoppable = stoppable;
if (private->progress_dialog != NULL)
gtk_dialog_set_response_sensitive (GTK_DIALOG (private->progress_dialog),
GTK_RESPONSE_OK,
stoppable);
- return;
}
static void
fr_window_activate_filter (FrWindow *window)
{
- FrWindowPrivate *private = fr_window_get_instance_private (window);
+ FrWindowPrivate *private = fr_window_get_instance_private (window);
GtkTreeView *tree_view = GTK_TREE_VIEW (private->list_view);
GtkTreeViewColumn *column;
@@ -5538,7 +4822,6 @@ fr_window_construct (FrWindow *window)
FrWindowPrivate *private = fr_window_get_instance_private (window);
GtkWidget *list_scrolled_window;
GtkWidget *navigation_commands;
- GtkWidget *location_bar_content;
GtkWidget *location_box;
GtkWidget *filter_box;
GtkWidget *tree_scrolled_window;
@@ -5572,20 +4855,16 @@ fr_window_construct (FrWindow *window)
G_CALLBACK (fr_window_show_cb),
window);
- private->theme_changed_handler_id =
- g_signal_connect (gtk_icon_theme_get_default (),
- "changed",
- G_CALLBACK (theme_changed_cb),
- window);
-
gtk_window_set_default_size (GTK_WINDOW (window),
g_settings_get_int (private->settings_ui, PREF_UI_WINDOW_WIDTH),
g_settings_get_int (private->settings_ui, PREF_UI_WINDOW_HEIGHT));
- g_signal_connect (window,
- "key_press_event",
+ GtkEventController *key_controller = gtk_event_controller_key_new ();
+ g_signal_connect (key_controller,
+ "key-pressed",
G_CALLBACK (key_press_cb),
window);
+ gtk_widget_add_controller (GTK_WIDGET (window), key_controller);
/* Initialize Data. */
@@ -5629,8 +4908,6 @@ fr_window_construct (FrWindow *window)
private->batch_adding_one_file = FALSE;
- private->path_clicked = NULL;
-
private->current_view_length = 0;
private->current_action.type = FR_BATCH_ACTION_NONE;
@@ -5645,23 +4922,22 @@ fr_window_construct (FrWindow *window)
/* * File list. */
- private->list_store = fr_list_model_new (NUMBER_OF_COLUMNS,
- G_TYPE_POINTER,
- GDK_TYPE_PIXBUF,
- G_TYPE_STRING,
- GDK_TYPE_PIXBUF,
- G_TYPE_STRING,
- G_TYPE_STRING,
- G_TYPE_STRING,
- G_TYPE_STRING);
+ private->list_store = gtk_list_store_new (NUMBER_OF_COLUMNS,
+ G_TYPE_POINTER,
+ GDK_TYPE_PIXBUF,
+ G_TYPE_STRING,
+ GDK_TYPE_PIXBUF,
+ G_TYPE_STRING,
+ G_TYPE_STRING,
+ G_TYPE_STRING,
+ G_TYPE_STRING);
g_object_set_data (G_OBJECT (private->list_store), "FrWindow", window);
private->list_view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (private->list_store));
add_file_list_columns (window, GTK_TREE_VIEW (private->list_view));
- gtk_tree_view_set_enable_search (GTK_TREE_VIEW (private->list_view),
- TRUE);
- gtk_tree_view_set_search_column (GTK_TREE_VIEW (private->list_view),
- COLUMN_NAME);
+ gtk_tree_view_set_enable_search (GTK_TREE_VIEW (private->list_view), TRUE);
+ gtk_tree_view_set_search_column (GTK_TREE_VIEW (private->list_view), COLUMN_NAME);
+ gtk_tree_view_set_activate_on_single_click (GTK_TREE_VIEW (private->list_view),
private->single_click);
gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (private->list_store),
FR_WINDOW_SORT_BY_NAME, name_column_sort_func,
@@ -5687,36 +4963,35 @@ fr_window_construct (FrWindow *window)
G_CALLBACK (selection_changed_cb),
window);
g_signal_connect (GTK_TREE_VIEW (private->list_view),
- "row_activated",
+ "row-activated",
G_CALLBACK (row_activated_cb),
window);
- g_signal_connect (GTK_TREE_VIEW (private->list_view),
- "button_press_event",
- G_CALLBACK (file_button_press_cb),
+
+ GtkGesture *gesture_click = gtk_gesture_click_new ();
+ gtk_gesture_single_set_button (GTK_GESTURE_SINGLE (gesture_click), 0);
+ g_signal_connect (gesture_click,
+ "pressed",
+ G_CALLBACK (list_view_button_pressed_cb),
window);
- g_signal_connect (GTK_TREE_VIEW (private->list_view),
- "button_release_event",
- G_CALLBACK (file_button_release_cb),
+ gtk_widget_add_controller (GTK_WIDGET (private->list_view), GTK_EVENT_CONTROLLER (gesture_click));
+
+ GtkEventController *event_controller = gtk_event_controller_legacy_new ();
+ g_signal_connect (event_controller,
+ "event",
+ G_CALLBACK (list_view_events_cb),
window);
- g_signal_connect (GTK_TREE_VIEW (private->list_view),
+ gtk_widget_add_controller (GTK_WIDGET (private->list_view), event_controller);
+
+ /*g_signal_connect (GTK_TREE_VIEW (private->list_view),
"motion_notify_event",
G_CALLBACK (file_motion_notify_callback),
window);
g_signal_connect (GTK_TREE_VIEW (private->list_view),
"leave_notify_event",
G_CALLBACK (file_leave_notify_callback),
- window);
- g_signal_connect (GTK_TREE_VIEW (private->list_view),
- "drag_begin",
- G_CALLBACK (file_list_drag_begin),
- window);
- g_signal_connect (GTK_TREE_VIEW (private->list_view),
- "drag_end",
- G_CALLBACK (file_list_drag_end),
- window);
- egg_tree_multi_drag_add_drag_support (GTK_TREE_VIEW (private->list_view));
+ window);*/
- list_scrolled_window = gtk_scrolled_window_new (NULL, NULL);
+ list_scrolled_window = gtk_scrolled_window_new ();
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (list_scrolled_window),
GTK_POLICY_AUTOMATIC,
GTK_POLICY_AUTOMATIC);
@@ -5727,7 +5002,7 @@ fr_window_construct (FrWindow *window)
private->filter_bar = gtk_search_bar_new ();
filter_box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
private->filter_entry = gtk_search_entry_new ();
- gtk_entry_set_width_chars (GTK_ENTRY (private->filter_entry), 40);
+ gtk_editable_set_width_chars (GTK_EDITABLE (private->filter_entry), 40);
g_signal_connect (GTK_SEARCH_ENTRY (private->filter_entry),
"search-changed",
G_CALLBACK (filter_entry_search_changed_cb),
@@ -5736,9 +5011,9 @@ fr_window_construct (FrWindow *window)
"stop-search",
G_CALLBACK (filter_entry_stop_search_cb),
window);
- gtk_search_bar_connect_entry (GTK_SEARCH_BAR (private->filter_bar), GTK_ENTRY
(private->filter_entry));
+ gtk_search_bar_connect_entry (GTK_SEARCH_BAR (private->filter_bar), GTK_EDITABLE
(private->filter_entry));
gtk_search_bar_set_child (GTK_SEARCH_BAR (private->filter_bar), filter_box);
- _gtk_box_append_expanded (GTK_BOX (filter_box), private->filter_entry);
+ _gtk_box_pack_start (GTK_BOX (filter_box), private->filter_entry, TRUE, FALSE);
gtk_widget_show (private->filter_bar);
fr_window_attach (FR_WINDOW (window), private->filter_bar, FR_WINDOW_AREA_FILTERBAR);
@@ -5753,10 +5028,12 @@ fr_window_construct (FrWindow *window)
gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (private->tree_view), FALSE);
add_dir_tree_columns (window, GTK_TREE_VIEW (private->tree_view));
- g_signal_connect (GTK_TREE_VIEW (private->tree_view),
- "button_press_event",
- G_CALLBACK (dir_tree_button_press_cb),
+ event_controller = gtk_event_controller_legacy_new ();
+ g_signal_connect (event_controller,
+ "event",
+ G_CALLBACK (dir_tree_events_cb),
window);
+ gtk_widget_add_controller (GTK_WIDGET (private->tree_view), GTK_EVENT_CONTROLLER (event_controller));
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (private->tree_view));
g_signal_connect (selection,
@@ -5764,7 +5041,7 @@ fr_window_construct (FrWindow *window)
G_CALLBACK (dir_tree_selection_changed_cb),
window);
- g_signal_connect (GTK_TREE_VIEW (private->tree_view),
+ /*g_signal_connect (GTK_TREE_VIEW (private->tree_view),
"drag_begin",
G_CALLBACK (folde_tree_drag_begin),
window);
@@ -5775,13 +5052,13 @@ fr_window_construct (FrWindow *window)
g_signal_connect (GTK_TREE_VIEW (private->tree_view),
"drag_data_get",
G_CALLBACK (fr_window_folder_tree_drag_data_get),
- window);
- gtk_drag_source_set (private->tree_view,
+ window);*/
+ /*gtk_drag_source_set (private->tree_view,
GDK_BUTTON1_MASK,
folder_tree_targets, G_N_ELEMENTS (folder_tree_targets),
- GDK_ACTION_COPY);
+ GDK_ACTION_COPY);*/
- tree_scrolled_window = gtk_scrolled_window_new (NULL, NULL);
+ tree_scrolled_window = gtk_scrolled_window_new ();
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (tree_scrolled_window),
GTK_POLICY_AUTOMATIC,
GTK_POLICY_AUTOMATIC);
@@ -5790,27 +5067,27 @@ fr_window_construct (FrWindow *window)
/* side pane */
private->sidepane = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
- _gtk_box_append_expanded (GTK_BOX (private->sidepane), tree_scrolled_window);
+ _gtk_box_pack_start (GTK_BOX (private->sidepane), tree_scrolled_window, TRUE, TRUE);
/* main content */
private->paned = gtk_paned_new (GTK_ORIENTATION_HORIZONTAL);
- gtk_paned_pack1 (GTK_PANED (private->paned), private->sidepane, FALSE, TRUE);
- gtk_paned_pack2 (GTK_PANED (private->paned), list_scrolled_window, TRUE, TRUE);
+ gtk_paned_set_start_child (GTK_PANED (private->paned), private->sidepane);
+ gtk_paned_set_end_child (GTK_PANED (private->paned), list_scrolled_window);
gtk_paned_set_position (GTK_PANED (private->paned), g_settings_get_int (private->settings_ui,
PREF_UI_SIDEBAR_WIDTH));
- gtk_drag_dest_set (GTK_WIDGET (private->paned),
+ /*gtk_drag_dest_set (GTK_WIDGET (private->paned),
GTK_DEST_DEFAULT_ALL,
target_table, G_N_ELEMENTS (target_table),
- GDK_ACTION_COPY);
+ GDK_ACTION_COPY);*/
- g_signal_connect (GTK_PANED (private->paned),
+ /*g_signal_connect (GTK_PANED (private->paned),
"drag_data_received",
G_CALLBACK (fr_window_drag_data_received),
window);
g_signal_connect (GTK_PANED (private->paned),
"drag_motion",
G_CALLBACK (fr_window_drag_motion),
- window);
+ window);*/
fr_window_attach (FR_WINDOW (window), private->paned, FR_WINDOW_AREA_CONTENTS);
gtk_widget_show (private->paned);
@@ -5829,7 +5106,7 @@ fr_window_construct (FrWindow *window)
private->headerbar = gtk_header_bar_new ();
gtk_widget_show (private->headerbar);
- gtk_header_bar_set_show_close_button (GTK_HEADER_BAR (private->headerbar), TRUE);
+ gtk_header_bar_set_show_title_buttons (GTK_HEADER_BAR (private->headerbar), TRUE);
gtk_window_set_titlebar (GTK_WINDOW (window), private->headerbar);
/* header bar buttons */
@@ -5872,11 +5149,7 @@ fr_window_construct (FrWindow *window)
/* location bar */
- private->location_bar = fr_location_bar_new ();
-
- location_bar_content = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
- gtk_container_set_border_width (GTK_CONTAINER (location_bar_content), 4);
- _gtk_box_append_expanded (GTK_BOX (private->location_bar), location_bar_content);
+ private->location_bar = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
navigation_commands = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
gtk_box_append (GTK_BOX (navigation_commands),
@@ -5886,8 +5159,8 @@ fr_window_construct (FrWindow *window)
gtk_widget_show (navigation_commands);
gtk_style_context_add_class (gtk_widget_get_style_context (navigation_commands), "raised");
gtk_style_context_add_class (gtk_widget_get_style_context (navigation_commands), "linked");
- gtk_box_append (GTK_BOX (location_bar_content), navigation_commands);
- gtk_box_append (GTK_BOX (location_bar_content),
+ gtk_box_append (GTK_BOX (private->location_bar), navigation_commands);
+ gtk_box_append (GTK_BOX (private->location_bar),
_gtk_header_bar_create_image_button ("user-home-symbolic", _("Go to the home
location"), "win.go-home"));
/* current location */
@@ -5895,8 +5168,8 @@ fr_window_construct (FrWindow *window)
location_box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
/* Translators: after the colon there is a folder name. */
private->location_label = gtk_label_new_with_mnemonic (_("_Location:"));
- gtk_widget_set_margin_right (private->location_label, 5);
- gtk_widget_set_margin_left (private->location_label, 5);
+ gtk_widget_set_margin_start (private->location_label, 5);
+ gtk_widget_set_margin_end (private->location_label, 5);
gtk_box_append (GTK_BOX (location_box), private->location_label);
private->location_entry = gtk_entry_new ();
@@ -5904,13 +5177,13 @@ fr_window_construct (FrWindow *window)
GTK_ENTRY_ICON_PRIMARY,
"folder-symbolic");
g_signal_connect (GTK_ENTRY (private->location_entry),
- "key_press_event",
- G_CALLBACK (location_entry_key_press_event_cb),
+ "activate",
+ G_CALLBACK (location_entry_activate_cb),
window);
- gtk_widget_set_margin_right (private->location_entry, 5);
- gtk_widget_set_margin_left (private->location_entry, 5);
- _gtk_box_append_expanded (GTK_BOX (location_box), private->location_entry);
- _gtk_box_append_expanded (GTK_BOX (location_bar_content), location_box);
+ gtk_widget_set_margin_start (private->location_entry, 5);
+ gtk_widget_set_margin_end (private->location_entry, 5);
+ _gtk_box_pack_start (GTK_BOX (location_box), private->location_entry, TRUE, FALSE);
+ _gtk_box_pack_start (GTK_BOX (private->location_bar), location_box, TRUE, FALSE);
gtk_widget_show (private->location_bar);
fr_window_attach (FR_WINDOW (window), private->location_bar, FR_WINDOW_AREA_LOCATIONBAR);
@@ -5925,9 +5198,9 @@ fr_window_construct (FrWindow *window)
builder = gtk_builder_new_from_resource (FILE_ROLLER_RESOURCE_UI_PATH "menus.ui");
- private->file_popup_menu = gtk_popover_new_from_model (private->list_view, G_MENU_MODEL
(gtk_builder_get_object (builder, "file-popup")));
- private->folder_popup_menu = gtk_popover_new_from_model (private->list_view, G_MENU_MODEL
(gtk_builder_get_object (builder, "folder-popup")));
- private->sidebar_folder_popup_menu = gtk_popover_new_from_model (private->tree_view,
G_MENU_MODEL (gtk_builder_get_object (builder, "sidebar-popup")));
+ private->file_popup_menu = gtk_popover_menu_new_from_model (G_MENU_MODEL
(gtk_builder_get_object (builder, "file-popup")));
+ private->folder_popup_menu = gtk_popover_menu_new_from_model (G_MENU_MODEL
(gtk_builder_get_object (builder, "folder-popup")));
+ private->sidebar_folder_popup_menu = gtk_popover_menu_new_from_model (G_MENU_MODEL
(gtk_builder_get_object (builder, "sidebar-popup")));
g_object_unref (builder);
}
@@ -6166,8 +5439,6 @@ fr_window_archive_close (FrWindow *window)
return;
fr_window_free_open_files (window);
- fr_clipboard_data_unref (private->copy_data);
- private->copy_data = NULL;
fr_window_set_password (window, NULL);
fr_window_set_volume_size (window, 0);
@@ -6282,7 +5553,7 @@ archive_add_files_ready_cb (GObject *source_object,
private->destroy_with_confirmation_dialog = TRUE;
fr_window_show_confirmation_dialog_with_open_archive (window);
- if (! gtk_window_has_toplevel_focus (GTK_WINDOW (private->progress_dialog)))
+ if (! gtk_widget_has_focus (private->progress_dialog))
_fr_window_notify_creation_complete (window);
}
@@ -6556,7 +5827,7 @@ archive_extraction_ready_cb (GObject *source_object,
private->destroy_with_confirmation_dialog = private->batch_mode;
fr_window_show_confirmation_dialog_with_open_destination (window);
}
- else if ((error == NULL) && ! batch_mode && ! gtk_window_has_toplevel_focus (GTK_WINDOW
(private->progress_dialog)))
+ else if ((error == NULL) && ! batch_mode && ! gtk_widget_has_focus (private->progress_dialog))
gtk_window_present (GTK_WINDOW (window));
_g_error_free (error);
@@ -6870,14 +6141,36 @@ archive_is_encrypted (FrWindow *window,
}
-/* ask some questions to the user before calling _fr_window_archive_extract_from_edata */
+static void _fr_window_archive_extract_from_edata_maybe (FrWindow *window,
+ ExtractData *edata);
+
+
+static void
+confirm_create_folder_on_extract_dialog_response (GtkDialog *dialog,
+ int response_id,
+ ExtractData *edata)
+{
+ gtk_window_destroy (GTK_WINDOW (dialog));
+
+ if (response_id != GTK_RESPONSE_YES) {
+ fr_window_batch_stop (edata->window);
+ fr_window_dnd_extraction_finished (edata->window, TRUE);
+ }
+ else {
+ /* Try again. */
+ _fr_window_archive_extract_from_edata_maybe (edata->window, edata);
+ }
+}
+
+
+/* Ask some questions to the user before calling _fr_window_archive_extract_from_edata */
static void
_fr_window_archive_extract_from_edata_maybe (FrWindow *window,
ExtractData *edata)
{
FrWindowPrivate *private = fr_window_get_instance_private (window);
- gboolean do_not_extract = FALSE;
- GError *error = NULL;
+ gboolean do_not_extract = FALSE;
+ GError *error = NULL;
if (archive_is_encrypted (window, edata->file_list) && (private->password == NULL)) {
dlg_ask_password (window);
@@ -6885,79 +6178,75 @@ _fr_window_archive_extract_from_edata_maybe (FrWindow *window,
}
if (! _g_file_query_is_dir (edata->destination)) {
-
/* There is nothing to ask if the destination doesn't exist. */
if (edata->overwrite == FR_OVERWRITE_ASK)
edata->overwrite = FR_OVERWRITE_YES;
if (! ForceDirectoryCreation && ! edata->avoid_tarbombs) {
- GtkWidget *d;
- int r;
char *folder_name;
char *msg;
+ GtkWidget *msg_dialog;
folder_name = _g_file_get_display_basename (edata->destination);
msg = g_strdup_printf (_("Destination folder “%s” does not exist.\n\nDo you want to
create it?"), folder_name);
- g_free (folder_name);
-
- d = _gtk_message_dialog_new (GTK_WINDOW (window),
- GTK_DIALOG_MODAL,
- msg,
- NULL,
- _GTK_LABEL_CANCEL, GTK_RESPONSE_CANCEL,
- _("Create _Folder"), GTK_RESPONSE_YES,
- NULL);
-
- gtk_dialog_set_default_response (GTK_DIALOG (d), GTK_RESPONSE_YES);
- r = gtk_dialog_run (GTK_DIALOG (d));
- gtk_window_destroy (GTK_WINDOW (d));
+ msg_dialog = _gtk_message_dialog_new (
+ GTK_WINDOW (window),
+ GTK_DIALOG_MODAL,
+ msg,
+ NULL,
+ _GTK_LABEL_CANCEL, GTK_RESPONSE_CANCEL,
+ _("Create _Folder"), GTK_RESPONSE_YES,
+ NULL);
+ gtk_dialog_set_default_response (GTK_DIALOG (msg_dialog), GTK_RESPONSE_YES);
+ g_signal_connect (GTK_DIALOG (msg_dialog),
+ "response",
+ G_CALLBACK (confirm_create_folder_on_extract_dialog_response),
+ edata);
+ gtk_widget_show (GTK_WIDGET (msg_dialog));
g_free (msg);
-
- if (r != GTK_RESPONSE_YES)
- do_not_extract = TRUE;
+ g_free (folder_name);
+ return;
}
if (! do_not_extract && ! _g_file_make_directory_tree (edata->destination, 0755, &error)) {
- GtkWidget *d;
char *details;
+ GtkWidget *msg_dialog;
details = g_strdup_printf (_("Could not create the destination folder: %s."),
error->message);
- d = _gtk_error_dialog_new (GTK_WINDOW (window),
- 0,
- NULL,
- _("Extraction not performed"),
- "%s",
- details);
- g_clear_error (&error);
- fr_window_show_error_dialog (window, d, GTK_WINDOW (window), details);
+ msg_dialog = _gtk_error_dialog_new (
+ GTK_WINDOW (window),
+ 0,
+ NULL,
+ _("Extraction not performed"),
+ "%s",
+ details);
+ fr_window_show_error_dialog (window, msg_dialog, GTK_WINDOW (window), details);
+
fr_window_batch_stop (window);
fr_window_dnd_extraction_finished (window, TRUE);
g_free (details);
-
+ g_clear_error (&error);
return;
}
}
if (do_not_extract) {
- GtkWidget *d;
+ GtkWidget *msg_dialog = _gtk_message_dialog_new (
+ GTK_WINDOW (window),
+ 0,
+ _("Extraction not performed"),
+ NULL,
+ _GTK_LABEL_CLOSE, GTK_RESPONSE_OK,
+ NULL);
+ gtk_dialog_set_default_response (GTK_DIALOG (msg_dialog), GTK_RESPONSE_OK);
+ fr_window_show_error_dialog (window, msg_dialog, GTK_WINDOW (window), _("Extraction not
performed"));
- d = _gtk_message_dialog_new (GTK_WINDOW (window),
- 0,
- _("Extraction not performed"),
- NULL,
- _GTK_LABEL_CLOSE, GTK_RESPONSE_OK,
- NULL);
- gtk_dialog_set_default_response (GTK_DIALOG (d), GTK_RESPONSE_OK);
- fr_window_show_error_dialog (window, d, GTK_WINDOW (window), _("Extraction not performed"));
fr_window_batch_stop (window);
fr_window_dnd_extraction_finished (window, TRUE);
-
- return;
}
-
- if (edata->overwrite == FR_OVERWRITE_ASK) {
+ else if (edata->overwrite == FR_OVERWRITE_ASK) {
OverwriteData *odata;
odata = overwrite_data_new (window);
@@ -7654,8 +6943,7 @@ fr_window_archive_save_as (FrWindow *window,
message,
"%s",
_("Archive type not supported."));
- gtk_dialog_run (GTK_DIALOG (d));
- gtk_window_destroy (GTK_WINDOW (d));
+ _gtk_dialog_run (GTK_DIALOG (d));
g_free (message);
@@ -7712,43 +7000,48 @@ fr_window_archive_save_as (FrWindow *window,
static void
-save_as_archive_dialog_response_cb (GtkDialog *dialog,
- int response,
- gpointer user_data)
+save_as_new_get_file_cb (FrNewArchiveDialog *dialog,
+ GFile *file,
+ const char *mime_type,
+ gpointer user_data)
{
FrWindow *window = user_data;
- GFile *file;
- const char *mime_type;
const char *password;
gboolean encrypt_header;
int volume_size;
GSettings *settings;
- if ((response == GTK_RESPONSE_CANCEL) || (response == GTK_RESPONSE_DELETE_EVENT)) {
- gtk_window_destroy (GTK_WINDOW (dialog));
- _archive_operation_cancelled (window, FR_ACTION_CREATING_ARCHIVE);
- return;
- }
-
- if (response != GTK_RESPONSE_OK)
- return;
-
- file = fr_new_archive_dialog_get_file (FR_NEW_ARCHIVE_DIALOG (dialog), &mime_type);
if (file == NULL)
return;
- password = fr_new_archive_dialog_get_password (FR_NEW_ARCHIVE_DIALOG (dialog));
- encrypt_header = fr_new_archive_dialog_get_encrypt_header (FR_NEW_ARCHIVE_DIALOG (dialog));
- volume_size = fr_new_archive_dialog_get_volume_size (FR_NEW_ARCHIVE_DIALOG (dialog));
+ password = fr_new_archive_dialog_get_password (dialog);
+ encrypt_header = fr_new_archive_dialog_get_encrypt_header (dialog);
+ volume_size = fr_new_archive_dialog_get_volume_size (dialog);
settings = g_settings_new (FILE_ROLLER_SCHEMA_NEW);
g_settings_set_int (settings, PREF_NEW_VOLUME_SIZE, volume_size);
g_object_unref (settings);
fr_window_archive_save_as (window, file, mime_type, password, encrypt_header, volume_size);
-
gtk_window_destroy (GTK_WINDOW (dialog));
- g_object_unref (file);
+}
+
+
+static void
+save_as_archive_dialog_response_cb (GtkDialog *dialog,
+ int response,
+ gpointer user_data)
+{
+ FrWindow *window = user_data;
+
+ if ((response == GTK_RESPONSE_CANCEL) || (response == GTK_RESPONSE_DELETE_EVENT)) {
+ gtk_window_destroy (GTK_WINDOW (dialog));
+ _archive_operation_cancelled (window, FR_ACTION_CREATING_ARCHIVE);
+ }
+ else if (response == GTK_RESPONSE_OK)
+ fr_new_archive_dialog_get_file (FR_NEW_ARCHIVE_DIALOG (dialog),
+ save_as_new_get_file_cb,
+ window);
}
@@ -7756,8 +7049,8 @@ void
fr_window_action_save_as (FrWindow *window)
{
FrWindowPrivate *private = fr_window_get_instance_private (window);
- char *archive_name;
- GtkWidget *dialog;
+ char *archive_name;
+ GtkWidget *dialog;
archive_name = NULL;
if (private->archive_file != NULL) {
@@ -8016,8 +7309,7 @@ fr_window_archive_encrypt (FrWindow *window,
message,
"%s",
_("Archive type not supported."));
- gtk_dialog_run (GTK_DIALOG (d));
- gtk_window_destroy (GTK_WINDOW (d));
+ _gtk_dialog_run (GTK_DIALOG (d));
g_free (message);
g_object_unref (temp_new_file);
@@ -8115,12 +7407,11 @@ fr_window_view_last_output (FrWindow *window,
/* Add text */
- scrolled = gtk_scrolled_window_new (NULL, NULL);
+ scrolled = gtk_scrolled_window_new ();
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled),
GTK_POLICY_AUTOMATIC,
GTK_POLICY_AUTOMATIC);
- gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled),
- GTK_SHADOW_ETCHED_IN);
+ gtk_scrolled_window_set_has_frame (GTK_SCROLLED_WINDOW (scrolled), TRUE);
text_buffer = gtk_text_buffer_new (NULL);
gtk_text_buffer_create_tag (text_buffer, "monospace",
@@ -8134,13 +7425,13 @@ fr_window_view_last_output (FrWindow *window,
/**/
vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
- gtk_container_set_border_width (GTK_CONTAINER (vbox), 5);
+ _gtk_widget_set_margin (GTK_WIDGET (vbox), 5);
gtk_scrolled_window_set_child (GTK_SCROLLED_WINDOW (scrolled), text_view);
- _gtk_box_append_expanded (GTK_BOX (vbox), scrolled);
+ _gtk_box_pack_start (GTK_BOX (vbox), scrolled, TRUE, TRUE);
gtk_widget_show (vbox);
- _gtk_box_append_expanded (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), vbox);
+ _gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), vbox, TRUE, TRUE);
/* signals */
@@ -8382,179 +7673,191 @@ name_is_present (FrWindow *window,
}
+/* -- fr_window_rename_selection -- */
+
+
+typedef struct {
+ FrWindow *window;
+ gboolean from_sidebar;
+ char *path_to_rename;
+ char *parent_dir;
+ char *old_name;
+ gboolean renaming_dir;
+ gboolean dir_in_archive;
+ char *original_path;
+} RenameDialogData;
+
+
+static void
+rename_dialog_data_free (RenameDialogData *rename_data)
+{
+ g_free (rename_data->path_to_rename);
+ g_free (rename_data->parent_dir);
+ g_free (rename_data->old_name);
+ g_free (rename_data->original_path);
+ g_free (rename_data);
+}
+
+
+static void
+rename_dialog_response_cb (GtkDialog *dialog,
+ int response_id,
+ gpointer user_data)
+{
+ RenameDialogData *rename_data = user_data;
+ char *utf8_new_name;
+ char *new_name;
+ char *reason;
+
+ if (response_id != GTK_RESPONSE_YES) {
+ gtk_window_destroy (GTK_WINDOW (dialog));
+ rename_dialog_data_free (rename_data);
+ return;
+ }
+
+ utf8_new_name = _gth_request_dialog_get_text (dialog);
+ if (utf8_new_name == NULL) {
+ gtk_window_destroy (GTK_WINDOW (dialog));
+ rename_dialog_data_free (rename_data);
+ return;
+ }
+
+ new_name = g_filename_from_utf8 (utf8_new_name, -1, 0, 0, 0);
+ g_free (utf8_new_name);
+
+ reason = NULL;
+ if (! valid_name (new_name, rename_data->old_name, &reason)) {
+ GtkWidget *dlg;
+
+ dlg = _gtk_error_dialog_new (GTK_WINDOW (dialog),
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ NULL,
+ (rename_data->renaming_dir ? _("Could not rename the folder") :
_("Could not rename the file")),
+ "%s",
+ reason);
+ _gtk_dialog_run (GTK_DIALOG (dlg));
+
+ g_free (reason);
+ g_free (new_name);
+ return;
+ }
+
+ if (name_is_present (rename_data->window, rename_data->parent_dir, new_name, &reason)) {
+ GtkWidget *dlg;
+
+ dlg = _gtk_message_dialog_new (GTK_WINDOW (dialog),
+ GTK_DIALOG_MODAL,
+ (rename_data->renaming_dir ? _("Could not rename the folder")
: _("Could not rename the file")),
+ reason,
+ _GTK_LABEL_CLOSE, GTK_RESPONSE_OK,
+ NULL);
+ _gtk_dialog_run (GTK_DIALOG (dlg));
+
+ g_free (reason);
+ g_free (new_name);
+ return;
+ }
+
+ gtk_window_destroy (GTK_WINDOW (dialog));
+
+ rename_selection (rename_data->window,
+ rename_data->path_to_rename,
+ rename_data->old_name,
+ new_name,
+ rename_data->parent_dir,
+ rename_data->renaming_dir,
+ rename_data->dir_in_archive,
+ rename_data->original_path);
+
+ g_free (new_name);
+ rename_dialog_data_free (rename_data);
+}
+
+
void
fr_window_rename_selection (FrWindow *window,
gboolean from_sidebar)
{
- char *path_to_rename;
- char *parent_dir;
- char *old_name;
- gboolean renaming_dir = FALSE;
- gboolean dir_in_archive = FALSE;
- char *original_path = NULL;
- char *utf8_old_name;
- char *utf8_new_name;
+ RenameDialogData *rename_data;
+ char *utf8_old_name;
+ GtkWidget *rename_dialog;
+
+ rename_data = g_new0 (RenameDialogData, 1);
+ rename_data->window = window;
+ rename_data->from_sidebar = from_sidebar;
+ rename_data->renaming_dir = FALSE;
+ rename_data->dir_in_archive = FALSE;
if (from_sidebar) {
- path_to_rename = fr_window_get_selected_folder_in_tree_view (window);
- if (path_to_rename == NULL)
+ rename_data->path_to_rename = fr_window_get_selected_folder_in_tree_view (window);
+ if (rename_data->path_to_rename == NULL) {
+ rename_dialog_data_free (rename_data);
return;
- parent_dir = _g_path_remove_level (path_to_rename);
- old_name = g_strdup (_g_path_get_basename (path_to_rename));
- renaming_dir = TRUE;
+ }
+ rename_data->parent_dir = _g_path_remove_level (rename_data->path_to_rename);
+ rename_data->old_name = g_strdup (_g_path_get_basename (rename_data->path_to_rename));
+ rename_data->renaming_dir = TRUE;
}
else {
FrFileData *selected_item;
selected_item = fr_window_get_selected_item_from_file_list (window);
- if (selected_item == NULL)
+ if (selected_item == NULL) {
+ rename_dialog_data_free (rename_data);
return;
+ }
- renaming_dir = fr_file_data_is_dir (selected_item);
- dir_in_archive = selected_item->dir && ! selected_item->list_dir;
- original_path = g_strdup (selected_item->original_path);
+ rename_data->renaming_dir = fr_file_data_is_dir (selected_item);
+ rename_data->dir_in_archive = selected_item->dir && ! selected_item->list_dir;
+ rename_data->original_path = g_strdup (selected_item->original_path);
- if (renaming_dir && ! dir_in_archive) {
- parent_dir = g_strdup (fr_window_get_current_location (window));
- old_name = g_strdup (selected_item->list_name);
- path_to_rename = g_build_filename (parent_dir, old_name, NULL);
+ if (rename_data->renaming_dir && ! rename_data->dir_in_archive) {
+ rename_data->parent_dir = g_strdup (fr_window_get_current_location (window));
+ rename_data->old_name = g_strdup (selected_item->list_name);
+ rename_data->path_to_rename = g_build_filename (rename_data->parent_dir,
rename_data->old_name, NULL);
}
else {
- if (renaming_dir) {
- path_to_rename = _g_path_remove_ending_separator (selected_item->full_path);
- parent_dir = _g_path_remove_level (path_to_rename);
+ if (rename_data->renaming_dir) {
+ rename_data->path_to_rename = _g_path_remove_ending_separator
(selected_item->full_path);
+ rename_data->parent_dir = _g_path_remove_level (rename_data->path_to_rename);
}
else {
- path_to_rename = g_strdup (selected_item->original_path);
- parent_dir = _g_path_remove_level (selected_item->full_path);
+ rename_data->path_to_rename = g_strdup (selected_item->original_path);
+ rename_data->parent_dir = _g_path_remove_level (selected_item->full_path);
}
- old_name = g_strdup (selected_item->name);
+ rename_data->old_name = g_strdup (selected_item->name);
}
fr_file_data_free (selected_item);
}
- retry__rename_selection:
- utf8_old_name = g_locale_to_utf8 (old_name, -1 ,0 ,0 ,0);
- utf8_new_name = _gtk_request_dialog_run (GTK_WINDOW (window),
+ utf8_old_name = g_locale_to_utf8 (rename_data->old_name, -1 ,0 ,0 ,0);
+ rename_dialog = _gtk_request_dialog_new (GTK_WINDOW (rename_data->window),
(GTK_DIALOG_DESTROY_WITH_PARENT
| GTK_DIALOG_MODAL),
_("Rename"),
- (renaming_dir ? _("_New folder name:") : _("_New file
name:")),
+ (rename_data->renaming_dir ? _("_New folder name:") :
_("_New file name:")),
utf8_old_name,
1024,
_GTK_LABEL_CANCEL,
_("_Rename"));
- g_free (utf8_old_name);
-
- if (utf8_new_name != NULL) {
- char *new_name;
- char *reason = NULL;
-
- new_name = g_filename_from_utf8 (utf8_new_name, -1, 0, 0, 0);
- g_free (utf8_new_name);
-
- if (! valid_name (new_name, old_name, &reason)) {
- char *utf8_name = g_filename_display_name (new_name);
- GtkWidget *dlg;
-
- dlg = _gtk_error_dialog_new (GTK_WINDOW (window),
- GTK_DIALOG_DESTROY_WITH_PARENT,
- NULL,
- (renaming_dir ? _("Could not rename the folder") :
_("Could not rename the file")),
- "%s",
- reason);
- gtk_dialog_run (GTK_DIALOG (dlg));
- gtk_window_destroy (GTK_WINDOW (dlg));
-
- g_free (reason);
- g_free (utf8_name);
- g_free (new_name);
-
- goto retry__rename_selection;
- }
-
- if (name_is_present (window, parent_dir, new_name, &reason)) {
- GtkWidget *dlg;
-
- dlg = _gtk_message_dialog_new (GTK_WINDOW (window),
- GTK_DIALOG_MODAL,
- (renaming_dir ? _("Could not rename the folder") :
_("Could not rename the file")),
- reason,
- _GTK_LABEL_CLOSE, GTK_RESPONSE_OK,
- NULL);
- gtk_dialog_run (GTK_DIALOG (dlg));
- gtk_window_destroy (GTK_WINDOW (dlg));
- g_free (reason);
- g_free (new_name);
- goto retry__rename_selection;
- }
-
- rename_selection (window,
- path_to_rename,
- old_name,
- new_name,
- parent_dir,
- renaming_dir,
- dir_in_archive,
- original_path);
-
- g_free (new_name);
- }
+ g_signal_connect (rename_dialog,
+ "response",
+ G_CALLBACK (rename_dialog_response_cb),
+ rename_data);
+ gtk_widget_show (rename_dialog);
- g_free (old_name);
- g_free (parent_dir);
- g_free (path_to_rename);
- g_free (original_path);
+ g_free (utf8_old_name);
}
/* -- fr_window_paste_selection -- */
-static void
-fr_clipboard_get (GtkClipboard *clipboard,
- GtkSelectionData *selection_data,
- guint info,
- gpointer user_data_or_owner)
-{
- FrWindow *window = user_data_or_owner;
- FrWindowPrivate *private = fr_window_get_instance_private (window);
- char *data;
-
- if (gtk_selection_data_get_target (selection_data) != FR_SPECIAL_URI_LIST)
- return;
-
- data = get_selection_data_from_clipboard_data (window, private->copy_data);
- if (data != NULL) {
- gtk_selection_data_set (selection_data,
- gtk_selection_data_get_target (selection_data),
- 8,
- (guchar *) data,
- strlen (data));
- g_free (data);
- }
-}
-
-
-static void
-fr_clipboard_clear (GtkClipboard *clipboard,
- gpointer user_data_or_owner)
-{
- FrWindow *window = user_data_or_owner;
- FrWindowPrivate *private = fr_window_get_instance_private (window);
-
- if (private->copy_data != NULL) {
- fr_clipboard_data_unref (private->copy_data);
- private->copy_data = NULL;
- }
-}
-
-
GList *
fr_window_get_selection (FrWindow *window,
- gboolean from_sidebar,
- char **return_base_dir)
+ gboolean from_sidebar,
+ char **return_base_dir)
{
GList *files;
char *base_dir;
@@ -8592,29 +7895,19 @@ fr_window_get_selection (FrWindow *window,
static void
fr_window_copy_or_cut_selection (FrWindow *window,
FrClipboardOp op,
- gboolean from_sidebar)
+ gboolean from_sidebar)
{
- FrWindowPrivate *private = fr_window_get_instance_private (window);
- GList *files;
- char *base_dir;
- GtkClipboard *clipboard;
+ GList *files;
+ char *base_dir;
files = fr_window_get_selection (window, from_sidebar, &base_dir);
- if (private->copy_data != NULL)
- fr_clipboard_data_unref (private->copy_data);
- private->copy_data = fr_clipboard_data_new ();
- private->copy_data->files = files;
- private->copy_data->op = op;
- private->copy_data->base_dir = base_dir;
-
- clipboard = gtk_clipboard_get (_fr_window_get_clipboard_name (window));
- gtk_clipboard_set_with_owner (clipboard,
- clipboard_targets,
- G_N_ELEMENTS (clipboard_targets),
- fr_clipboard_get,
- fr_clipboard_clear,
- G_OBJECT (window));
+ if (app_clipboard != NULL)
+ fr_clipboard_data_unref (app_clipboard);
+ app_clipboard = fr_clipboard_data_new ();
+ app_clipboard->files = files;
+ app_clipboard->op = op;
+ app_clipboard->base_dir = base_dir;
fr_window_update_sensitivity (window);
}
@@ -8845,8 +8138,8 @@ paste_from_archive_open_cb (GObject *source_object,
fr_archive_action_started (private->copy_from_archive, FR_ACTION_LISTING_CONTENT);
fr_archive_list (private->copy_from_archive,
- private->clipboard_data->password,
- private->cancellable,
+ private->clipboard_data->password,
+ private->cancellable,
paste_from_archive_list_ready_cb,
window);
}
@@ -8885,9 +8178,9 @@ fr_window_paste_from_clipboard_data (FrWindow *window,
}
fr_window_set_current_action (window,
- FR_BATCH_ACTION_PASTE,
- fr_clipboard_data_ref (data),
- (GFreeFunc) fr_clipboard_data_unref);
+ FR_BATCH_ACTION_PASTE,
+ fr_clipboard_data_ref (data),
+ (GFreeFunc) fr_clipboard_data_unref);
current_dir_relative = data->current_dir + 1;
@@ -8935,7 +8228,7 @@ fr_window_paste_from_clipboard_data (FrWindow *window,
_window_started_loading_file (window, data->file);
fr_archive_open (data->file,
- private->cancellable,
+ private->cancellable,
paste_from_archive_open_cb,
window);
@@ -8948,62 +8241,79 @@ static void
fr_window_paste_selection_to (FrWindow *window,
const char *current_dir)
{
- GtkClipboard *clipboard;
- GtkSelectionData *selection_data;
- FrClipboardData *paste_data;
-
- clipboard = gtk_clipboard_get (_fr_window_get_clipboard_name (window));
- selection_data = gtk_clipboard_wait_for_contents (clipboard, FR_SPECIAL_URI_LIST);
- if (selection_data == NULL)
+ if (app_clipboard == NULL)
return;
-
- paste_data = get_clipboard_data_from_selection_data (window, (char*) gtk_selection_data_get_data
(selection_data));
+ FrClipboardData *paste_data = fr_clipboard_data_dup (app_clipboard);
paste_data->current_dir = g_strdup (current_dir);
fr_window_paste_from_clipboard_data (window, paste_data);
-
- gtk_selection_data_free (selection_data);
}
-void
-fr_window_paste_selection (FrWindow *window,
- gboolean from_sidebar)
+/* -- fr_window_paste_selection -- */
+
+
+static void
+paste_destination_dialog_response_cb (GtkDialog *dialog,
+ int response_id,
+ gpointer user_data)
{
- FrWindowPrivate *private = fr_window_get_instance_private (window);
- char *utf8_path, *utf8_old_path, *destination;
- char *current_dir;
+ FrWindow *window = user_data;
+ char *utf8_path;
+ char *destination;
+ char *current_dir;
- if (private->list_mode == FR_WINDOW_LIST_MODE_FLAT)
+ if (response_id != GTK_RESPONSE_YES) {
+ gtk_window_destroy (GTK_WINDOW (dialog));
return;
+ }
- /**/
+ utf8_path = _gth_request_dialog_get_text (dialog);
+ gtk_window_destroy (GTK_WINDOW (dialog));
- utf8_old_path = g_filename_to_utf8 (fr_window_get_current_location (window), -1, NULL, NULL, NULL);
- utf8_path = _gtk_request_dialog_run (GTK_WINDOW (window),
- (GTK_DIALOG_DESTROY_WITH_PARENT
- | GTK_DIALOG_MODAL),
- _("Paste Selection"),
- _("_Destination folder:"),
- utf8_old_path,
- 1024,
- _GTK_LABEL_CANCEL,
- _("_Paste"));
- g_free (utf8_old_path);
if (utf8_path == NULL)
return;
destination = g_filename_from_utf8 (utf8_path, -1, NULL, NULL, NULL);
- g_free (utf8_path);
-
if (destination[0] != '/')
current_dir = g_build_filename (fr_window_get_current_location (window), destination, NULL);
else
current_dir = g_strdup (destination);
- g_free (destination);
-
fr_window_paste_selection_to (window, current_dir);
g_free (current_dir);
+ g_free (destination);
+ g_free (utf8_path);
+}
+
+
+void
+fr_window_paste_selection (FrWindow *window,
+ gboolean from_sidebar)
+{
+ FrWindowPrivate *private = fr_window_get_instance_private (window);
+ char *utf8_old_path;
+ GtkWidget *destination_dialog;
+
+ if (private->list_mode == FR_WINDOW_LIST_MODE_FLAT)
+ return;
+
+ utf8_old_path = g_filename_to_utf8 (fr_window_get_current_location (window), -1, NULL, NULL, NULL);
+ destination_dialog = _gtk_request_dialog_new (GTK_WINDOW (window),
+ (GTK_DIALOG_DESTROY_WITH_PARENT
+ | GTK_DIALOG_MODAL),
+ _("Paste Selection"),
+ _("_Destination folder:"),
+ utf8_old_path,
+ 1024,
+ _GTK_LABEL_CANCEL,
+ _("_Paste"));
+ g_signal_connect (destination_dialog,
+ "response",
+ G_CALLBACK (paste_destination_dialog_response_cb),
+ window);
+ gtk_widget_show (destination_dialog);
+
+ g_free (utf8_old_path);
}
@@ -9051,7 +8361,6 @@ fr_window_open_files_with_application (FrWindow *window,
uris = g_list_prepend (uris, g_file_get_uri (G_FILE (scan->data)));
context = gdk_display_get_app_launch_context (gtk_widget_get_display (GTK_WIDGET (window)));
- gdk_app_launch_context_set_screen (context, gtk_widget_get_screen (GTK_WIDGET (window)));
gdk_app_launch_context_set_timestamp (context, 0);
if (! g_app_info_launch_uris (app, uris, G_APP_LAUNCH_CONTEXT (context), &error)) {
@@ -9277,10 +8586,9 @@ monitor_extracted_files (OpenFilesData *odata)
static void
open_extracted_files_with_native_appchooser (OpenFilesData *odata)
{
- GList *file_list = odata->cdata->file_list;
- GList *scan;
- GError *error = NULL;
- GtkWindow *window;
+ GList *file_list = odata->cdata->file_list;
+ GList *scan;
+ GtkWindow *window;
g_return_if_fail (file_list != NULL);
@@ -9300,13 +8608,7 @@ open_extracted_files_with_native_appchooser (OpenFilesData *odata)
for (scan = file_list; scan; scan = scan->next) {
g_autofree char *uri;
uri = g_file_get_uri (G_FILE (scan->data));
- if (!gtk_show_uri_on_window (window, uri, GDK_CURRENT_TIME, &error)) {
- _gtk_error_dialog_run (window,
- _("Could not perform the operation"),
- "%s",
- error->message);
- g_clear_error (&error);
- }
+ gtk_show_uri (window, uri, GDK_CURRENT_TIME);
}
}
#else
diff --git a/src/fr-window.h b/src/fr-window.h
index d441d31e..ae399079 100644
--- a/src/fr-window.h
+++ b/src/fr-window.h
@@ -420,14 +420,6 @@ void fr_window_set_notify (FrWindow *window,
/**/
-/**
- * fr_window_file_list_drag_data_get:
- * @path_list: (element-type GtkTreeRowReference)
- */
-gboolean fr_window_file_list_drag_data_get (FrWindow *window,
- GdkDragContext *context,
- GtkSelectionData *selection_data,
- GList *path_list);
void fr_window_update_dialog_closed (FrWindow *window);
void fr_window_dnd_extraction_finished (FrWindow *window,
gboolean error);
diff --git a/src/glib-utils.c b/src/glib-utils.c
index a9bc3b1d..a7346ef2 100644
--- a/src/glib-utils.c
+++ b/src/glib-utils.c
@@ -79,6 +79,15 @@ _g_object_list_unref (GList *list)
g_list_free_full (list, (GDestroyNotify) g_object_unref);
}
+
+void
+_g_object_unref_on_weak_notify (gpointer data,
+ GObject *where_the_object_was)
+{
+ g_object_unref (data);
+}
+
+
/* enum */
diff --git a/src/glib-utils.h b/src/glib-utils.h
index dfb8574b..1eb304fe 100644
--- a/src/glib-utils.h
+++ b/src/glib-utils.h
@@ -52,7 +52,8 @@ void _g_object_unref (gpointer object)
void _g_clear_object (gpointer p);
GList * _g_object_list_ref (GList *list);
void _g_object_list_unref (GList *list);
-
+void _g_object_unref_on_weak_notify (gpointer data,
+ GObject *where_the_object_was);
/* enum */
GEnumValue * _g_enum_type_get_value (GType enum_type,
diff --git a/src/gtk-utils.c b/src/gtk-utils.c
index 28678dea..4a4c57c4 100644
--- a/src/gtk-utils.c
+++ b/src/gtk-utils.c
@@ -24,6 +24,15 @@
#include "gtk-utils.h"
+void
+_gtk_dialog_run (GtkDialog *dialog)
+{
+ gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
+ g_signal_connect (dialog, "response", G_CALLBACK (gtk_window_destroy), NULL);
+ gtk_widget_show (GTK_WIDGET (dialog));
+}
+
+
GtkWidget *
_gtk_message_dialog_new (GtkWindow *parent,
GtkDialogFlags flags,
@@ -74,21 +83,8 @@ _gtk_message_dialog_new (GtkWindow *parent,
}
-static GtkWidget *
-create_button (const char *text)
-{
- GtkWidget *button;
-
- button = gtk_button_new_with_mnemonic (text);
- gtk_widget_set_can_default (button, TRUE);
- gtk_widget_show (button);
-
- return button;
-}
-
-
-char *
-_gtk_request_dialog_run (GtkWindow *parent,
+GtkWidget *
+_gtk_request_dialog_new (GtkWindow *parent,
GtkDialogFlags flags,
const char *title,
const char *message,
@@ -102,7 +98,6 @@ _gtk_request_dialog_run (GtkWindow *parent,
GtkWidget *label;
GtkWidget *entry;
GtkWidget *request_box;
- char *result;
builder = gtk_builder_new_from_resource (FILE_ROLLER_RESOURCE_UI_PATH "request-dialog.ui");
request_box = _gtk_builder_get_widget (builder, "request_box");
@@ -116,7 +111,7 @@ _gtk_request_dialog_run (GtkWindow *parent,
gtk_window_set_destroy_with_parent (GTK_WINDOW (dialog), (flags & GTK_DIALOG_DESTROY_WITH_PARENT));
gtk_window_set_title (GTK_WINDOW (dialog), title);
gtk_box_append (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), request_box);
- g_object_weak_ref (G_OBJECT (request_box), (GWeakNotify) g_object_unref, builder);
+ g_object_set_data_full (G_OBJECT (dialog), "builder", builder, g_object_unref);
if (flags & GTK_DIALOG_MODAL)
_gtk_dialog_add_to_window_group (GTK_DIALOG (dialog));
@@ -127,29 +122,37 @@ _gtk_request_dialog_run (GtkWindow *parent,
entry = _gtk_builder_get_widget (builder, "value_entry");
gtk_entry_set_max_length (GTK_ENTRY (entry), max_length);
gtk_editable_set_text (GTK_EDITABLE (entry), default_value);
+ gtk_widget_grab_focus (entry);
/* Add buttons */
gtk_dialog_add_action_widget (GTK_DIALOG (dialog),
- create_button (no_button_text),
+ gtk_button_new_with_mnemonic (no_button_text),
GTK_RESPONSE_CANCEL);
gtk_dialog_add_action_widget (GTK_DIALOG (dialog),
- create_button (yes_button_text),
+ gtk_button_new_with_mnemonic (yes_button_text),
GTK_RESPONSE_YES);
gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_YES);
- /* Run dialog */
+ return dialog;
+}
- gtk_widget_grab_focus (entry);
- if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_YES)
- result = g_strdup (gtk_editable_get_text (GTK_EDITABLE (entry)));
- else
- result = NULL;
+char *
+_gth_request_dialog_get_text (GtkDialog *dialog)
+{
+ GtkBuilder *builder;
+ GtkWidget *entry;
- gtk_window_destroy (GTK_WINDOW (dialog));
+ builder = g_object_get_data (G_OBJECT (dialog), "builder");
+ if (builder == NULL)
+ return NULL;
- return result;
+ entry = _gtk_builder_get_widget (builder, "value_entry");
+ if (entry == NULL)
+ return NULL;
+
+ return g_strdup (gtk_editable_get_text (GTK_EDITABLE (entry)));
}
@@ -200,18 +203,20 @@ _gtk_error_dialog_new (GtkWindow *parent,
GList *scan;
output_box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 2);
- gtk_box_pack_end (GTK_BOX (gtk_message_dialog_get_message_area (GTK_MESSAGE_DIALOG (dialog))),
- output_box, TRUE, TRUE, 0);
+ _gtk_box_pack_end (GTK_BOX (gtk_message_dialog_get_message_area (GTK_MESSAGE_DIALOG
(dialog))),
+ output_box,
+ TRUE,
+ FALSE);
label = gtk_label_new_with_mnemonic (_("C_ommand Line Output:"));
gtk_box_append (GTK_BOX (output_box), label);
scrolled_window = g_object_new (GTK_TYPE_SCROLLED_WINDOW,
- "shadow-type", GTK_SHADOW_IN,
+ "has-frame", TRUE,
"width-request", 450,
"height-request", 200,
NULL);
- _gtk_box_append_expanded (GTK_BOX (output_box), scrolled_window);
+ _gtk_box_pack_start (GTK_BOX (output_box), scrolled_window, TRUE, TRUE);
text_view = gtk_text_view_new ();
gtk_label_set_mnemonic_widget (GTK_LABEL (label), text_view);
@@ -265,25 +270,21 @@ _gtk_error_dialog_run (GtkWindow *parent,
message,
_GTK_LABEL_CLOSE, GTK_RESPONSE_CANCEL,
NULL);
- g_free (message);
-
- g_signal_connect (GTK_MESSAGE_DIALOG (d), "response",
- G_CALLBACK (gtk_window_destroy),
- NULL);
+ _gtk_dialog_run (GTK_DIALOG (d));
- gtk_widget_show (d);
+ g_free (message);
}
void
_gtk_dialog_add_to_window_group (GtkDialog *dialog)
{
- GtkWidget *toplevel;
+ GtkRoot *toplevel;
g_return_if_fail (dialog != NULL);
- toplevel = gtk_widget_get_toplevel (GTK_WIDGET (dialog));
- if (gtk_widget_is_toplevel (toplevel) && gtk_window_has_group (GTK_WINDOW (toplevel)))
+ toplevel = gtk_widget_get_root (GTK_WIDGET (dialog));
+ if ((toplevel != NULL) && gtk_window_has_group (GTK_WINDOW (toplevel)))
gtk_window_group_add_window (gtk_window_get_group (GTK_WINDOW (toplevel)), GTK_WINDOW
(dialog));
}
@@ -319,64 +320,15 @@ _gtk_entry_get_locale_text (GtkEntry *entry)
}
-GdkPixbuf *
-_g_icon_get_pixbuf (GIcon *icon,
- int icon_size,
- GtkIconTheme *icon_theme)
-{
- GdkPixbuf *pixbuf = NULL;
- GtkIconInfo *icon_info;
-
- icon_info = gtk_icon_theme_lookup_by_gicon (icon_theme,
- icon,
- icon_size,
- GTK_ICON_LOOKUP_USE_BUILTIN);
-
- if (icon_info != NULL) {
- GError *error = NULL;
-
- pixbuf = gtk_icon_info_load_icon (icon_info, &error);
- if (error != NULL) {
- g_print ("%s\n", error->message);
- g_error_free (error);
- }
-
- g_object_unref (icon_info);
- }
-
- return pixbuf;
-}
-
-
void
_gtk_show_help_dialog (GtkWindow *parent,
const char *section)
{
- char *uri;
- GError *error = NULL;
+ char *uri;
uri = g_strconcat ("help:file-roller", section ? "?" : NULL, section, NULL);
- if (! gtk_show_uri_on_window (parent, uri, GDK_CURRENT_TIME, &error)) {
- GtkWidget *dialog;
+ gtk_show_uri (parent, uri, GDK_CURRENT_TIME);
- dialog = _gtk_message_dialog_new (parent,
- GTK_DIALOG_DESTROY_WITH_PARENT,
- _("Could not display help"),
- error->message,
- _GTK_LABEL_CLOSE, GTK_RESPONSE_OK,
- NULL);
- gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK);
-
- g_signal_connect (GTK_MESSAGE_DIALOG (dialog), "response",
- G_CALLBACK (gtk_window_destroy),
- NULL);
-
- gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE);
-
- gtk_widget_show (dialog);
-
- g_clear_error (&error);
- }
g_free (uri);
}
@@ -389,32 +341,19 @@ _gtk_builder_get_widget (GtkBuilder *builder,
}
-int
-_gtk_widget_lookup_for_size (GtkWidget *widget,
- GtkIconSize icon_size)
-{
- int w, h;
-
- if (! gtk_icon_size_lookup (icon_size, &w, &h))
- w = h = 16;
-
- return MAX (w, h);
-}
-
-
static void
password_entry_icon_press_cb (GtkEntry *entry,
GtkEntryIconPosition icon_pos,
- GdkEvent *event,
gpointer user_data)
{
- gboolean visibility = gtk_entry_get_visibility (entry);
+ gboolean visibility;
+
+ visibility = gtk_entry_get_visibility (entry);
gtk_entry_set_visibility (entry, ! visibility);
- if (visibility) {
+ if (visibility)
gtk_entry_set_icon_from_icon_name (entry, GTK_ENTRY_ICON_SECONDARY, "view-reveal-symbolic");
- } else {
+ else
gtk_entry_set_icon_from_icon_name (entry, GTK_ENTRY_ICON_SECONDARY, "view-conceal-symbolic");
- }
}
@@ -462,7 +401,7 @@ _gtk_image_button_new_for_header_bar (const char *icon_name)
{
GtkWidget *button;
- button = gtk_button_new_from_icon_name (icon_name, GTK_ICON_SIZE_MENU);
+ button = gtk_button_new_from_icon_name (icon_name);
_gtk_menu_button_set_style_for_header_bar (button);
return button;
@@ -523,7 +462,7 @@ _gtk_header_bar_create_image_toggle_button (const char *icon_name,
g_return_val_if_fail (action_name != NULL, NULL);
button = gtk_toggle_button_new ();
- gtk_button_set_child (GTK_BUTTON (button), gtk_image_new_from_icon_name (icon_name,
GTK_ICON_SIZE_MENU));
+ gtk_button_set_child (GTK_BUTTON (button), gtk_image_new_from_icon_name (icon_name));
_gtk_menu_button_set_style_for_header_bar (button);
gtk_actionable_set_action_name (GTK_ACTIONABLE (button), action_name);
if (tooltip != NULL)
@@ -720,9 +659,34 @@ _gtk_popover_popup_at_position (GtkPopover *popover, gdouble x, gdouble y)
void
-_gtk_box_append_expanded (GtkBox *box, GtkWidget *child)
+_gtk_box_pack_start (GtkBox *box,
+ GtkWidget *child,
+ gboolean hexpand,
+ gboolean vexpand)
{
- gtk_widget_set_hexpand (child, TRUE);
- gtk_widget_set_vexpand (child, TRUE);
+ gtk_widget_set_hexpand (child, hexpand);
+ gtk_widget_set_vexpand (child, vexpand);
+ gtk_box_prepend (box, child);
+}
+
+
+void
+_gtk_box_pack_end (GtkBox *box,
+ GtkWidget *child,
+ gboolean hexpand,
+ gboolean vexpand)
+{
+ gtk_widget_set_hexpand (child, hexpand);
+ gtk_widget_set_vexpand (child, vexpand);
gtk_box_append (box, child);
}
+
+
+void
+_gtk_widget_set_margin (GtkWidget *widget, int margin)
+{
+ gtk_widget_set_margin_start (widget, margin);
+ gtk_widget_set_margin_end (widget, margin);
+ gtk_widget_set_margin_top (widget, margin);
+ gtk_widget_set_margin_bottom (widget, margin);
+}
diff --git a/src/gtk-utils.h b/src/gtk-utils.h
index ec00f5c3..667afbbd 100644
--- a/src/gtk-utils.h
+++ b/src/gtk-utils.h
@@ -40,20 +40,22 @@ typedef struct {
const char *accelerator;
} FrAccelerator;
+void _gtk_dialog_run (GtkDialog *dialog);
GtkWidget * _gtk_message_dialog_new (GtkWindow *parent,
GtkDialogFlags flags,
const char *message,
const char *secondary_message,
const char *first_button_text,
...);
-gchar * _gtk_request_dialog_run (GtkWindow *parent,
+GtkWidget * _gtk_request_dialog_new (GtkWindow *parent,
GtkDialogFlags flags,
const char *title,
const char *message,
const char *default_value,
int max_length,
- const char *no_button_text,
- const char *yes_button_text);
+ const gchar *no_button_text,
+ const gchar *yes_button_text);
+char * _gth_request_dialog_get_text (GtkDialog *dialog);
GtkWidget * _gtk_error_dialog_new (GtkWindow *parent,
GtkDialogFlags flags,
GList *row_output,
@@ -66,17 +68,12 @@ void _gtk_error_dialog_run (GtkWindow *parent,
...);
void _gtk_dialog_add_to_window_group (GtkDialog *dialog);
void _gtk_entry_set_locale_text (GtkEntry *entry,
- const char *text);
+ const char *text);
char * _gtk_entry_get_locale_text (GtkEntry *entry);
-GdkPixbuf * _g_icon_get_pixbuf (GIcon *icon,
- int size,
- GtkIconTheme *icon_theme);
void _gtk_show_help_dialog (GtkWindow *parent,
const char *section);
GtkWidget * _gtk_builder_get_widget (GtkBuilder *builder,
const char *name);
-int _gtk_widget_lookup_for_size (GtkWidget *widget,
- GtkIconSize icon_size);
void _gtk_entry_use_as_password_entry (GtkEntry *entry);
GtkWidget * _gtk_menu_button_new_for_header_bar (void);
GtkWidget * _gtk_image_button_new_for_header_bar (const char *icon_name);
@@ -105,6 +102,15 @@ void _gtk_application_add_accelerators (GtkApplication *app,
int n_accelerators);
void _gtk_popover_popup_at_selected (GtkPopover *popover, GtkTreeView *view);
void _gtk_popover_popup_at_position (GtkPopover *popover, gdouble x, gdouble y);
-void _gtk_box_append_expanded (GtkBox *box, GtkWidget *child);
+void _gtk_box_pack_start (GtkBox *box,
+ GtkWidget *child,
+ gboolean hexpand,
+ gboolean vexpand);
+void _gtk_box_pack_end (GtkBox *box,
+ GtkWidget *child,
+ gboolean hexpand,
+ gboolean vexpand);
+void _gtk_widget_set_margin (GtkWidget *widget,
+ int margin);
#endif
diff --git a/src/meson.build b/src/meson.build
index c4357269..8ab5c925 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -11,7 +11,6 @@ source_files = files(
'dlg-password.c',
'dlg-prop.c',
'dlg-update.c',
- 'eggtreemultidnd.c',
'file-utils.c',
'fr-application.c',
'fr-application-menu.c',
@@ -40,15 +39,12 @@ source_files = files(
'fr-file-data.c',
'fr-file-selector-dialog.c',
'fr-init.c',
- 'fr-list-model.c',
- 'fr-location-bar.c',
'fr-new-archive-dialog.c',
'fr-process.c',
'fr-window-actions-callbacks.c',
'fr-window.c',
'gio-utils.c',
'glib-utils.c',
- 'gth-icon-cache.c',
'gtk-utils.c',
'java-utils.c',
'main.c',
@@ -139,9 +135,8 @@ fr_exe = executable(
glib_dep,
gthread_dep,
gtk_dep,
- hdy_dep,
use_native_appchooser ? libportal_dep : [],
- use_native_appchooser ? libportal_gtk3_dep : [],
+ use_native_appchooser ? libportal_gtk4_dep : [],
build_introspection ? gobject_introspection_dep : [],
use_json_glib ? libjson_glib_dep : [],
use_libarchive ? libarchive_dep : [],
diff --git a/src/preferences.c b/src/preferences.c
index bdd89fbe..85f9e57e 100644
--- a/src/preferences.c
+++ b/src/preferences.c
@@ -40,7 +40,7 @@ pref_util_save_window_geometry (GtkWindow *window,
schema = g_strconcat (FILE_ROLLER_SCHEMA_DIALOGS, ".", dialog_id, NULL);
settings = g_settings_new (schema);
- gtk_window_get_size (window, &width, &height);
+ gtk_widget_get_size_request (GTK_WIDGET (window), &width, &height);
g_settings_set_int (settings, "width", width);
g_settings_set_int (settings, "height", height);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]