| 89 |
91 |
| 90 static void |
92 static void |
| 91 edit_dialog_destroy(GtkWidget *window, gpointer _edit_dialog) |
93 edit_dialog_destroy(GtkWidget *window, gpointer _edit_dialog) |
| 92 { |
94 { |
| 93 SmileyEditDialog *edit_dialog = _edit_dialog; |
95 SmileyEditDialog *edit_dialog = _edit_dialog; |
| |
96 |
| |
97 g_object_set_data(G_OBJECT(edit_dialog->smiley), |
| |
98 "pidgin-smiley-manager-edit-dialog", NULL); |
| |
99 g_object_unref(edit_dialog->smiley); |
| 94 |
100 |
| 95 g_free(edit_dialog->filename); |
101 g_free(edit_dialog->filename); |
| 96 g_free(edit_dialog); |
102 g_free(edit_dialog); |
| 97 } |
103 } |
| 98 |
104 |
| 299 SmileyEditDialog *edit_dialog; |
305 SmileyEditDialog *edit_dialog; |
| 300 GtkWidget *vbox, *hbox; |
306 GtkWidget *vbox, *hbox; |
| 301 GtkLabel *label; |
307 GtkLabel *label; |
| 302 GtkButton *filech; |
308 GtkButton *filech; |
| 303 |
309 |
| |
310 edit_dialog = g_object_get_data(G_OBJECT(smiley), |
| |
311 "pidgin-smiley-manager-edit-dialog"); |
| |
312 if (edit_dialog) { |
| |
313 gtk_window_present(GTK_WINDOW(edit_dialog->window)); |
| |
314 return; |
| |
315 } |
| |
316 |
| 304 edit_dialog = g_new0(SmileyEditDialog, 1); |
317 edit_dialog = g_new0(SmileyEditDialog, 1); |
| 305 |
318 |
| 306 edit_dialog->window = GTK_DIALOG(gtk_dialog_new_with_buttons( |
319 edit_dialog->window = GTK_DIALOG(gtk_dialog_new_with_buttons( |
| 307 smiley ? _("Edit Smiley") : _("Add Smiley"), |
320 smiley ? _("Edit Smiley") : _("Add Smiley"), |
| 308 parent, GTK_DIALOG_DESTROY_WITH_PARENT, |
321 parent, GTK_DIALOG_DESTROY_WITH_PARENT, |
| 310 smiley ? GTK_STOCK_SAVE : GTK_STOCK_ADD, GTK_RESPONSE_ACCEPT, |
323 smiley ? GTK_STOCK_SAVE : GTK_STOCK_ADD, GTK_RESPONSE_ACCEPT, |
| 311 NULL)); |
324 NULL)); |
| 312 gtk_dialog_set_default_response( |
325 gtk_dialog_set_default_response( |
| 313 edit_dialog->window, GTK_RESPONSE_ACCEPT); |
326 edit_dialog->window, GTK_RESPONSE_ACCEPT); |
| 314 |
327 |
| |
328 edit_dialog->smiley = smiley; |
| |
329 g_object_set_data(G_OBJECT(smiley), |
| |
330 "pidgin-smiley-manager-edit-dialog", edit_dialog); |
| |
331 g_object_ref(smiley); |
| |
332 |
| 315 #if !GTK_CHECK_VERSION(3,0,0) |
333 #if !GTK_CHECK_VERSION(3,0,0) |
| 316 gtk_container_set_border_width( |
334 gtk_container_set_border_width( |
| 317 GTK_CONTAINER(edit_dialog->window), PIDGIN_HIG_BORDER); |
335 GTK_CONTAINER(edit_dialog->window), PIDGIN_HIG_BORDER); |
| 318 #endif |
336 #endif |
| 319 |
337 |
| 509 |
527 |
| 510 |
528 |
| 511 /****************************************************************************** |
529 /****************************************************************************** |
| 512 * The Smiley Manager |
530 * The Smiley Manager |
| 513 *****************************************************************************/ |
531 *****************************************************************************/ |
| 514 |
|
| 515 #if 0 |
|
| 516 static void smile_selected_cb(GtkTreeSelection *sel, SmileyManager *dialog) |
|
| 517 { |
|
| 518 gint selected; |
|
| 519 |
|
| 520 selected = gtk_tree_selection_count_selected_rows(sel); |
|
| 521 |
|
| 522 gtk_dialog_set_response_sensitive(dialog->window, |
|
| 523 GTK_RESPONSE_NO, selected > 0); |
|
| 524 |
|
| 525 gtk_dialog_set_response_sensitive(dialog->window, |
|
| 526 PIDGIN_RESPONSE_MODIFY, selected > 0); |
|
| 527 } |
|
| 528 #endif |
|
| 529 |
|
| 530 #if 0 |
|
| 531 static void |
|
| 532 smiley_edit_iter(SmileyManager *dialog, GtkTreeIter *iter) |
|
| 533 { |
|
| 534 PurpleSmiley *smiley = NULL; |
|
| 535 GtkWidget *window = NULL; |
|
| 536 gtk_tree_model_get(GTK_TREE_MODEL(dialog->model), iter, SMILEY, &smiley, -1); |
|
| 537 if ((window = g_object_get_data(G_OBJECT(smiley), "edit-dialog")) != NULL) |
|
| 538 gtk_window_present(GTK_WINDOW(window)); |
|
| 539 else |
|
| 540 pidgin_smiley_edit(gtk_widget_get_toplevel(GTK_WIDGET(dialog->treeview)), smiley); |
|
| 541 g_object_unref(G_OBJECT(smiley)); |
|
| 542 } |
|
| 543 #endif |
|
| 544 |
|
| 545 #if 0 |
|
| 546 static void smiley_edit_cb(GtkTreeView *treeview, GtkTreePath *path, GtkTreeViewColumn *col, gpointer data) |
|
| 547 { |
|
| 548 GtkTreeIter iter; |
|
| 549 SmileyManager *dialog = data; |
|
| 550 |
|
| 551 gtk_tree_model_get_iter(GTK_TREE_MODEL(dialog->model), &iter, path); |
|
| 552 smiley_edit_iter(dialog, &iter); |
|
| 553 } |
|
| 554 #endif |
|
| 555 |
|
| 556 #if 0 |
|
| 557 static void |
|
| 558 edit_selected_cb(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data) |
|
| 559 { |
|
| 560 smiley_edit_iter(data, iter); |
|
| 561 } |
|
| 562 #endif |
|
| 563 |
532 |
| 564 #if 0 |
533 #if 0 |
| 565 static void |
534 static void |
| 566 smiley_got_url(PurpleHttpConnection *http_conn, PurpleHttpResponse *response, |
535 smiley_got_url(PurpleHttpConnection *http_conn, PurpleHttpResponse *response, |
| 567 gpointer _dialog) |
536 gpointer _dialog) |
| 636 gtk_drag_finish(dc, FALSE, FALSE, t); |
605 gtk_drag_finish(dc, FALSE, FALSE, t); |
| 637 } |
606 } |
| 638 #endif |
607 #endif |
| 639 |
608 |
| 640 static void |
609 static void |
| |
610 smiley_list_selected(GtkTreeSelection *sel, gpointer _manager) |
| |
611 { |
| |
612 SmileyManager *manager = _manager; |
| |
613 gboolean sens; |
| |
614 |
| |
615 sens = (gtk_tree_selection_count_selected_rows(sel) > 0); |
| |
616 |
| |
617 gtk_dialog_set_response_sensitive(manager->window, |
| |
618 GTK_RESPONSE_NO, sens); |
| |
619 gtk_dialog_set_response_sensitive(manager->window, |
| |
620 PIDGIN_RESPONSE_MODIFY, sens); |
| |
621 } |
| |
622 |
| |
623 static void |
| |
624 smiley_list_activated(GtkTreeView *tree, GtkTreePath *path, |
| |
625 GtkTreeViewColumn *col, gpointer _manager) |
| |
626 { |
| |
627 SmileyManager *manager = _manager; |
| |
628 GtkTreeIter iter; |
| |
629 PurpleSmiley *smiley = NULL; |
| |
630 |
| |
631 if (!gtk_tree_model_get_iter( |
| |
632 GTK_TREE_MODEL(manager->model), &iter, path)) |
| |
633 { |
| |
634 return; |
| |
635 } |
| |
636 |
| |
637 gtk_tree_model_get(GTK_TREE_MODEL(manager->model), &iter, |
| |
638 SMILEY_LIST_MODEL_PURPLESMILEY, &smiley, -1); |
| |
639 g_return_if_fail(PURPLE_IS_SMILEY(smiley)); |
| |
640 |
| |
641 pidgin_smiley_edit(GTK_WINDOW(manager->window), smiley); |
| |
642 } |
| |
643 |
| |
644 static void |
| 641 pidgin_smiley_manager_list_add(SmileyManager *manager, PurpleSmiley *smiley) |
645 pidgin_smiley_manager_list_add(SmileyManager *manager, PurpleSmiley *smiley) |
| 642 { |
646 { |
| 643 GdkPixbuf *smiley_image; |
647 GdkPixbuf *smiley_image; |
| 644 GtkTreeIter iter; |
648 GtkTreeIter iter; |
| 645 |
649 |
| 706 g_object_unref(manager->model); |
710 g_object_unref(manager->model); |
| 707 |
711 |
| 708 sel = gtk_tree_view_get_selection(tree); |
712 sel = gtk_tree_view_get_selection(tree); |
| 709 gtk_tree_selection_set_mode(sel, GTK_SELECTION_MULTIPLE); |
713 gtk_tree_selection_set_mode(sel, GTK_SELECTION_MULTIPLE); |
| 710 |
714 |
| 711 // g_signal_connect(sel, "changed", |
715 g_signal_connect(sel, "changed", |
| 712 // G_CALLBACK(smile_selected_cb), manager); |
716 G_CALLBACK(smiley_list_selected), manager); |
| 713 // g_signal_connect(tree, "row_activated", |
717 g_signal_connect(tree, "row-activated", |
| 714 // G_CALLBACK(smiley_edit_cb), manager); |
718 G_CALLBACK(smiley_list_activated), manager); |
| 715 |
719 |
| 716 #if 0 |
720 #if 0 |
| 717 gtk_drag_dest_set(GTK_WIDGET(tree), GTK_DEST_DEFAULT_MOTION | |
721 gtk_drag_dest_set(GTK_WIDGET(tree), GTK_DEST_DEFAULT_MOTION | |
| 718 GTK_DEST_DEFAULT_HIGHLIGHT | GTK_DEST_DEFAULT_DROP, |
722 GTK_DEST_DEFAULT_HIGHLIGHT | GTK_DEST_DEFAULT_DROP, |
| 719 targets, G_N_ELEMENTS(targets), |
723 targets, G_N_ELEMENTS(targets), |
| 758 #endif |
762 #endif |
| 759 |
763 |
| 760 static void |
764 static void |
| 761 smiley_manager_select_cb(GtkWidget *widget, gint resp, SmileyManager *manager) |
765 smiley_manager_select_cb(GtkWidget *widget, gint resp, SmileyManager *manager) |
| 762 { |
766 { |
| 763 #if 0 |
|
| 764 GtkTreeSelection *selection = NULL; |
767 GtkTreeSelection *selection = NULL; |
| 765 #endif |
768 GList *selected_rows, *selected_smileys = NULL, *it; |
| |
769 GtkTreeModel *model = GTK_TREE_MODEL(manager->model); |
| |
770 |
| |
771 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(manager->tree)); |
| |
772 selected_rows = gtk_tree_selection_get_selected_rows(selection, NULL); |
| |
773 for (it = selected_rows; it; it = g_list_next(it)) { |
| |
774 GtkTreePath *path = it->data; |
| |
775 GtkTreeIter iter; |
| |
776 PurpleSmiley *smiley = NULL; |
| |
777 |
| |
778 if (!gtk_tree_model_get_iter(model, &iter, path)) |
| |
779 continue; |
| |
780 |
| |
781 gtk_tree_model_get(model, &iter, |
| |
782 SMILEY_LIST_MODEL_PURPLESMILEY, &smiley, -1); |
| |
783 if (!smiley) |
| |
784 continue; |
| |
785 |
| |
786 selected_smileys = g_list_prepend(selected_smileys, smiley); |
| |
787 } |
| |
788 g_list_free_full(selected_rows, (GDestroyNotify)gtk_tree_path_free); |
| 766 |
789 |
| 767 switch (resp) { |
790 switch (resp) { |
| 768 case GTK_RESPONSE_YES: |
791 case GTK_RESPONSE_YES: |
| 769 pidgin_smiley_edit(GTK_WINDOW(manager->window), NULL); |
792 pidgin_smiley_edit(GTK_WINDOW(manager->window), NULL); |
| 770 break; |
793 break; |
| 774 break; |
797 break; |
| 775 #endif |
798 #endif |
| 776 case GTK_RESPONSE_DELETE_EVENT: |
799 case GTK_RESPONSE_DELETE_EVENT: |
| 777 case GTK_RESPONSE_CLOSE: |
800 case GTK_RESPONSE_CLOSE: |
| 778 gtk_widget_destroy(GTK_WIDGET(manager->window)); |
801 gtk_widget_destroy(GTK_WIDGET(manager->window)); |
| 779 purple_http_conn_cancel( |
802 purple_http_conn_cancel(manager->running_request); |
| 780 smiley_manager->running_request); |
803 g_free(manager); |
| 781 g_free(smiley_manager); |
|
| 782 smiley_manager = NULL; |
804 smiley_manager = NULL; |
| 783 break; |
805 break; |
| 784 #if 0 |
|
| 785 case PIDGIN_RESPONSE_MODIFY: |
806 case PIDGIN_RESPONSE_MODIFY: |
| 786 /* Find smiley of selection... */ |
807 for (it = selected_smileys; it; it = g_list_next(it)) { |
| 787 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(manager->treeview)); |
808 pidgin_smiley_edit(GTK_WINDOW(manager->window), |
| 788 gtk_tree_selection_selected_foreach(selection, edit_selected_cb, manager); |
809 it->data); |
| |
810 } |
| 789 break; |
811 break; |
| 790 #endif |
|
| 791 default: |
812 default: |
| 792 g_warn_if_reached(); |
813 g_warn_if_reached(); |
| 793 } |
814 } |
| |
815 |
| |
816 g_list_free(selected_smileys); |
| 794 } |
817 } |
| 795 |
818 |
| 796 void |
819 void |
| 797 pidgin_smiley_manager_show(void) |
820 pidgin_smiley_manager_show(void) |
| 798 { |
821 { |