diff options
author | Ted Gould <ted@gould.cx> | 2011-08-11 09:25:58 -0500 |
---|---|---|
committer | Ted Gould <ted@gould.cx> | 2011-08-11 09:25:58 -0500 |
commit | bfd668716a3702fbc27abee0bf609fc747b88f4e (patch) | |
tree | d33cd9bd9c2c4eaa75d9543252d34d8a8aea5c61 /src | |
parent | d7e5e470e3abc7b1ef9c1854b4078f4952642615 (diff) | |
parent | 191be4ed4601ce62c3197eb14b4044c89a26a0cd (diff) | |
download | ayatana-indicator-messages-bfd668716a3702fbc27abee0bf609fc747b88f4e.tar.gz ayatana-indicator-messages-bfd668716a3702fbc27abee0bf609fc747b88f4e.tar.bz2 ayatana-indicator-messages-bfd668716a3702fbc27abee0bf609fc747b88f4e.zip |
Updating from Ubuntu Desktop
Diffstat (limited to 'src')
-rw-r--r-- | src/default-applications.c | 43 | ||||
-rw-r--r-- | src/messages-service.c | 2 |
2 files changed, 36 insertions, 9 deletions
diff --git a/src/default-applications.c b/src/default-applications.c index afb5025..0382e4d 100644 --- a/src/default-applications.c +++ b/src/default-applications.c @@ -21,20 +21,22 @@ with this program. If not, see <http://www.gnu.org/licenses/>. #include <glib.h> #include <glib/gi18n.h> +#include <gio/gio.h> +#include <gio/gdesktopappinfo.h> #include "default-applications.h" struct default_db_t { const gchar * desktop_file; + const gchar * uri_scheme; const gchar * name; const gchar * setupname; const gchar * icon; }; struct default_db_t default_db[] = { - {"evolution.desktop", N_("Mail"), N_("Set Up Mail..."), "applications-email-panel"}, - {"empathy.desktop", N_("Chat"), N_("Set Up Chat..."), "applications-chat-panel"}, - {"gwibber.desktop", N_("Broadcast"), N_("Set Up Broadcast Account..."), "applications-microblogging-panel"}, - {NULL, NULL} + {NULL, "mailto", N_("Mail"), N_("Set Up Mail..."), "applications-email-panel"}, + {"empathy.desktop", NULL, N_("Chat"), N_("Set Up Chat..."), "applications-chat-panel"}, + {"gwibber.desktop", NULL, N_("Broadcast"), N_("Set Up Broadcast Account..."), "applications-microblogging-panel"}, }; static struct default_db_t * @@ -44,17 +46,40 @@ get_default_helper (const gchar * desktop_path) gchar * basename = g_path_get_basename(desktop_path); g_return_val_if_fail(basename != NULL, NULL); + gboolean found = FALSE; gint i; - for (i = 0; default_db[i].desktop_file != NULL; i++) { - if (g_strcmp0(default_db[i].desktop_file, basename) == 0) { - break; + gint length = G_N_ELEMENTS(default_db); + for (i = 0; i < length && !found; i++) { + if (default_db[i].desktop_file) { + if (g_strcmp0(default_db[i].desktop_file, basename) == 0) { + found = TRUE; + } + } else if (default_db[i].uri_scheme) { + GAppInfo *info = g_app_info_get_default_for_uri_scheme(default_db[i].uri_scheme); + if (!info) { + continue; + } + + const gchar * filename = g_desktop_app_info_get_filename(G_DESKTOP_APP_INFO(info)); + if (!filename) { + g_object_unref(info); + continue; + } + + gchar * default_basename = g_path_get_basename(filename); + g_object_unref(info); + if (g_strcmp0(default_basename, basename) == 0) { + found = TRUE; + } + + g_free(default_basename); } } g_free(basename); - if (default_db[i].desktop_file != NULL) { - return &default_db[i]; + if (found) { + return &default_db[i - 1]; } return NULL; diff --git a/src/messages-service.c b/src/messages-service.c index 63549e3..c891f88 100644 --- a/src/messages-service.c +++ b/src/messages-service.c @@ -799,6 +799,8 @@ menushell_foreach_cb (DbusmenuMenuitem * data_mi, gpointer data_ms) { AppMenuItem * appmenu = APP_MENU_ITEM(data_mi); if (!g_strcmp0(INDICATE_LISTENER_SERVER_DBUS_NAME((IndicateListenerServer*)msl->server), INDICATE_LISTENER_SERVER_DBUS_NAME(app_menu_item_get_server(appmenu)))) { msl->found = TRUE; + /* Return a position at the end of our shortcuts */ + msl->position += g_list_length(app_menu_item_get_items(appmenu)); } else { msl->position++; } |