diff options
-rw-r--r-- | src/app-section.c | 26 | ||||
-rw-r--r-- | src/ido-menu-item.c | 16 | ||||
-rw-r--r-- | src/im-app-menu-item.c | 2 |
3 files changed, 35 insertions, 9 deletions
diff --git a/src/app-section.c b/src/app-section.c index 474e700..1106c62 100644 --- a/src/app-section.c +++ b/src/app-section.c @@ -291,6 +291,17 @@ app_section_finalize (GObject *object) G_OBJECT_CLASS (app_section_parent_class)->dispose (object); } +static GAppLaunchContext * +get_launch_context (guint32 timestamp) +{ + GdkDisplay *display = gdk_display_get_default(); + GdkAppLaunchContext *launch_context = gdk_display_get_app_launch_context (display); + + gdk_app_launch_context_set_timestamp (launch_context, timestamp); + + return G_APP_LAUNCH_CONTEXT (launch_context); +} + /* Respond to one of the shortcuts getting clicked on. */ static void nick_activate_cb (GSimpleAction *action, @@ -303,10 +314,14 @@ nick_activate_cb (GSimpleAction *action, g_return_if_fail(priv->ids != NULL); - if (!indicator_desktop_shortcuts_nick_exec_with_context(priv->ids, nick, NULL)) { + GAppLaunchContext *context = get_launch_context (g_variant_get_uint32 (param)); + + if (!indicator_desktop_shortcuts_nick_exec_with_context(priv->ids, nick, context)) { g_warning("Unable to execute nick '%s' for desktop file '%s'", nick, g_desktop_app_info_get_filename (priv->appinfo)); } + + g_object_unref (context); } static void @@ -416,7 +431,7 @@ app_section_update_menu (AppSection *self) name = indicator_desktop_shortcuts_nick_get_name(priv->ids, nicks[i]); - action = g_simple_action_new (nicks[i], NULL); + action = g_simple_action_new (nicks[i], G_VARIANT_TYPE_UINT32); g_signal_connect(action, "activate", G_CALLBACK (nick_activate_cb), self); g_simple_action_group_insert (priv->static_shortcuts, G_ACTION (action)); g_object_unref (action); @@ -507,12 +522,9 @@ activate_cb (GSimpleAction *action, AppSection * mi = APP_SECTION (userdata); AppSectionPrivate * priv = mi->priv; GError *error = NULL; - GdkDisplay *display = gdk_display_get_default(); - GdkAppLaunchContext *launch_context = gdk_display_get_app_launch_context (display); - - gdk_app_launch_context_set_timestamp (launch_context, g_variant_get_uint32 (param)); + GAppLaunchContext *launch_context = get_launch_context (g_variant_get_uint32 (param)); - if (!g_app_info_launch (G_APP_INFO (priv->appinfo), NULL, G_APP_LAUNCH_CONTEXT (launch_context), &error)) { + if (!g_app_info_launch (G_APP_INFO (priv->appinfo), NULL, launch_context, &error)) { g_warning("Unable to execute application for desktop file '%s': %s", g_desktop_app_info_get_filename (priv->appinfo), error->message); diff --git a/src/ido-menu-item.c b/src/ido-menu-item.c index 32044ff..f702828 100644 --- a/src/ido-menu-item.c +++ b/src/ido-menu-item.c @@ -282,10 +282,24 @@ static void ido_menu_item_activate (GtkMenuItem *item) { IdoMenuItemPrivate *priv = IDO_MENU_ITEM (item)->priv; + GVariant *parameter; /* see ido_menu_item_set_active */ if (!priv->in_set_active && priv->action && priv->action_group) - g_action_group_activate_action (priv->action_group, priv->action, priv->target); + { + guint32 event_time = gtk_get_current_event_time (); + + if (priv->target) + { + parameter = priv->target; + } + else + { + parameter = g_variant_new_uint32 (event_time); + } + + g_action_group_activate_action (priv->action_group, priv->action, parameter); + } if (priv->in_set_active) GTK_MENU_ITEM_CLASS (ido_menu_item_parent_class)->activate (item); diff --git a/src/im-app-menu-item.c b/src/im-app-menu-item.c index afd21be..03b11c2 100644 --- a/src/im-app-menu-item.c +++ b/src/im-app-menu-item.c @@ -240,7 +240,7 @@ im_app_menu_item_activate (GtkMenuItem *item) if (priv->action && priv->action_group) { guint32 event_time = gtk_get_current_event_time (); - g_action_group_activate_action (priv->action_group, priv->action, g_variant_new_uint32(event_time)); + g_action_group_activate_action (priv->action_group, priv->action, g_variant_new_uint32 (event_time)); } } |