# HG changeset patch # User Sadrul Habib Chowdhury # Date 1210633770 0 # Node ID d0ee799828d1a52ae46c50121901f450b88e9c87 # Parent a372713e405c000afa41ac503c3d0a1748f91e4e Modified patch from malu to add an 'Edit' button in the smiley manager dialog. References #1187. diff -r a372713e405c -r d0ee799828d1 pidgin/gtksmiley.c --- a/pidgin/gtksmiley.c Sun May 11 22:02:37 2008 +0000 +++ b/pidgin/gtksmiley.c Mon May 12 23:09:30 2008 +0000 @@ -37,6 +37,8 @@ #include "gtkutils.h" #include "pidginstock.h" +#define PIDGIN_RESPONSE_EDIT 1000 + typedef struct { PurpleSmiley *smiley; @@ -510,18 +512,33 @@ gtk_dialog_set_response_sensitive(GTK_DIALOG(dialog->window), GTK_RESPONSE_NO, selected > 0); + + gtk_dialog_set_response_sensitive(GTK_DIALOG(dialog->window), + PIDGIN_RESPONSE_EDIT, selected > 0); +} + +static void +smiley_edit_iter(SmileyManager *dialog, GtkTreeIter *iter) +{ + PurpleSmiley *smiley = NULL; + gtk_tree_model_get(GTK_TREE_MODEL(dialog->model), iter, SMILEY, &smiley, -1); + pidgin_smiley_edit(gtk_widget_get_toplevel(GTK_WIDGET(dialog->treeview)), smiley); + g_object_unref(G_OBJECT(smiley)); } static void smiley_edit_cb(GtkTreeView *treeview, GtkTreePath *path, GtkTreeViewColumn *col, gpointer data) { GtkTreeIter iter; SmileyManager *dialog = data; - PurpleSmiley *smiley = NULL; gtk_tree_model_get_iter(GTK_TREE_MODEL(dialog->model), &iter, path); - gtk_tree_model_get(GTK_TREE_MODEL(dialog->model), &iter, SMILEY, &smiley, -1); - pidgin_smiley_edit(gtk_widget_get_toplevel(GTK_WIDGET(treeview)), smiley); - g_object_unref(G_OBJECT(smiley)); + smiley_edit_iter(dialog, &iter); +} + +static void +edit_selected_cb(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data) +{ + smiley_edit_iter(data, iter); } static GtkWidget *smiley_list_create(SmileyManager *dialog) @@ -574,6 +591,8 @@ static void smiley_manager_select_cb(GtkWidget *widget, gint resp, SmileyManager *dialog) { + GtkTreeSelection *selection = NULL; + switch (resp) { case GTK_RESPONSE_YES: pidgin_smiley_edit(dialog->window, NULL); @@ -587,6 +606,11 @@ g_free(smiley_manager); smiley_manager = NULL; break; + case PIDGIN_RESPONSE_EDIT: + /* Find smiley of selection... */ + selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(dialog->treeview)); + gtk_tree_selection_selected_foreach(selection, edit_selected_cb, dialog); + break; default: purple_debug_info("gtksmiley", "No valid selection\n"); break; @@ -613,6 +637,7 @@ NULL, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_ADD, GTK_RESPONSE_YES, + GTK_STOCK_EDIT, PIDGIN_RESPONSE_EDIT, GTK_STOCK_DELETE, GTK_RESPONSE_NO, GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, NULL); @@ -621,7 +646,9 @@ gtk_window_set_role(GTK_WINDOW(win), "custom_smiley_manager"); gtk_container_set_border_width(GTK_CONTAINER(win),PIDGIN_HIG_BORDER); gtk_dialog_set_response_sensitive(GTK_DIALOG(win), GTK_RESPONSE_NO, FALSE); - + gtk_dialog_set_response_sensitive(GTK_DIALOG(win), PIDGIN_RESPONSE_EDIT, + FALSE); + g_signal_connect(win, "response", G_CALLBACK(smiley_manager_select_cb), dialog);