pidgin/gtkutils.c

changeset 41477
34907838c401
parent 41379
b271cf41c92d
child 41502
d00bcebf0f90
equal deleted inserted replaced
41476:1a53026013e4 41477:34907838c401
99 99
100 /****************************************************************************** 100 /******************************************************************************
101 * Code 101 * Code
102 *****************************************************************************/ 102 *****************************************************************************/
103 103
104 GtkWidget *pidgin_separator(GtkWidget *menu)
105 {
106 GtkWidget *menuitem;
107
108 menuitem = gtk_separator_menu_item_new();
109 gtk_widget_show(menuitem);
110 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
111 return menuitem;
112 }
113
114 GtkWidget *pidgin_new_check_item(GtkWidget *menu, const char *str,
115 GCallback cb, gpointer data, gboolean checked)
116 {
117 GtkWidget *menuitem;
118 menuitem = gtk_check_menu_item_new_with_mnemonic(str);
119
120 if (menu)
121 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
122
123 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem), checked);
124
125 if (cb)
126 g_signal_connect(G_OBJECT(menuitem), "activate", cb, data);
127
128 gtk_widget_show_all(menuitem);
129
130 return menuitem;
131 }
132
133 GtkWidget *pidgin_new_menu_item(GtkWidget *menu, const char *mnemonic, 104 GtkWidget *pidgin_new_menu_item(GtkWidget *menu, const char *mnemonic,
134 const char *icon, GCallback cb, gpointer data) 105 const char *icon, GCallback cb, gpointer data)
135 { 106 {
136 GtkWidget *menuitem; 107 GtkWidget *menuitem;
137 GtkWidget *box; 108 GtkWidget *box;
404 375
405 protocol = purple_account_get_protocol(account); 376 protocol = purple_account_get_protocol(account);
406 if (protocol == NULL) 377 if (protocol == NULL)
407 return NULL; 378 return NULL;
408 return pidgin_create_icon_from_protocol(protocol, size, account); 379 return pidgin_create_icon_from_protocol(protocol, size, account);
409 }
410
411 static void
412 menu_action_cb(GtkMenuItem *item, gpointer object)
413 {
414 gpointer data;
415 void (*callback)(gpointer, gpointer);
416
417 callback = g_object_get_data(G_OBJECT(item), "purplecallback");
418 data = g_object_get_data(G_OBJECT(item), "purplecallbackdata");
419
420 if (callback)
421 callback(object, data);
422 }
423
424 static GtkWidget *
425 do_pidgin_append_menu_action(GtkWidget *menu, PurpleActionMenu *act,
426 gpointer object)
427 {
428 GtkWidget *menuitem;
429 GList *list;
430
431 if (act == NULL) {
432 return pidgin_separator(menu);
433 }
434
435 menuitem = gtk_menu_item_new_with_mnemonic(
436 purple_action_menu_get_label(act));
437
438 list = purple_action_menu_get_children(act);
439
440 if (list == NULL) {
441 GCallback callback;
442
443 callback = purple_action_menu_get_callback(act);
444
445 if (callback != NULL) {
446 g_object_set_data(G_OBJECT(menuitem),
447 "purplecallback",
448 callback);
449 g_object_set_data(G_OBJECT(menuitem),
450 "purplecallbackdata",
451 purple_action_menu_get_data(act));
452 g_signal_connect(G_OBJECT(menuitem), "activate",
453 G_CALLBACK(menu_action_cb),
454 object);
455 } else {
456 gtk_widget_set_sensitive(menuitem, FALSE);
457 }
458
459 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
460 } else {
461 GList *l = NULL;
462 GtkWidget *submenu = NULL;
463 GtkAccelGroup *group;
464
465 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
466
467 submenu = gtk_menu_new();
468 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), submenu);
469
470 group = gtk_menu_get_accel_group(GTK_MENU(menu));
471 if (group) {
472 char *path = g_strdup_printf("%s/%s",
473 gtk_menu_item_get_accel_path(GTK_MENU_ITEM(menuitem)),
474 purple_action_menu_get_label(act));
475 gtk_menu_set_accel_path(GTK_MENU(submenu), path);
476 g_free(path);
477 gtk_menu_set_accel_group(GTK_MENU(submenu), group);
478 }
479
480 for (l = list; l; l = l->next) {
481 PurpleActionMenu *act = (PurpleActionMenu *)l->data;
482
483 do_pidgin_append_menu_action(submenu, act, object);
484 }
485 }
486 return menuitem;
487 }
488
489 GtkWidget *
490 pidgin_append_menu_action(GtkWidget *menu, PurpleActionMenu *act,
491 gpointer object)
492 {
493 GtkWidget *menuitem = do_pidgin_append_menu_action(menu, act, object);
494 purple_action_menu_free(act);
495 return menuitem;
496 } 380 }
497 381
498 static gboolean buddyname_completion_match_func(GtkEntryCompletion *completion, 382 static gboolean buddyname_completion_match_func(GtkEntryCompletion *completion,
499 const gchar *key, GtkTreeIter *iter, gpointer user_data) 383 const gchar *key, GtkTreeIter *iter, gpointer user_data)
500 { 384 {

mercurial