/pidgin/main: 5b8d92fdcaa3: Use glib's Desktop file utilities in...
Jorge Villase?or <[email protected]>
| Newsgroups | gmane.comp.gnome.gaim.cvs |
|---|---|
| Message-ID | <[email protected]> |
Changeset: 5b8d92fdcaa38258804ab1843a08b1f18033f4e0 Author: Jorge Villase?or <[email protected]> Date: 2016-01-19 00:11 -0800 Branch: default URL: https://hg.pidgin.im/pidgin/main/rev/5b8d92fdcaa3 Description: Use glib's Desktop file utilities instead of our own Glib have a key-value parser which happens to be really useful to parse Desktop files. Using this we can remove our own implementation of this code. diffstat: pidgin/gtkutils.c | 119 ++++++++++++++++++++++++++++++++++------------------- 1 files changed, 77 insertions(+), 42 deletions(-) diffs (159 lines): diff --git a/pidgin/gtkutils.c b/pidgin/gtkutils.c --- a/pidgin/gtkutils.c +++ b/pidgin/gtkutils.c @@ -33,7 +33,6 @@ #include "conversation.h" #include "debug.h" -#include "desktopitem.h" #include "notify.h" #include "prefs.h" #include "protocol.h" @@ -1510,50 +1509,90 @@ pidgin_dnd_file_send_image(PurpleAccount #ifndef _WIN32 static void pidgin_dnd_file_send_desktop(PurpleAccount *account, const gchar *who, - PurpleDesktopItem *item) + const gchar *filename) { - PurpleDesktopItemType dtype; - char key[64]; - const char *itemname = NULL; - - const char * const *langs; - langs = g_get_language_names(); - if (langs[0]) { - g_snprintf(key, sizeof(key), "Name[%s]", langs[0]); - itemname = purple_desktop_item_get_string(item, key); + gchar *name; + gchar *type; + gchar *url; + GKeyFile *desktop_file; + PurpleConversation *conv; + PidginConversation *gtkconv; + GError *error = NULL; + + desktop_file = g_key_file_new(); + + if (!g_key_file_load_from_file(desktop_file, filename, G_KEY_FILE_NONE, &error)) { + if (error) { + purple_debug_warning("D&D", "Failed to load %s: %s\n", + filename, error->message); + g_error_free(error); + } + return; } - if (!itemname) - itemname = purple_desktop_item_get_string(item, "Name"); - - dtype = purple_desktop_item_get_entry_type(item); - switch (dtype) { - PurpleConversation *conv; - PidginConversation *gtkconv; - - case PURPLE_DESKTOP_ITEM_TYPE_LINK: - conv = PURPLE_CONVERSATION(purple_im_conversation_new(account, who)); - gtkconv = PIDGIN_CONVERSATION(conv); - pidgin_webview_insert_link(PIDGIN_WEBVIEW(gtkconv->entry), - purple_desktop_item_get_string(item, "URL"), - itemname); - break; - default: - /* I don't know if we really want to do anything here. Most of - * the desktop item types are crap like "MIME Type" (I have no - * clue how that would be a desktop item) and "Comment"... - * nothing we can really send. The only logical one is - * "Application," but do we really want to send a binary and - * nothing else? Probably not. I'll just give an error and - * return. */ - /* The original patch sent the icon used by the launcher. That's probably wrong */ + name = g_key_file_get_string(desktop_file, G_KEY_FILE_DESKTOP_GROUP, + G_KEY_FILE_DESKTOP_KEY_NAME, &error); + if (error) { + purple_debug_warning("D&D", "Failed to read the Name from a desktop file: %s\n", + error->message); + g_error_free(error); + + } + + type = g_key_file_get_string(desktop_file, G_KEY_FILE_DESKTOP_GROUP, + G_KEY_FILE_DESKTOP_KEY_TYPE, &error); + if (error) { + purple_debug_warning("D&D", "Failed to read the Type from a desktop file: %s\n", + error->message); + g_error_free(error); + + } + + url = g_key_file_get_string(desktop_file, G_KEY_FILE_DESKTOP_GROUP, + G_KEY_FILE_DESKTOP_KEY_URL, &error); + if (error) { + purple_debug_warning("D&D", "Failed to read the Type from a desktop file: %s\n", + error->message); + g_error_free(error); + + } + + + /* If any of this is null, do nothing. */ + if (!name || !type || url) { + g_free(type); + g_free(name); + g_free(url); + + return; + } + + /* I don't know if we really want to do anything here. Most of + * the desktop item types are crap like "MIME Type" (I have no + * clue how that would be a desktop item) and "Comment"... + * nothing we can really send. The only logical one is + * "Application," but do we really want to send a binary and + * nothing else? Probably not. I'll just give an error and + * return. */ + /* The original patch sent the icon used by the launcher. That's probably wrong */ + if (!g_strcmp0(type, "Link")) { purple_notify_error(NULL, NULL, _("Cannot send launcher"), _("You dragged a desktop launcher. Most " "likely you wanted to send the target " "of this launcher instead of this " "launcher itself."), NULL); - break; + + } else { + + conv = PURPLE_CONVERSATION(purple_im_conversation_new(account, who)); + gtkconv = PIDGIN_CONVERSATION(conv); + pidgin_webview_insert_link(PIDGIN_WEBVIEW(gtkconv->entry), + url, name); } + + g_free(type); + g_free(name); + g_free(url); } #endif /* _WIN32 */ @@ -1563,9 +1602,6 @@ pidgin_dnd_file_manage(GtkSelectionData GdkPixbuf *pb; GList *files = purple_uri_list_extract_filenames((const gchar *) gtk_selection_data_get_data(sd)); PurpleConnection *gc = purple_account_get_connection(account); -#ifndef _WIN32 - PurpleDesktopItem *item; -#endif gchar *filename = NULL; gchar *basename = NULL; @@ -1612,9 +1648,8 @@ pidgin_dnd_file_manage(GtkSelectionData #ifndef _WIN32 /* Are we trying to send a .desktop file? */ - else if (purple_str_has_suffix(basename, ".desktop") && (item = purple_desktop_item_new_from_file(filename))) { - pidgin_dnd_file_send_desktop(account, who, item); - purple_desktop_item_unref(item); + else if (purple_str_has_suffix(basename, ".desktop")) { + pidgin_dnd_file_send_desktop(account, who, filename); continue; } _______________________________________________ Commits mailing list [email protected] https://pidgin.im/cgi-bin/mailman/listinfo/commits