diff options
author | Xan Lopez <xlopez@igalia.com> | 2011-08-29 21:49:08 +0800 |
---|---|---|
committer | Xan Lopez <xlopez@igalia.com> | 2011-08-29 21:49:08 +0800 |
commit | 540c0c0ac46399462dfad2c3fd0a50a412882307 (patch) | |
tree | e030bf92f223f7b35e30b3e06a430b9a82e8d9ba | |
parent | e6785d3ccc5a5a7c933a50b1a224fc01ee741c9c (diff) | |
download | gsoc2013-epiphany-540c0c0ac46399462dfad2c3fd0a50a412882307.tar.gz gsoc2013-epiphany-540c0c0ac46399462dfad2c3fd0a50a412882307.tar.zst gsoc2013-epiphany-540c0c0ac46399462dfad2c3fd0a50a412882307.zip |
Show a notification when the newly created web-app is ready to be used
This will probably go away in 3.4 when the new dash design is
introduced, but for now it's the best we have.
-rw-r--r-- | configure.ac | 2 | ||||
-rw-r--r-- | src/ephy-main.c | 6 | ||||
-rw-r--r-- | src/window-commands.c | 35 |
3 files changed, 41 insertions, 2 deletions
diff --git a/configure.ac b/configure.ac index cdf52a845..dec2be9f9 100644 --- a/configure.ac +++ b/configure.ac @@ -91,6 +91,7 @@ WEBKIT_GTK_REQUIRED=1.5.2 LIBSOUP_GNOME_REQUIRED=2.33.1 GNOME_KEYRING_REQUIRED=2.26.0 GSETTINGS_DESKTOP_SCHEMAS_REQUIRED=0.0.1 +LIBNOTIFY_REQUIRED=0.5.1 # Tests @@ -118,6 +119,7 @@ PKG_CHECK_MODULES([DEPENDENCIES], [ libsoup-gnome-2.4 >= $LIBSOUP_GNOME_REQUIRED gnome-keyring-1 >= $GNOME_KEYRING_REQUIRED gsettings-desktop-schemas >= $GSETTINGS_DESKTOP_SCHEMAS_REQUIRED + libnotify >= $LIBNOTIFY_REQUIRED ]) # ****************** diff --git a/src/ephy-main.c b/src/ephy-main.c index c74b2e7ef..19b4100f8 100644 --- a/src/ephy-main.c +++ b/src/ephy-main.c @@ -35,6 +35,7 @@ #include "eggsmclient.h" #include <libxml/xmlversion.h> +#include <libnotify/notify.h> #include <glib/gi18n.h> @@ -261,6 +262,8 @@ main (int argc, */ LIBXML_TEST_VERSION; + notify_init (PACKAGE); + /* If we're given -remote arguments, translate them */ if (argc >= 2 && strcmp (argv[1], "-remote") == 0) { const char *opening, *closing; @@ -463,6 +466,9 @@ main (int argc, /* Shutdown */ g_object_unref (ephy_shell); + if (notify_is_initted ()) + notify_uninit (); + ephy_file_save_accels (); ephy_state_save (); ephy_settings_shutdown (); diff --git a/src/window-commands.c b/src/window-commands.c index 341ea4014..3cdbcf686 100644 --- a/src/window-commands.c +++ b/src/window-commands.c @@ -58,6 +58,7 @@ #include <gtk/gtk.h> #include <glib/gi18n.h> #include <webkit/webkit.h> +#include <libnotify/notify.h> static void page_setup_done_cb (GtkPageSetup *setup, @@ -503,6 +504,20 @@ fill_default_application_title (EphyApplicationDialogData *data) gtk_entry_set_text (GTK_ENTRY (data->entry), title); } +static void +notify_launch_cb (NotifyNotification *notification, + char *action, + gpointer user_data) +{ + char * desktop_file = user_data; + /* A gross hack to be able to launch epiphany from within + * Epiphany. Might be a good idea to figure out a better + * solution... */ + g_unsetenv (EPHY_UUID_ENVVAR); + ephy_file_launch_desktop_file (desktop_file, NULL, 0, NULL); + g_free (desktop_file); +} + void window_cmd_file_save_as_application (GtkAction *action, EphyWindow *window) @@ -558,14 +573,30 @@ window_cmd_file_save_as_application (GtkAction *action, if (response == GTK_RESPONSE_OK) { char *desktop_file; + char *message; + NotifyNotification *notification; /* Create Web Application, including a new profile and .desktop file. */ desktop_file = ephy_web_view_create_web_application (view, gtk_entry_get_text (GTK_ENTRY (data->entry)), gtk_image_get_pixbuf (GTK_IMAGE (data->image))); - /* TODO: show a notification when the app is totally - * created and ready to be launched */ + message = g_strdup_printf (_("The application '%s' is ready to be used"), + gtk_entry_get_text (GTK_ENTRY (data->entry))); + + notification = notify_notification_new (message, + NULL, NULL); + g_free (message); + notify_notification_add_action (notification, "launch", _("Launch"), + (NotifyActionCallback)notify_launch_cb, + g_path_get_basename (desktop_file), + NULL); + notify_notification_set_icon_from_pixbuf (notification, gtk_image_get_pixbuf (GTK_IMAGE (data->image))); + notify_notification_set_timeout (notification, NOTIFY_EXPIRES_DEFAULT); + notify_notification_set_urgency (notification, NOTIFY_URGENCY_LOW); + notify_notification_set_hint (notification, "transient", g_variant_new_boolean (TRUE)); + notify_notification_show (notification, NULL); + g_free (desktop_file); } |