summaryrefslogtreecommitdiff
path: root/src/gui/gcal-application.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui/gcal-application.c')
-rw-r--r--src/gui/gcal-application.c54
1 files changed, 53 insertions, 1 deletions
diff --git a/src/gui/gcal-application.c b/src/gui/gcal-application.c
index 99356732..84e38b6d 100644
--- a/src/gui/gcal-application.c
+++ b/src/gui/gcal-application.c
@@ -457,11 +457,14 @@ gcal_application_command_line (GApplication *app,
GApplicationCommandLine *command_line)
{
g_autoptr (GVariant) option = NULL;
+ g_auto (GStrv) arguments = NULL;
GcalApplication *self;
GVariantDict *options;
const gchar* date = NULL;
const gchar* uuid = NULL;
gsize length;
+ gint n_arguments;
+ gint i;
GCAL_ENTRY;
@@ -510,6 +513,37 @@ gcal_application_command_line (GApplication *app,
g_application_activate (app);
+ arguments = g_application_command_line_get_arguments (command_line, &n_arguments);
+ if (n_arguments > 1)
+ {
+ g_autoptr (GHashTable) unique_files = NULL;
+ g_autoptr (GPtrArray) files = NULL;
+ gint n_files = 0;
+
+ files = g_ptr_array_new_full (n_arguments - 1, g_object_unref);
+ unique_files = g_hash_table_new (g_file_hash, (GEqualFunc) g_file_equal);
+
+ for (i = 1; i < n_arguments; i++)
+ {
+ g_autoptr (GFile) file = NULL;
+ const gchar *arg;
+
+ arg = arguments[i];
+ file = g_application_command_line_create_file_for_arg (command_line, arg);
+
+ if (g_str_has_prefix (arg, "-") || g_hash_table_contains (unique_files, file))
+ continue;
+
+ g_hash_table_add (unique_files, file);
+ g_ptr_array_add (files, g_steal_pointer (&file));
+
+ n_files++;
+ }
+
+ if (n_files > 0)
+ g_application_open (app, (GFile **) files->pdata, n_files, "");
+ }
+
GCAL_RETURN (0);
}
@@ -575,6 +609,23 @@ gcal_application_dbus_unregister (GApplication *application,
}
static void
+gcal_application_open (GApplication *application,
+ GFile **files,
+ gint n_files,
+ const gchar *hint)
+{
+ GcalApplication *self;
+
+ GCAL_ENTRY;
+
+ self = GCAL_APPLICATION (application);
+
+ gcal_window_import_files (GCAL_WINDOW (self->window), files, n_files);
+
+ GCAL_EXIT;
+}
+
+static void
gcal_application_class_init (GcalApplicationClass *klass)
{
GObjectClass *object_class;
@@ -588,6 +639,7 @@ gcal_application_class_init (GcalApplicationClass *klass)
application_class->activate = gcal_application_activate;
application_class->startup = gcal_application_startup;
application_class->command_line = gcal_application_command_line;
+ application_class->open = gcal_application_open;
application_class->handle_local_options = gcal_application_handle_local_options;
application_class->dbus_register = gcal_application_dbus_register;
application_class->dbus_unregister = gcal_application_dbus_unregister;
@@ -631,7 +683,7 @@ gcal_application_new (void)
return g_object_new (gcal_application_get_type (),
"resource-base-path", "/org/gnome/calendar",
"application-id", APPLICATION_ID,
- "flags", G_APPLICATION_HANDLES_COMMAND_LINE,
+ "flags", G_APPLICATION_HANDLES_COMMAND_LINE | G_APPLICATION_HANDLES_OPEN,
NULL);
}