pidgin/gtksmiley-manager.c

changeset 35724
baf1255d0a3b
parent 35723
63d3826975d9
child 35725
301fdb5e342e
equal deleted inserted replaced
35723:63d3826975d9 35724:baf1255d0a3b
55 }; 55 };
56 #endif 56 #endif
57 57
58 typedef struct 58 typedef struct
59 { 59 {
60 PurpleSmiley *smiley;
61
60 gchar *filename; 62 gchar *filename;
61 63
62 GtkDialog *window; 64 GtkDialog *window;
63 GtkImage *thumbnail; 65 GtkImage *thumbnail;
64 GtkEntry *shortcut; 66 GtkEntry *shortcut;
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 {

mercurial