Mercurial > pidgin.yaz
comparison pidgin/gtkdocklet.c @ 20895:dc94a669bbf6
merge of '0799c401a032f2fe66af5bbf14c1269fa11fe738'
and 'fa0e512d79dfe479bc36c2436089b51854ef3eb5'
author | Sadrul Habib Chowdhury <imadil@gmail.com> |
---|---|
date | Fri, 12 Oct 2007 11:19:17 +0000 |
parents | 39a793dcb9df c7b20abc3885 |
children | 1d8969748cd9 8b9c48347004 |
comparison
equal
deleted
inserted
replaced
20894:39a793dcb9df | 20895:dc94a669bbf6 |
---|---|
471 pidgin_new_item_from_stock(submenu, _("Saved..."), NULL, G_CALLBACK(pidgin_status_window_show), NULL, 0, 0, NULL); | 471 pidgin_new_item_from_stock(submenu, _("Saved..."), NULL, G_CALLBACK(pidgin_status_window_show), NULL, 0, 0, NULL); |
472 | 472 |
473 return menuitem; | 473 return menuitem; |
474 } | 474 } |
475 | 475 |
476 | |
477 | |
478 static void | |
479 plugin_act(GtkObject *obj, PurplePluginAction *pam) | |
480 { | |
481 if (pam && pam->callback) | |
482 pam->callback(pam); | |
483 } | |
484 | |
485 static void | |
486 build_plugin_actions(GtkWidget *menu, PurplePlugin *plugin, | |
487 gpointer context) | |
488 { | |
489 GtkWidget *menuitem; | |
490 PurplePluginAction *action = NULL; | |
491 GList *actions, *l; | |
492 | |
493 actions = PURPLE_PLUGIN_ACTIONS(plugin, context); | |
494 | |
495 for (l = actions; l != NULL; l = l->next) | |
496 { | |
497 if (l->data) | |
498 { | |
499 action = (PurplePluginAction *) l->data; | |
500 action->plugin = plugin; | |
501 action->context = context; | |
502 | |
503 menuitem = gtk_menu_item_new_with_label(action->label); | |
504 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); | |
505 | |
506 g_signal_connect(G_OBJECT(menuitem), "activate", | |
507 G_CALLBACK(plugin_act), action); | |
508 g_object_set_data_full(G_OBJECT(menuitem), "plugin_action", | |
509 action, | |
510 (GDestroyNotify)purple_plugin_action_free); | |
511 gtk_widget_show(menuitem); | |
512 } | |
513 else | |
514 pidgin_separator(menu); | |
515 } | |
516 | |
517 g_list_free(actions); | |
518 } | |
519 | |
520 | |
521 static void | |
522 docklet_plugin_actions(GtkWidget *menu) | |
523 { | |
524 GtkWidget *menuitem, *submenu; | |
525 PurplePlugin *plugin = NULL; | |
526 GList *l; | |
527 int c = 0; | |
528 | |
529 g_return_if_fail(menu != NULL); | |
530 | |
531 /* Add a submenu for each plugin with custom actions */ | |
532 for (l = purple_plugins_get_loaded(); l; l = l->next) { | |
533 plugin = (PurplePlugin *) l->data; | |
534 | |
535 if (PURPLE_IS_PROTOCOL_PLUGIN(plugin)) | |
536 continue; | |
537 | |
538 if (!PURPLE_PLUGIN_HAS_ACTIONS(plugin)) | |
539 continue; | |
540 | |
541 menuitem = gtk_image_menu_item_new_with_label(_(plugin->info->name)); | |
542 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); | |
543 gtk_widget_show(menuitem); | |
544 | |
545 submenu = gtk_menu_new(); | |
546 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), submenu); | |
547 gtk_widget_show(submenu); | |
548 | |
549 build_plugin_actions(submenu, plugin, NULL); | |
550 | |
551 c++; | |
552 } | |
553 if(c>0) | |
554 pidgin_separator(menu); | |
555 } | |
556 | |
476 static void | 557 static void |
477 docklet_menu() { | 558 docklet_menu() { |
478 static GtkWidget *menu = NULL; | 559 static GtkWidget *menu = NULL; |
479 GtkWidget *menuitem; | 560 GtkWidget *menuitem; |
480 | 561 |
536 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem), purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/docklet/blink")); | 617 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem), purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/docklet/blink")); |
537 g_signal_connect(G_OBJECT(menuitem), "toggled", G_CALLBACK(docklet_toggle_blink), NULL); | 618 g_signal_connect(G_OBJECT(menuitem), "toggled", G_CALLBACK(docklet_toggle_blink), NULL); |
538 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); | 619 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); |
539 | 620 |
540 pidgin_separator(menu); | 621 pidgin_separator(menu); |
622 | |
623 /* add plugin actions */ | |
624 docklet_plugin_actions(menu); | |
541 | 625 |
542 pidgin_new_item_from_stock(menu, _("Quit"), GTK_STOCK_QUIT, G_CALLBACK(purple_core_quit), NULL, 0, 0, NULL); | 626 pidgin_new_item_from_stock(menu, _("Quit"), GTK_STOCK_QUIT, G_CALLBACK(purple_core_quit), NULL, 0, 0, NULL); |
543 | 627 |
544 #ifdef _WIN32 | 628 #ifdef _WIN32 |
545 g_signal_connect(menu, "leave-notify-event", G_CALLBACK(docklet_menu_leave_enter), NULL); | 629 g_signal_connect(menu, "leave-notify-event", G_CALLBACK(docklet_menu_leave_enter), NULL); |