summaryrefslogtreecommitdiff
path: root/src/actions.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/actions.c')
-rw-r--r--src/actions.c498
1 files changed, 298 insertions, 200 deletions
diff --git a/src/actions.c b/src/actions.c
index b55cab1..a02e969 100644
--- a/src/actions.c
+++ b/src/actions.c
@@ -44,9 +44,36 @@
#include "fr-init.h"
#include "typedefs.h"
-
/* -- new archive -- */
+static struct
+{
+ const char *id;
+ void (* activate) (GtkMenuItem *menuitem,
+ gpointer user_data);
+} engramp_menu_popup [] = {
+ {"popup_open_item", activate_popup_open},
+ {"popup_open_select_item", activate_popup_open_select},
+ {"popup_extract_item", activate_popup_extract},
+ {"popup_cut_item", activate_popup_cut},
+ {"popup_paste_item", activate_popup_paste},
+ {"popup_rename_item", activate_popup_rename},
+ {"popup_delete_item", activate_popup_delete},
+ {"popup_open_item1", activate_popup_open_folder},
+ {"popup_extract_item1", activate_popup_extract},
+ {"popup_cut_item1", activate_popup_cut},
+ {"popup_copy_item1", activate_popup_copy},
+ {"popup_paste_item1", activate_popup_paste},
+ {"popup_rename_item1", activate_popup_rename},
+ {"popup_delete_item1", activate_popup_delete},
+ {"popup_open_item2", activate_popup_open_folder_from_sidebar},
+ {"popup_extract_item2", activate_popup_extract_folder_from_sidebar},
+ {"popup_cut_item2", activate_popup_cut_folder_from_sidebar},
+ {"popup_copy_item2", activate_popup_copy_folder_from_sidebar},
+ {"popup_paste_item2", activate_popup_paste_folder_from_sidebar},
+ {"popup_rename_item2", activate_popup_rename_folder_from_sidebar},
+ {"popup_delete_item2", activate_popup_delete_folder_from_sidebar},
+};
static void
new_archive (DlgNewData *data,
@@ -81,7 +108,6 @@ new_archive (DlgNewData *data,
gtk_widget_destroy (archive_window);
}
-
/* when on Automatic the user provided extension needs to be supported,
otherwise an existing unsupported archive can be deleted (if the user
provided name matches with its name) before we find out that the
@@ -99,7 +125,6 @@ is_supported_extension (GtkWidget *file_sel,
return FALSE;
}
-
static char *
get_full_uri (DlgNewData *data)
{
@@ -126,7 +151,7 @@ get_full_uri (DlgNewData *data)
uri_ext = get_archive_filename_extension (uri);
default_ext = mime_type_desc[data->supported_types[idx-1]].default_ext;
- if (strcmp_null_tolerant (uri_ext, default_ext) != 0)
+ if (g_strcmp0 (uri_ext, default_ext) != 0)
full_uri = g_strconcat (uri, default_ext, NULL);
}
if (full_uri == NULL)
@@ -137,7 +162,6 @@ get_full_uri (DlgNewData *data)
return full_uri;
}
-
static char *
get_archive_filename_from_selector (DlgNewData *data)
{
@@ -203,6 +227,22 @@ get_archive_filename_from_selector (DlgNewData *data)
}
g_object_unref (info);
g_object_unref (dir);
+ if ((data->original_file != NULL) && (g_file_equal (file, data->original_file))) {
+ GtkWidget *dialog;
+ dialog = _gtk_error_dialog_new (GTK_WINDOW (data->dialog),
+ 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_widget_destroy (GTK_WIDGET (dialog));
+ g_object_unref (info);
+ g_object_unref (file);
+
+ return NULL;
+ }
/* if the user did not specify a valid extension use the filetype combobox current type
* or tar.gz if automatic is selected. */
@@ -263,7 +303,6 @@ get_archive_filename_from_selector (DlgNewData *data)
return uri;
}
-
static void
new_file_response_cb (GtkWidget *w,
int response,
@@ -292,6 +331,25 @@ new_file_response_cb (GtkWidget *w,
}
}
+void
+init_engramp_menu_popup (FrWindow *window,
+ GtkBuilder *ui)
+{
+ int i;
+
+ int n_entries = G_N_ELEMENTS (engramp_menu_popup);
+
+ for (i = 0 ; i < n_entries; i++)
+ {
+ GtkWidget *widget = (GtkWidget *)gtk_builder_get_object (ui, engramp_menu_popup[i].id);
+
+ if (engramp_menu_popup[i].activate != NULL)
+ g_signal_connect (widget,
+ "activate",
+ G_CALLBACK (engramp_menu_popup[i].activate),
+ window);
+ }
+}
void
show_new_archive_dialog (FrWindow *window,
@@ -311,18 +369,16 @@ show_new_archive_dialog (FrWindow *window,
gtk_window_present (GTK_WINDOW (data->dialog));
}
-
void
-activate_action_new (GtkAction *action,
- gpointer data)
+activate_action_new (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer data)
{
show_new_archive_dialog ((FrWindow*)data, NULL);
}
-
/* -- open archive -- */
-
static void
window_archive_loaded_cb (FrWindow *window,
gboolean success,
@@ -339,7 +395,6 @@ window_archive_loaded_cb (FrWindow *window,
}
}
-
static void
open_file_response_cb (GtkWidget *w,
int response,
@@ -370,10 +425,10 @@ open_file_response_cb (GtkWidget *w,
g_free (uri);
}
-
void
-activate_action_open (GtkAction *action,
- gpointer data)
+activate_action_open (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer data)
{
GtkWidget *file_sel;
FrWindow *window = data;
@@ -415,10 +470,8 @@ activate_action_open (GtkAction *action,
gtk_widget_show (file_sel);
}
-
/* -- save archive -- */
-
static void
save_file_response_cb (GtkWidget *w,
gint response,
@@ -458,18 +511,18 @@ save_file_response_cb (GtkWidget *w,
g_free (path);
}
-
void
-activate_action_save_as (GtkAction *action,
- gpointer callback_data)
+activate_action_save_as (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer callback_data)
{
FrWindow *window = callback_data;
DlgNewData *data;
+ GFile *file = NULL;
char *archive_name = NULL;
if (fr_window_get_archive_uri (window)) {
const char *uri;
- GFile *file;
GFileInfo *info;
GError *err = NULL;
@@ -487,10 +540,10 @@ activate_action_save_as (GtkAction *action,
archive_name = g_strdup (g_file_info_get_display_name (info));
g_object_unref (info);
- g_object_unref (file);
}
data = dlg_save_as (window, archive_name);
+ data->original_file = file;
g_signal_connect (G_OBJECT (data->dialog),
"response",
G_CALLBACK (save_file_response_cb),
@@ -500,354 +553,266 @@ activate_action_save_as (GtkAction *action,
g_free (archive_name);
}
-
void
-activate_action_test_archive (GtkAction *action,
- gpointer data)
+activate_action_test_archive (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer data)
{
FrWindow *window = data;
fr_window_archive_test (window);
}
-
void
-activate_action_properties (GtkAction *action,
- gpointer data)
+activate_action_properties (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer data)
{
FrWindow *window = data;
dlg_prop (window);
}
-
void
-activate_action_close (GtkAction *action,
- gpointer data)
+activate_action_close (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer data)
{
FrWindow *window = data;
fr_window_close (window);
}
-
void
-activate_action_add_files (GtkAction *action,
- gpointer data)
+activate_action_add_files (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer data)
{
add_files_cb (NULL, data);
}
-
void
-activate_action_add_folder (GtkAction *action,
- gpointer data)
+activate_action_add_folder (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer data)
{
add_folder_cb (NULL, data);
}
-
void
-activate_action_extract (GtkAction *action,
- gpointer data)
+activate_action_extract (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer data)
{
dlg_extract (NULL, data);
}
-
-void
-activate_action_extract_folder_from_sidebar (GtkAction *action,
- gpointer data)
-{
- dlg_extract_folder_from_sidebar (NULL, data);
-}
-
-
void
-activate_action_copy (GtkAction *action,
- gpointer data)
+activate_action_copy (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer data)
{
fr_window_copy_selection ((FrWindow*) data, FALSE);
}
-
void
-activate_action_cut (GtkAction *action,
- gpointer data)
+activate_action_cut (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer data)
{
fr_window_cut_selection ((FrWindow*) data, FALSE);
}
-
void
-activate_action_paste (GtkAction *action,
- gpointer data)
+activate_action_paste (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer data)
{
fr_window_paste_selection ((FrWindow*) data, FALSE);
}
-
void
-activate_action_rename (GtkAction *action,
- gpointer data)
+activate_action_rename (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer data)
{
fr_window_rename_selection ((FrWindow*) data, FALSE);
}
-
void
-activate_action_delete (GtkAction *action,
- gpointer data)
+activate_action_delete (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer data)
{
dlg_delete (NULL, data);
}
-
-void
-activate_action_copy_folder_from_sidebar (GtkAction *action,
- gpointer data)
-{
- fr_window_copy_selection ((FrWindow*) data, TRUE);
-}
-
-
-void
-activate_action_cut_folder_from_sidebar (GtkAction *action,
- gpointer data)
-{
- fr_window_cut_selection ((FrWindow*) data, TRUE);
-}
-
-
void
-activate_action_paste_folder_from_sidebar (GtkAction *action,
- gpointer data)
-{
- fr_window_paste_selection ((FrWindow*) data, TRUE);
-}
-
-
-void
-activate_action_rename_folder_from_sidebar (GtkAction *action,
- gpointer data)
-{
- fr_window_rename_selection ((FrWindow*) data, TRUE);
-}
-
-
-void
-activate_action_delete_folder_from_sidebar (GtkAction *action,
- gpointer data)
-{
- dlg_delete_from_sidebar (NULL, data);
-}
-
-
-void
-activate_action_find (GtkAction *action,
- gpointer data)
+activate_action_find (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer data)
{
FrWindow *window = data;
fr_window_find (window);
}
-
void
-activate_action_select_all (GtkAction *action,
- gpointer data)
+activate_action_select_all (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer data)
{
FrWindow *window = data;
fr_window_select_all (window);
}
-
void
-activate_action_deselect_all (GtkAction *action,
- gpointer data)
+activate_action_deselect_all (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer data)
{
FrWindow *window = data;
fr_window_unselect_all (window);
}
-
void
-activate_action_open_with (GtkAction *action,
- gpointer data)
+activate_action_open_with (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer data)
{
open_with_cb (NULL, (FrWindow*) data);
}
-
-void
-activate_action_view_or_open (GtkAction *action,
- gpointer data)
-{
- FrWindow *window = data;
- GList *file_list;
-
- file_list = fr_window_get_file_list_selection (window, FALSE, NULL);
- if (file_list == NULL)
- return;
- fr_window_open_files (window, file_list, FALSE);
- path_list_free (file_list);
-}
-
-
-void
-activate_action_open_folder (GtkAction *action,
- gpointer data)
-{
- FrWindow *window = data;
- fr_window_current_folder_activated (window, FALSE);
-}
-
-
-void
-activate_action_open_folder_from_sidebar (GtkAction *action,
- gpointer data)
-{
- FrWindow *window = data;
- fr_window_current_folder_activated (window, TRUE);
-}
-
-
void
-activate_action_password (GtkAction *action,
- gpointer data)
+activate_action_password (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer data)
{
dlg_password (NULL, (FrWindow*) data);
}
-
void
-activate_action_view_toolbar (GtkAction *action,
- gpointer data)
+activate_action_view_toolbar (GSimpleAction *action,
+ GVariant *state,
+ gpointer data)
{
GSettings *settings;
settings = g_settings_new (ENGRAMPA_SCHEMA_UI);
- g_settings_set_boolean (settings, PREF_UI_VIEW_TOOLBAR, gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action)));
+ g_settings_set_boolean (settings, PREF_UI_VIEW_TOOLBAR, g_variant_get_boolean (state));
+ g_simple_action_set_state (action, state);
g_object_unref (settings);
}
-
void
-activate_action_view_statusbar (GtkAction *action,
- gpointer data)
+activate_action_view_statusbar (GSimpleAction *action,
+ GVariant *state,
+ gpointer data)
{
GSettings *settings;
settings = g_settings_new (ENGRAMPA_SCHEMA_UI);
- g_settings_set_boolean (settings, PREF_UI_VIEW_STATUSBAR, gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action)));
+ g_settings_set_boolean (settings, PREF_UI_VIEW_STATUSBAR, g_variant_get_boolean (state));
+ g_simple_action_set_state (action, state);
g_object_unref (settings);
}
-
void
-activate_action_view_folders (GtkAction *action,
- gpointer data)
+activate_action_view_folders (GSimpleAction *action,
+ GVariant *state,
+ gpointer data)
{
GSettings *settings;
settings = g_settings_new (ENGRAMPA_SCHEMA_UI);
- g_settings_set_boolean (settings, PREF_UI_VIEW_FOLDERS, gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action)));
+ g_settings_set_boolean (settings, PREF_UI_VIEW_FOLDERS, g_variant_get_boolean (state));
+ g_simple_action_set_state (action, state);
g_object_unref (settings);
}
-
void
-activate_action_stop (GtkAction *action,
- gpointer data)
+activate_action_stop (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer data)
{
FrWindow *window = data;
fr_window_stop (window);
}
-
void
-activate_action_reload (GtkAction *action,
- gpointer data)
+activate_action_reload (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer data)
{
FrWindow *window = data;
fr_window_archive_reload (window);
}
-
void
-activate_action_sort_reverse_order (GtkAction *action,
- gpointer data)
-{
- FrWindow *window = data;
-
- fr_window_set_sort_type (window, gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action)) ? GTK_SORT_DESCENDING : GTK_SORT_ASCENDING);
-}
-
-
-void
-activate_action_last_output (GtkAction *action,
- gpointer data)
+activate_action_last_output (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer data)
{
FrWindow *window = data;
fr_window_view_last_output (window, _("Last Output"));
}
-
void
-activate_action_go_back (GtkAction *action,
- gpointer data)
+activate_action_go_back (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer data)
{
FrWindow *window = data;
fr_window_go_back (window);
}
-
void
-activate_action_go_forward (GtkAction *action,
- gpointer data)
+activate_action_go_forward (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer data)
{
FrWindow *window = data;
fr_window_go_forward (window);
}
-
void
-activate_action_go_up (GtkAction *action,
- gpointer data)
+activate_action_go_up (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer data)
{
FrWindow *window = data;
fr_window_go_up_one_level (window);
}
-
void
-activate_action_go_home (GtkAction *action,
- gpointer data)
+activate_action_go_home (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer data)
{
FrWindow *window = data;
fr_window_go_to_location (window, "/", FALSE);
}
-
void
-activate_action_manual (GtkAction *action,
- gpointer data)
+activate_action_manual (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer data)
{
FrWindow *window = data;
show_help_dialog (GTK_WINDOW (window) , NULL);
}
-
#define ABOUT_GROUP "About"
#define EMAILIFY(string) (g_strdelimit ((string), "%", '@'))
void
-activate_action_about (GtkAction *action,
- gpointer gp)
+activate_action_about (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer gp)
{
FrWindow *window = gp;
const char *documenters [] = {
@@ -912,3 +877,136 @@ activate_action_about (GtkAction *action,
g_strfreev (authors);
g_free (license_text);
}
+
+void
+activate_toggle (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer user_data)
+{
+ GVariant *state;
+ state = g_action_get_state (G_ACTION (action));
+ g_action_change_state (G_ACTION (action), g_variant_new_boolean (!g_variant_get_boolean (state)));
+ g_variant_unref (state);
+}
+
+void
+activate_popup_open (GtkMenuItem *menuitem,
+ gpointer data)
+{
+ FrWindow *window = data;
+ GList *file_list;
+
+ file_list = fr_window_get_file_list_selection (window, FALSE, NULL);
+ if (file_list == NULL)
+ return;
+ fr_window_open_files (window, file_list, FALSE);
+ path_list_free (file_list);
+
+}
+
+void
+activate_popup_open_select (GtkMenuItem *menuitem,
+ gpointer data)
+{
+ open_with_cb (NULL, (FrWindow*) data);
+}
+
+void
+activate_popup_extract (GtkMenuItem *menuitem,
+ gpointer data)
+{
+ dlg_extract (NULL, data);
+}
+
+void
+activate_popup_cut (GtkMenuItem *menuitem,
+ gpointer data)
+{
+ fr_window_cut_selection ((FrWindow*) data, FALSE);
+}
+
+void
+activate_popup_paste (GtkMenuItem *menuitem,
+ gpointer data)
+{
+ fr_window_paste_selection ((FrWindow*) data, FALSE);
+}
+
+void
+activate_popup_rename (GtkMenuItem *menuitem,
+ gpointer data)
+{
+ fr_window_rename_selection ((FrWindow*) data, FALSE);
+}
+
+void
+activate_popup_delete (GtkMenuItem *menuitem,
+ gpointer data)
+{
+ dlg_delete (NULL, data);
+}
+
+void
+activate_popup_open_folder (GtkMenuItem *menuitem,
+ gpointer data)
+{
+ FrWindow *window = data;
+ fr_window_current_folder_activated (window, FALSE);
+}
+
+void
+activate_popup_copy (GtkMenuItem *menuitem,
+ gpointer data)
+{
+ fr_window_copy_selection ((FrWindow*) data, FALSE);
+}
+
+void
+activate_popup_open_folder_from_sidebar (GtkMenuItem *menuitem,
+ gpointer data)
+{
+ FrWindow *window = data;
+ fr_window_current_folder_activated (window, TRUE);
+}
+
+void
+activate_popup_extract_folder_from_sidebar (GtkMenuItem *menuitem,
+ gpointer data)
+{
+ dlg_extract_folder_from_sidebar (NULL, data);
+}
+
+void
+activate_popup_copy_folder_from_sidebar (GtkMenuItem *menuitem,
+ gpointer data)
+{
+ fr_window_copy_selection ((FrWindow*) data, TRUE);
+}
+
+void
+activate_popup_cut_folder_from_sidebar (GtkMenuItem *menuitem,
+ gpointer data)
+{
+ fr_window_cut_selection ((FrWindow*) data, TRUE);
+}
+
+void
+activate_popup_paste_folder_from_sidebar (GtkMenuItem *menuitem,
+ gpointer data)
+{
+ fr_window_paste_selection ((FrWindow*) data, TRUE);
+}
+
+void
+activate_popup_rename_folder_from_sidebar (GtkMenuItem *menuitem,
+ gpointer data)
+{
+ fr_window_rename_selection ((FrWindow*) data, TRUE);
+}
+
+void
+activate_popup_delete_folder_from_sidebar (GtkMenuItem *menuitem,
+ gpointer data)
+{
+ dlg_delete_from_sidebar (NULL, data);
+}