| 415 saved_status = create_transient_status(primitive, NULL); |
416 saved_status = create_transient_status(primitive, NULL); |
| 416 purple_savedstatus_activate(saved_status); |
417 purple_savedstatus_activate(saved_status); |
| 417 } |
418 } |
| 418 |
419 |
| 419 static void |
420 static void |
| 420 alert_config_cb(GtkWidget *widget, G_GNUC_UNUSED gpointer data) |
421 settings_change_cb(GSettings *settings, char *key, G_GNUC_UNUSED gpointer data) |
| 421 { |
422 { |
| 422 gboolean on = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)); |
423 if(purple_strequal(key, "alert-chat-nick")) { |
| 423 purple_prefs_set_bool("/plugins/gtk/unity/alert_chat_nick", on); |
424 alert_chat_nick = g_settings_get_boolean(settings, key); |
| 424 alert_chat_nick = on; |
425 } else if(purple_strequal(key, "launcher-count")) { |
| 425 } |
426 launcher_count = g_settings_get_enum(settings, key); |
| 426 |
427 if(launcher_count == LAUNCHER_COUNT_DISABLE) { |
| 427 static void |
428 unity_launcher_entry_set_count_visible(launcher, FALSE); |
| 428 launcher_config_cb(GtkWidget *widget, gpointer data) |
429 } else { |
| 429 { |
430 update_launcher(); |
| 430 gint option = GPOINTER_TO_INT(data); |
431 } |
| 431 if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))) |
432 } else if(purple_strequal(key, "messaging-menu-text")) { |
| 432 return; |
433 messaging_menu_text = g_settings_get_enum(settings, key); |
| 433 |
434 refill_messaging_menu(); |
| 434 purple_prefs_set_int("/plugins/gtk/unity/launcher_count", option); |
435 } else { |
| 435 launcher_count = option; |
436 g_warning("Got unity-integration settings change for unknown key: %s", |
| 436 if (option == LAUNCHER_COUNT_DISABLE) |
437 key); |
| 437 unity_launcher_entry_set_count_visible(launcher, FALSE); |
438 } |
| 438 else |
|
| 439 update_launcher(); |
|
| 440 } |
|
| 441 |
|
| 442 static void |
|
| 443 messaging_menu_config_cb(GtkWidget *widget, gpointer data) |
|
| 444 { |
|
| 445 gint option = GPOINTER_TO_INT(data); |
|
| 446 if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))) |
|
| 447 return; |
|
| 448 |
|
| 449 purple_prefs_set_int("/plugins/gtk/unity/messaging_menu_text", option); |
|
| 450 messaging_menu_text = option; |
|
| 451 refill_messaging_menu(); |
|
| 452 } |
439 } |
| 453 |
440 |
| 454 static int |
441 static int |
| 455 attach_signals(PurpleConversation *conv) |
442 attach_signals(PurpleConversation *conv) |
| 456 { |
443 { |
| 487 id = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(conv), "unity-entry-signal")); |
474 id = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(conv), "unity-entry-signal")); |
| 488 g_signal_handler_disconnect(gtkconv->entry, id); |
475 g_signal_handler_disconnect(gtkconv->entry, id); |
| 489 |
476 |
| 490 g_object_set_data(G_OBJECT(conv), "unity-message-count", |
477 g_object_set_data(G_OBJECT(conv), "unity-message-count", |
| 491 GINT_TO_POINTER(0)); |
478 GINT_TO_POINTER(0)); |
| 492 } |
|
| 493 |
|
| 494 static GtkWidget * |
|
| 495 get_config_frame(G_GNUC_UNUSED PurplePlugin *plugin) |
|
| 496 { |
|
| 497 GtkWidget *ret = NULL, *frame = NULL; |
|
| 498 GtkWidget *vbox = NULL, *toggle = NULL, *group = NULL; |
|
| 499 |
|
| 500 ret = gtk_box_new(GTK_ORIENTATION_VERTICAL, 18); |
|
| 501 |
|
| 502 /* Alerts */ |
|
| 503 |
|
| 504 frame = pidgin_make_frame(ret, _("Chatroom alerts")); |
|
| 505 vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 5); |
|
| 506 gtk_box_append(GTK_BOX(frame), vbox); |
|
| 507 |
|
| 508 toggle = gtk_check_button_new_with_mnemonic(_("Chatroom message alerts _only where someone says your username")); |
|
| 509 gtk_box_append(GTK_BOX(vbox), toggle); |
|
| 510 gtk_check_button_set_active(GTK_CHECK_BUTTON(toggle), |
|
| 511 purple_prefs_get_bool("/plugins/gtk/unity/alert_chat_nick")); |
|
| 512 g_signal_connect(G_OBJECT(toggle), "toggled", |
|
| 513 G_CALLBACK(alert_config_cb), NULL); |
|
| 514 |
|
| 515 /* Launcher integration */ |
|
| 516 |
|
| 517 frame = pidgin_make_frame(ret, _("Launcher Icon")); |
|
| 518 vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 5); |
|
| 519 gtk_box_append(GTK_BOX(frame), vbox); |
|
| 520 |
|
| 521 toggle = gtk_check_button_new_with_mnemonic(_("_Disable launcher integration")); |
|
| 522 group = toggle; |
|
| 523 gtk_box_append(GTK_BOX(vbox), toggle); |
|
| 524 gtk_check_button_set_active(GTK_CHECK_BUTTON(toggle), |
|
| 525 purple_prefs_get_int("/plugins/gtk/unity/launcher_count") == LAUNCHER_COUNT_DISABLE); |
|
| 526 g_signal_connect(G_OBJECT(toggle), "toggled", |
|
| 527 G_CALLBACK(launcher_config_cb), GUINT_TO_POINTER(LAUNCHER_COUNT_DISABLE)); |
|
| 528 |
|
| 529 toggle = gtk_check_button_new_with_mnemonic( |
|
| 530 _("Show number of unread _messages on launcher icon")); |
|
| 531 gtk_check_button_set_group(GTK_CHECK_BUTTON(toggle), |
|
| 532 GTK_CHECK_BUTTON(group)); |
|
| 533 gtk_box_append(GTK_BOX(vbox), toggle); |
|
| 534 gtk_check_button_set_active(GTK_CHECK_BUTTON(toggle), |
|
| 535 purple_prefs_get_int("/plugins/gtk/unity/launcher_count") == LAUNCHER_COUNT_MESSAGES); |
|
| 536 g_signal_connect(G_OBJECT(toggle), "toggled", |
|
| 537 G_CALLBACK(launcher_config_cb), GUINT_TO_POINTER(LAUNCHER_COUNT_MESSAGES)); |
|
| 538 |
|
| 539 toggle = gtk_check_button_new_with_mnemonic( |
|
| 540 _("Show number of unread co_nversations on launcher icon")); |
|
| 541 gtk_check_button_set_group(GTK_CHECK_BUTTON(toggle), |
|
| 542 GTK_CHECK_BUTTON(group)); |
|
| 543 gtk_box_append(GTK_BOX(vbox), toggle); |
|
| 544 gtk_check_button_set_active(GTK_CHECK_BUTTON(toggle), |
|
| 545 purple_prefs_get_int("/plugins/gtk/unity/launcher_count") == LAUNCHER_COUNT_SOURCES); |
|
| 546 g_signal_connect(G_OBJECT(toggle), "toggled", |
|
| 547 G_CALLBACK(launcher_config_cb), GUINT_TO_POINTER(LAUNCHER_COUNT_SOURCES)); |
|
| 548 |
|
| 549 /* Messaging menu integration */ |
|
| 550 |
|
| 551 frame = pidgin_make_frame(ret, _("Messaging Menu")); |
|
| 552 vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 5); |
|
| 553 gtk_box_append(GTK_BOX(frame), vbox); |
|
| 554 |
|
| 555 toggle = gtk_check_button_new_with_mnemonic( |
|
| 556 _("Show number of _unread messages for conversations in messaging menu")); |
|
| 557 group = toggle; |
|
| 558 gtk_box_append(GTK_BOX(vbox), toggle); |
|
| 559 gtk_check_button_set_active(GTK_CHECK_BUTTON(toggle), |
|
| 560 purple_prefs_get_int("/plugins/gtk/unity/messaging_menu_text") == MESSAGING_MENU_COUNT); |
|
| 561 g_signal_connect(G_OBJECT(toggle), "toggled", |
|
| 562 G_CALLBACK(messaging_menu_config_cb), GUINT_TO_POINTER(MESSAGING_MENU_COUNT)); |
|
| 563 |
|
| 564 toggle = gtk_check_button_new_with_mnemonic( |
|
| 565 _("Show _elapsed time for unread conversations in messaging menu")); |
|
| 566 gtk_check_button_set_group(GTK_CHECK_BUTTON(toggle), |
|
| 567 GTK_CHECK_BUTTON(group)); |
|
| 568 gtk_box_append(GTK_BOX(vbox), toggle); |
|
| 569 gtk_check_button_set_active(GTK_CHECK_BUTTON(toggle), |
|
| 570 purple_prefs_get_int("/plugins/gtk/unity/messaging_menu_text") == MESSAGING_MENU_TIME); |
|
| 571 g_signal_connect(G_OBJECT(toggle), "toggled", |
|
| 572 G_CALLBACK(messaging_menu_config_cb), GUINT_TO_POINTER(MESSAGING_MENU_TIME)); |
|
| 573 |
|
| 574 return ret; |
|
| 575 } |
479 } |
| 576 |
480 |
| 577 static GPluginPluginInfo * |
481 static GPluginPluginInfo * |
| 578 unity_query(G_GNUC_UNUSED GError **error) |
482 unity_query(G_GNUC_UNUSED GError **error) |
| 579 { |
483 { |
| 591 "description", N_("Provides integration with Unity's " |
495 "description", N_("Provides integration with Unity's " |
| 592 "messaging menu and launcher."), |
496 "messaging menu and launcher."), |
| 593 "authors", authors, |
497 "authors", authors, |
| 594 "website", PURPLE_WEBSITE, |
498 "website", PURPLE_WEBSITE, |
| 595 "abi-version", PURPLE_ABI_VERSION, |
499 "abi-version", PURPLE_ABI_VERSION, |
| 596 "gtk-config-frame-cb", get_config_frame, |
500 "settings-schema", SETTINGS_SCHEMA_ID, |
| 597 NULL |
501 NULL |
| 598 ); |
502 ); |
| 599 } |
503 } |
| 600 |
504 |
| 601 static gboolean |
505 static gboolean |
| 602 unity_load(GPluginPlugin *plugin, G_GNUC_UNUSED GError **error) { |
506 unity_load(GPluginPlugin *plugin, G_GNUC_UNUSED GError **error) { |
| |
507 GSettings *settings = NULL; |
| 603 GList *convs = NULL; |
508 GList *convs = NULL; |
| 604 PurpleConversationManager *manager = NULL; |
509 PurpleConversationManager *manager = NULL; |
| 605 PurpleSavedStatus *saved_status; |
510 PurpleSavedStatus *saved_status; |
| 606 void *conv_handle = purple_conversations_get_handle(); |
511 void *conv_handle = purple_conversations_get_handle(); |
| 607 void *gtk_conv_handle = pidgin_conversations_get_handle(); |
512 void *gtk_conv_handle = pidgin_conversations_get_handle(); |
| 608 void *savedstat_handle = purple_savedstatuses_get_handle(); |
513 void *savedstat_handle = purple_savedstatuses_get_handle(); |
| 609 |
514 |
| 610 purple_prefs_add_none("/plugins/gtk"); |
515 settings = g_settings_new_with_backend(SETTINGS_SCHEMA_ID, |
| 611 purple_prefs_add_none("/plugins/gtk/unity"); |
516 purple_core_get_settings_backend()); |
| 612 purple_prefs_add_int("/plugins/gtk/unity/launcher_count", LAUNCHER_COUNT_SOURCES); |
517 g_signal_connect(settings, "changed", |
| 613 purple_prefs_add_int("/plugins/gtk/unity/messaging_menu_text", MESSAGING_MENU_COUNT); |
518 G_CALLBACK(settings_change_cb), NULL); |
| 614 purple_prefs_add_bool("/plugins/gtk/unity/alert_chat_nick", TRUE); |
519 |
| 615 |
520 alert_chat_nick = g_settings_get_boolean(settings, "alert-chat-nick"); |
| 616 alert_chat_nick = purple_prefs_get_bool("/plugins/gtk/unity/alert_chat_nick"); |
|
| 617 |
521 |
| 618 mmapp = messaging_menu_app_new("pidgin.desktop"); |
522 mmapp = messaging_menu_app_new("pidgin.desktop"); |
| 619 g_object_ref(mmapp); |
523 g_object_ref(mmapp); |
| 620 messaging_menu_app_register(mmapp); |
524 messaging_menu_app_register(mmapp); |
| 621 messaging_menu_text = purple_prefs_get_int("/plugins/gtk/unity/messaging_menu_text"); |
525 messaging_menu_text = g_settings_get_enum(settings, "messaging-menu-text"); |
| 622 |
526 |
| 623 g_signal_connect(mmapp, "activate-source", |
527 g_signal_connect(mmapp, "activate-source", |
| 624 G_CALLBACK(message_source_activated), NULL); |
528 G_CALLBACK(message_source_activated), NULL); |
| 625 g_signal_connect(mmapp, "status-changed", |
529 g_signal_connect(mmapp, "status-changed", |
| 626 G_CALLBACK(messaging_menu_status_changed), NULL); |
530 G_CALLBACK(messaging_menu_status_changed), NULL); |
| 631 purple_signal_connect(savedstat_handle, "savedstatus-changed", plugin, |
535 purple_signal_connect(savedstat_handle, "savedstatus-changed", plugin, |
| 632 G_CALLBACK(status_changed_cb), NULL); |
536 G_CALLBACK(status_changed_cb), NULL); |
| 633 |
537 |
| 634 launcher = unity_launcher_entry_get_for_desktop_id("pidgin.desktop"); |
538 launcher = unity_launcher_entry_get_for_desktop_id("pidgin.desktop"); |
| 635 g_object_ref(launcher); |
539 g_object_ref(launcher); |
| 636 launcher_count = purple_prefs_get_int("/plugins/gtk/unity/launcher_count"); |
540 launcher_count = g_settings_get_enum(settings, "launcher-count"); |
| 637 |
541 |
| 638 purple_signal_connect(gtk_conv_handle, "displayed-im-msg", plugin, |
542 purple_signal_connect(gtk_conv_handle, "displayed-im-msg", plugin, |
| 639 G_CALLBACK(message_displayed_cb), NULL); |
543 G_CALLBACK(message_displayed_cb), NULL); |
| 640 purple_signal_connect(gtk_conv_handle, "displayed-chat-msg", plugin, |
544 purple_signal_connect(gtk_conv_handle, "displayed-chat-msg", plugin, |
| 641 G_CALLBACK(message_displayed_cb), NULL); |
545 G_CALLBACK(message_displayed_cb), NULL); |