| 143 |
152 |
| 144 frame = gtk_frame_new(NULL); |
153 frame = gtk_frame_new(NULL); |
| 145 gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_NONE); |
154 gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_NONE); |
| 146 gtk_widget_show(frame); |
155 gtk_widget_show(frame); |
| 147 |
156 |
| 148 hbox = gtk_hbox_new(FALSE, 5); |
157 hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5); |
| 149 gtk_container_add(GTK_CONTAINER(frame), hbox); |
158 gtk_container_add(GTK_CONTAINER(frame), hbox); |
| 150 |
159 |
| 151 label = gtk_label_new(_("Opacity:")); |
160 label = gtk_label_new(_("Opacity:")); |
| 152 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5); |
161 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5); |
| 153 gtk_widget_show(hbox); |
162 gtk_widget_show(hbox); |
| 154 |
163 |
| 155 slider = gtk_hscale_new_with_range(50, 255, 1); |
164 slider = gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL, 50, 255, 1); |
| 156 gtk_range_set_value(GTK_RANGE(slider), imalpha); |
165 gtk_range_set_value(GTK_RANGE(slider), imalpha); |
| 157 gtk_widget_set_usize(GTK_WIDGET(slider), 200, -1); |
|
| 158 |
166 |
| 159 /* On slider val change, update window's transparency level */ |
167 /* On slider val change, update window's transparency level */ |
| 160 g_signal_connect(GTK_OBJECT(slider), "value-changed", |
168 g_signal_connect(G_OBJECT(slider), "value-changed", |
| 161 G_CALLBACK(change_alpha), win); |
169 G_CALLBACK(change_alpha), win); |
| 162 |
170 |
| 163 gtk_box_pack_start(GTK_BOX(hbox), slider, FALSE, TRUE, 5); |
171 gtk_box_pack_start(GTK_BOX(hbox), slider, FALSE, TRUE, 5); |
| 164 |
172 |
| 165 /* Set the initial transparency level */ |
173 /* Set the initial transparency level */ |
| 225 |
234 |
| 226 /* Look up this window to see if it already has a slider */ |
235 /* Look up this window to see if it already has a slider */ |
| 227 if (!find_slidwin(win)) { |
236 if (!find_slidwin(win)) { |
| 228 GtkWidget *slider_box = NULL; |
237 GtkWidget *slider_box = NULL; |
| 229 slider_win *slidwin = NULL; |
238 slider_win *slidwin = NULL; |
| 230 GtkRequisition slidereq; |
|
| 231 gint width, height; |
|
| 232 |
239 |
| 233 /* Get top vbox */ |
240 /* Get top vbox */ |
| 234 for (wl1 = wl = gtk_container_get_children( |
241 for (wl1 = wl = gtk_container_get_children( |
| 235 GTK_CONTAINER(win)); |
242 GTK_CONTAINER(win)); |
| 236 wl != NULL; |
243 wl != NULL; |
| 237 wl = wl->next) { |
244 wl = wl->next) { |
| 238 if (GTK_IS_VBOX(GTK_OBJECT(wl->data))) |
245 if (GTK_IS_BOX(G_OBJECT(wl->data))) |
| 239 vbox = GTK_WIDGET(wl->data); |
246 vbox = GTK_WIDGET(wl->data); |
| 240 else { |
247 else { |
| 241 purple_debug_error(WINTRANS_PLUGIN_ID, |
248 purple_debug_error(WINTRANS_PLUGIN_ID, |
| 242 "no vbox found\n"); |
249 "no vbox found\n"); |
| 243 return; |
250 return; |
| 244 } |
251 } |
| 245 } |
252 } |
| 246 g_list_free(wl1); |
253 g_list_free(wl1); |
| 247 |
254 |
| 248 slider_box = wintrans_slider(win); |
255 slider_box = wintrans_slider(win); |
| 249 /* Figure out how tall the slider wants to be */ |
256 gtk_box_pack_start(GTK_BOX(vbox), slider_box, FALSE, FALSE, 0); |
| 250 gtk_widget_size_request(slider_box, &slidereq); |
257 |
| 251 gtk_window_get_size(GTK_WINDOW(win), &width, &height); |
|
| 252 gtk_box_pack_start(GTK_BOX(vbox), |
|
| 253 slider_box, FALSE, FALSE, 0); |
|
| 254 /* Add window to list, to track that it has a slider */ |
258 /* Add window to list, to track that it has a slider */ |
| 255 slidwin = g_new0(slider_win, 1); |
259 slidwin = g_new0(slider_win, 1); |
| 256 slidwin->win = win; |
260 slidwin->win = win; |
| 257 slidwin->slider = slider_box; |
261 slidwin->slider = slider_box; |
| 258 window_list = g_slist_append(window_list, slidwin); |
262 window_list = g_slist_append(window_list, slidwin); |
| 388 } |
392 } |
| 389 } |
393 } |
| 390 |
394 |
| 391 static void |
395 static void |
| 392 blist_created_cb(PurpleBuddyList *purple_blist, gpointer data) { |
396 blist_created_cb(PurpleBuddyList *purple_blist, gpointer data) { |
| 393 if (blist) { |
397 GtkWidget *window = get_buddy_list_window(); |
| |
398 if (window != NULL) { |
| 394 if (purple_prefs_get_bool(OPT_WINTRANS_BL_ENABLED)) { |
399 if (purple_prefs_get_bool(OPT_WINTRANS_BL_ENABLED)) { |
| 395 set_wintrans(blist, |
400 set_wintrans(window, |
| 396 purple_prefs_get_int(OPT_WINTRANS_BL_ALPHA), |
401 purple_prefs_get_int(OPT_WINTRANS_BL_ALPHA), |
| 397 TRUE, |
402 TRUE, |
| 398 purple_prefs_get_bool(OPT_WINTRANS_BL_ONTOP)); |
403 purple_prefs_get_bool(OPT_WINTRANS_BL_ONTOP)); |
| 399 } |
404 } |
| 400 |
405 |
| 401 g_signal_connect(G_OBJECT(blist), "focus_in_event", |
406 g_signal_connect(G_OBJECT(window), "focus_in_event", |
| 402 G_CALLBACK(focus_blist_win_cb), blist); |
407 G_CALLBACK(focus_blist_win_cb), window); |
| 403 g_signal_connect(G_OBJECT(blist), "focus_out_event", |
408 g_signal_connect(G_OBJECT(window), "focus_out_event", |
| 404 G_CALLBACK(focus_blist_win_cb), blist); |
409 G_CALLBACK(focus_blist_win_cb), window); |
| 405 } |
410 } |
| 406 } |
411 } |
| 407 |
412 |
| 408 static void alpha_change(GtkWidget *w, gpointer data) { |
413 static void alpha_change(GtkWidget *w, gpointer data) { |
| 409 GList *wins; |
414 GList *wins; |
| 410 int imalpha = gtk_range_get_value(GTK_RANGE(w)); |
415 int imalpha = gtk_range_get_value(GTK_RANGE(w)); |
| 411 |
416 |
| 412 for (wins = pidgin_conv_windows_get_list(); wins; wins = wins->next) { |
417 for (wins = pidgin_conv_windows_get_list(); wins; wins = wins->next) { |
| 413 PidginWindow *win = wins->data; |
418 PidginConvWindow *win = wins->data; |
| 414 set_wintrans(win->window, imalpha, TRUE, |
419 set_wintrans(win->window, imalpha, TRUE, |
| 415 purple_prefs_get_bool(OPT_WINTRANS_IM_ONTOP)); |
420 purple_prefs_get_bool(OPT_WINTRANS_IM_ONTOP)); |
| 416 } |
421 } |
| 417 } |
422 } |
| 418 |
423 |
| 441 g_signal_connect(G_OBJECT(window), "focus_out_event", |
448 g_signal_connect(G_OBJECT(window), "focus_out_event", |
| 442 G_CALLBACK(focus_conv_win_cb), window); |
449 G_CALLBACK(focus_conv_win_cb), window); |
| 443 } |
450 } |
| 444 } |
451 } |
| 445 |
452 |
| 446 /* |
453 static GtkWidget * |
| 447 * EXPORTED FUNCTIONS |
454 get_config_frame(PurplePlugin *plugin) { |
| 448 */ |
|
| 449 static gboolean plugin_load(PurplePlugin *plugin) { |
|
| 450 |
|
| 451 purple_signal_connect(purple_conversations_get_handle(), |
|
| 452 "conversation-created", plugin, |
|
| 453 PURPLE_CALLBACK(new_conversation_cb), NULL); |
|
| 454 |
|
| 455 /* Set callback to remove window from the list, if the window is destroyed */ |
|
| 456 purple_signal_connect(purple_conversations_get_handle(), |
|
| 457 "deleting-conversation", plugin, |
|
| 458 PURPLE_CALLBACK(conversation_delete_cb), NULL); |
|
| 459 |
|
| 460 purple_signal_connect(pidgin_conversations_get_handle(), |
|
| 461 "conversation-dragging", plugin, |
|
| 462 PURPLE_CALLBACK(set_conv_window_trans), NULL); |
|
| 463 |
|
| 464 purple_signal_connect(purple_conversations_get_handle(), |
|
| 465 "conversation-updated", plugin, |
|
| 466 PURPLE_CALLBACK(conv_updated_cb), NULL); |
|
| 467 |
|
| 468 update_existing_convs(); |
|
| 469 |
|
| 470 if (blist) |
|
| 471 blist_created_cb(NULL, NULL); |
|
| 472 else |
|
| 473 purple_signal_connect(pidgin_blist_get_handle(), |
|
| 474 "gtkblist-created", plugin, |
|
| 475 PURPLE_CALLBACK(blist_created_cb), NULL); |
|
| 476 |
|
| 477 |
|
| 478 return TRUE; |
|
| 479 } |
|
| 480 |
|
| 481 static gboolean plugin_unload(PurplePlugin *plugin) { |
|
| 482 purple_debug_info(WINTRANS_PLUGIN_ID, "Unloading transparency plugin\n"); |
|
| 483 |
|
| 484 remove_convs_wintrans(TRUE); |
|
| 485 |
|
| 486 if (blist) { |
|
| 487 if (purple_prefs_get_bool(OPT_WINTRANS_BL_ENABLED)) |
|
| 488 set_wintrans(blist, 0, FALSE, FALSE); |
|
| 489 |
|
| 490 /* Remove the focus cbs */ |
|
| 491 g_signal_handlers_disconnect_by_func(G_OBJECT(blist), |
|
| 492 G_CALLBACK(focus_blist_win_cb), blist); |
|
| 493 } |
|
| 494 |
|
| 495 return TRUE; |
|
| 496 } |
|
| 497 |
|
| 498 static GtkWidget *get_config_frame(PurplePlugin *plugin) { |
|
| 499 GtkWidget *ret; |
455 GtkWidget *ret; |
| 500 GtkWidget *imtransbox, *bltransbox; |
456 GtkWidget *imtransbox, *bltransbox; |
| 501 GtkWidget *hbox; |
457 GtkWidget *hbox; |
| 502 GtkWidget *label, *slider; |
458 GtkWidget *label, *slider; |
| 503 GtkWidget *button; |
459 GtkWidget *button; |
| 504 GtkWidget *trans_box; |
460 GtkWidget *trans_box; |
| 505 |
461 |
| 506 ret = gtk_vbox_new(FALSE, 18); |
462 ret = gtk_box_new(GTK_ORIENTATION_VERTICAL, 18); |
| 507 gtk_container_set_border_width(GTK_CONTAINER (ret), 12); |
463 gtk_container_set_border_width(GTK_CONTAINER (ret), 12); |
| 508 |
464 |
| 509 /* IM Convo trans options */ |
465 /* IM Convo trans options */ |
| 510 imtransbox = pidgin_make_frame(ret, _("IM Conversation Windows")); |
466 imtransbox = pidgin_make_frame(ret, _("IM Conversation Windows")); |
| 511 button = pidgin_prefs_checkbox(_("_IM window transparency"), |
467 button = pidgin_prefs_checkbox(_("_IM window transparency"), |
| 512 OPT_WINTRANS_IM_ENABLED, imtransbox); |
468 OPT_WINTRANS_IM_ENABLED, imtransbox); |
| 513 g_signal_connect(GTK_OBJECT(button), "clicked", |
469 g_signal_connect(G_OBJECT(button), "clicked", |
| 514 G_CALLBACK(update_convs_wintrans), |
470 G_CALLBACK(update_convs_wintrans), |
| 515 (gpointer) OPT_WINTRANS_IM_ENABLED); |
471 (gpointer) OPT_WINTRANS_IM_ENABLED); |
| 516 |
472 |
| 517 trans_box = gtk_vbox_new(FALSE, 18); |
473 trans_box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 18); |
| 518 gtk_widget_show(trans_box); |
474 gtk_widget_show(trans_box); |
| 519 g_object_bind_property(button, "active", trans_box, "sensitive", |
475 g_object_bind_property(button, "active", trans_box, "sensitive", |
| 520 G_BINDING_SYNC_CREATE); |
476 G_BINDING_SYNC_CREATE); |
| 521 |
477 |
| 522 button = pidgin_prefs_checkbox(_("_Show slider bar in IM window"), |
478 button = pidgin_prefs_checkbox(_("_Show slider bar in IM window"), |
| 523 OPT_WINTRANS_IM_SLIDER, trans_box); |
479 OPT_WINTRANS_IM_SLIDER, trans_box); |
| 524 g_signal_connect(GTK_OBJECT(button), "clicked", |
480 g_signal_connect(G_OBJECT(button), "clicked", |
| 525 G_CALLBACK(update_convs_wintrans), |
481 G_CALLBACK(update_convs_wintrans), |
| 526 (gpointer) OPT_WINTRANS_IM_SLIDER); |
482 (gpointer) OPT_WINTRANS_IM_SLIDER); |
| 527 |
483 |
| 528 button = pidgin_prefs_checkbox( |
484 button = pidgin_prefs_checkbox( |
| 529 _("Remove IM window transparency on focus"), |
485 _("Remove IM window transparency on focus"), |
| 530 OPT_WINTRANS_IM_ONFOCUS, trans_box); |
486 OPT_WINTRANS_IM_ONFOCUS, trans_box); |
| 531 |
487 |
| 532 button = pidgin_prefs_checkbox(_("Always on top"), OPT_WINTRANS_IM_ONTOP, |
488 button = pidgin_prefs_checkbox(_("Always on top"), OPT_WINTRANS_IM_ONTOP, |
| 533 trans_box); |
489 trans_box); |
| 534 g_signal_connect(GTK_OBJECT(button), "clicked", |
490 g_signal_connect(G_OBJECT(button), "clicked", |
| 535 G_CALLBACK(update_convs_wintrans), |
491 G_CALLBACK(update_convs_wintrans), |
| 536 (gpointer) OPT_WINTRANS_IM_ONTOP); |
492 (gpointer) OPT_WINTRANS_IM_ONTOP); |
| 537 |
493 |
| 538 gtk_box_pack_start(GTK_BOX(imtransbox), trans_box, FALSE, FALSE, 5); |
494 gtk_box_pack_start(GTK_BOX(imtransbox), trans_box, FALSE, FALSE, 5); |
| 539 |
495 |
| 540 /* IM transparency slider */ |
496 /* IM transparency slider */ |
| 541 hbox = gtk_hbox_new(FALSE, 5); |
497 hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5); |
| 542 |
498 |
| 543 label = gtk_label_new(_("Opacity:")); |
499 label = gtk_label_new(_("Opacity:")); |
| 544 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5); |
500 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5); |
| 545 |
501 |
| 546 slider = gtk_hscale_new_with_range(50, 255, 1); |
502 slider = gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL, 50, 255, 1); |
| 547 gtk_range_set_value(GTK_RANGE(slider), |
503 gtk_range_set_value(GTK_RANGE(slider), |
| 548 purple_prefs_get_int(OPT_WINTRANS_IM_ALPHA)); |
504 purple_prefs_get_int(OPT_WINTRANS_IM_ALPHA)); |
| 549 gtk_widget_set_usize(GTK_WIDGET(slider), 200, -1); |
505 |
| 550 |
506 g_signal_connect(G_OBJECT(slider), "value-changed", |
| 551 g_signal_connect(GTK_OBJECT(slider), "value-changed", |
|
| 552 G_CALLBACK(alpha_change), NULL); |
507 G_CALLBACK(alpha_change), NULL); |
| 553 g_signal_connect(GTK_OBJECT(slider), "focus-out-event", |
508 g_signal_connect(G_OBJECT(slider), "focus-out-event", |
| 554 G_CALLBACK(alpha_pref_set_int), |
509 G_CALLBACK(alpha_pref_set_int), |
| 555 (gpointer) OPT_WINTRANS_IM_ALPHA); |
510 (gpointer) OPT_WINTRANS_IM_ALPHA); |
| 556 |
511 |
| 557 gtk_box_pack_start(GTK_BOX(hbox), slider, FALSE, TRUE, 5); |
512 gtk_box_pack_start(GTK_BOX(hbox), slider, FALSE, TRUE, 5); |
| 558 |
513 |
| 562 |
517 |
| 563 /* Buddy List trans options */ |
518 /* Buddy List trans options */ |
| 564 bltransbox = pidgin_make_frame (ret, _("Buddy List Window")); |
519 bltransbox = pidgin_make_frame (ret, _("Buddy List Window")); |
| 565 button = pidgin_prefs_checkbox(_("_Buddy List window transparency"), |
520 button = pidgin_prefs_checkbox(_("_Buddy List window transparency"), |
| 566 OPT_WINTRANS_BL_ENABLED, bltransbox); |
521 OPT_WINTRANS_BL_ENABLED, bltransbox); |
| 567 g_signal_connect(GTK_OBJECT(button), "clicked", |
522 g_signal_connect(G_OBJECT(button), "clicked", |
| 568 G_CALLBACK(set_blist_trans), |
523 G_CALLBACK(set_blist_trans), |
| 569 (gpointer) OPT_WINTRANS_BL_ENABLED); |
524 (gpointer) OPT_WINTRANS_BL_ENABLED); |
| 570 |
525 |
| 571 trans_box = gtk_vbox_new(FALSE, 18); |
526 trans_box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 18); |
| 572 gtk_widget_show(trans_box); |
527 gtk_widget_show(trans_box); |
| 573 g_object_bind_property(button, "active", trans_box, "sensitive", |
528 g_object_bind_property(button, "active", trans_box, "sensitive", |
| 574 G_BINDING_SYNC_CREATE); |
529 G_BINDING_SYNC_CREATE); |
| 575 button = pidgin_prefs_checkbox( |
530 button = pidgin_prefs_checkbox( |
| 576 _("Remove Buddy List window transparency on focus"), |
531 _("Remove Buddy List window transparency on focus"), |
| 577 OPT_WINTRANS_BL_ONFOCUS, trans_box); |
532 OPT_WINTRANS_BL_ONFOCUS, trans_box); |
| 578 button = pidgin_prefs_checkbox(_("Always on top"), OPT_WINTRANS_BL_ONTOP, |
533 button = pidgin_prefs_checkbox(_("Always on top"), OPT_WINTRANS_BL_ONTOP, |
| 579 trans_box); |
534 trans_box); |
| 580 g_signal_connect(GTK_OBJECT(button), "clicked", |
535 g_signal_connect(G_OBJECT(button), "clicked", |
| 581 G_CALLBACK(set_blist_trans), |
536 G_CALLBACK(set_blist_trans), |
| 582 (gpointer) OPT_WINTRANS_BL_ONTOP); |
537 (gpointer) OPT_WINTRANS_BL_ONTOP); |
| 583 gtk_box_pack_start(GTK_BOX(bltransbox), trans_box, FALSE, FALSE, 5); |
538 gtk_box_pack_start(GTK_BOX(bltransbox), trans_box, FALSE, FALSE, 5); |
| 584 |
539 |
| 585 /* IM transparency slider */ |
540 /* IM transparency slider */ |
| 586 hbox = gtk_hbox_new(FALSE, 5); |
541 hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5); |
| 587 |
542 |
| 588 label = gtk_label_new(_("Opacity:")); |
543 label = gtk_label_new(_("Opacity:")); |
| 589 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5); |
544 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5); |
| 590 |
545 |
| 591 slider = gtk_hscale_new_with_range(50, 255, 1); |
546 slider = gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL, 50, 255, 1); |
| 592 gtk_range_set_value(GTK_RANGE(slider), |
547 gtk_range_set_value(GTK_RANGE(slider), |
| 593 purple_prefs_get_int(OPT_WINTRANS_BL_ALPHA)); |
548 purple_prefs_get_int(OPT_WINTRANS_BL_ALPHA)); |
| 594 |
549 |
| 595 gtk_widget_set_usize(GTK_WIDGET(slider), 200, -1); |
550 g_signal_connect(G_OBJECT(slider), "value-changed", |
| 596 |
|
| 597 g_signal_connect(GTK_OBJECT(slider), "value-changed", |
|
| 598 G_CALLBACK(bl_alpha_change), NULL); |
551 G_CALLBACK(bl_alpha_change), NULL); |
| 599 g_signal_connect(GTK_OBJECT(slider), "focus-out-event", |
552 g_signal_connect(G_OBJECT(slider), "focus-out-event", |
| 600 G_CALLBACK(alpha_pref_set_int), |
553 G_CALLBACK(alpha_pref_set_int), |
| 601 (gpointer) OPT_WINTRANS_BL_ALPHA); |
554 (gpointer) OPT_WINTRANS_BL_ALPHA); |
| 602 |
555 |
| 603 gtk_box_pack_start(GTK_BOX(hbox), slider, FALSE, TRUE, 5); |
556 gtk_box_pack_start(GTK_BOX(hbox), slider, FALSE, TRUE, 5); |
| 604 |
557 |
| 608 |
561 |
| 609 gtk_widget_show_all(ret); |
562 gtk_widget_show_all(ret); |
| 610 return ret; |
563 return ret; |
| 611 } |
564 } |
| 612 |
565 |
| 613 static PidginPluginUiInfo ui_info = |
566 static GPluginPluginInfo * |
| 614 { |
567 transparency_query(GError **error) { |
| 615 get_config_frame, |
568 const gchar * const authors[] = { |
| 616 0, /* page_num (Reserved) */ |
569 "Pidgin Developers <devel@pidgin.im>", |
| 617 |
570 NULL |
| 618 /* padding */ |
571 }; |
| 619 NULL, |
572 |
| 620 NULL, |
573 return pidgin_plugin_info_new( |
| 621 NULL, |
574 "id", WINTRANS_PLUGIN_ID, |
| 622 NULL |
575 "name", N_("Transparency"), |
| 623 }; |
576 "version", DISPLAY_VERSION, |
| 624 |
577 "category", N_("User interface"), |
| 625 static PurplePluginInfo info = |
578 "summary", N_("Variable Transparency for the buddy list and conversations."), |
| 626 { |
579 "description", N_("This plugin enables variable alpha transparency on conversation windows and the buddy list."), |
| 627 PURPLE_PLUGIN_MAGIC, |
580 "authors", authors, |
| 628 PURPLE_MAJOR_VERSION, |
581 "website", PURPLE_WEBSITE, |
| 629 PURPLE_MINOR_VERSION, |
582 "abi-version", PURPLE_ABI_VERSION, |
| 630 PURPLE_PLUGIN_STANDARD, /**< type */ |
583 "gtk-config-frame-cb", get_config_frame, |
| 631 PIDGIN_PLUGIN_TYPE, /**< ui_requirement */ |
584 NULL |
| 632 0, /**< flags */ |
585 ); |
| 633 NULL, /**< dependencies */ |
586 } |
| 634 PURPLE_PRIORITY_DEFAULT, /**< priority */ |
587 |
| 635 WINTRANS_PLUGIN_ID, /**< id */ |
588 static gboolean |
| 636 N_("Transparency"), /**< name */ |
589 transparency_load(GPluginPlugin *plugin, GError **error) { |
| 637 DISPLAY_VERSION, /**< version */ |
590 GtkWidget *window = NULL; |
| 638 /** summary */ |
591 gpointer conv_handle = NULL; |
| 639 N_("Variable Transparency for the buddy list and conversations."), |
592 |
| 640 /** description */ |
|
| 641 N_("This plugin enables variable alpha transparency on conversation windows and the buddy list."), |
|
| 642 "Herman Bloggs <hermanator12002@yahoo.com>", /**< author */ |
|
| 643 PURPLE_WEBSITE, /**< homepage */ |
|
| 644 plugin_load, /**< load */ |
|
| 645 plugin_unload, /**< unload */ |
|
| 646 NULL, /**< destroy */ |
|
| 647 &ui_info, /**< ui_info */ |
|
| 648 NULL, /**< extra_info */ |
|
| 649 NULL, /**< prefs_info */ |
|
| 650 NULL, /**< actions */ |
|
| 651 |
|
| 652 /* padding */ |
|
| 653 NULL, |
|
| 654 NULL, |
|
| 655 NULL, |
|
| 656 NULL |
|
| 657 }; |
|
| 658 |
|
| 659 static void |
|
| 660 init_plugin(PurplePlugin *plugin) |
|
| 661 { |
|
| 662 purple_prefs_add_none("/plugins/gtk"); |
593 purple_prefs_add_none("/plugins/gtk"); |
| 663 purple_prefs_add_none("/plugins/gtk/transparency"); |
594 purple_prefs_add_none("/plugins/gtk/transparency"); |
| 664 purple_prefs_add_bool(OPT_WINTRANS_IM_ENABLED, FALSE); |
595 purple_prefs_add_bool(OPT_WINTRANS_IM_ENABLED, FALSE); |
| 665 purple_prefs_add_int(OPT_WINTRANS_IM_ALPHA, 255); |
596 purple_prefs_add_int(OPT_WINTRANS_IM_ALPHA, 255); |
| 666 purple_prefs_add_bool(OPT_WINTRANS_IM_SLIDER, FALSE); |
597 purple_prefs_add_bool(OPT_WINTRANS_IM_SLIDER, FALSE); |
| 669 purple_prefs_add_bool(OPT_WINTRANS_BL_ENABLED, FALSE); |
600 purple_prefs_add_bool(OPT_WINTRANS_BL_ENABLED, FALSE); |
| 670 purple_prefs_add_int(OPT_WINTRANS_BL_ALPHA, 255); |
601 purple_prefs_add_int(OPT_WINTRANS_BL_ALPHA, 255); |
| 671 purple_prefs_add_bool(OPT_WINTRANS_BL_ONFOCUS, FALSE); |
602 purple_prefs_add_bool(OPT_WINTRANS_BL_ONFOCUS, FALSE); |
| 672 purple_prefs_add_bool(OPT_WINTRANS_BL_ONTOP, FALSE); |
603 purple_prefs_add_bool(OPT_WINTRANS_BL_ONTOP, FALSE); |
| 673 purple_prefs_rename("/plugins/gtk/win32/wintrans", "/plugins/gtk/transparency"); |
604 purple_prefs_rename("/plugins/gtk/win32/wintrans", "/plugins/gtk/transparency"); |
| 674 } |
605 |
| 675 |
606 conv_handle = purple_conversations_get_handle(); |
| 676 PURPLE_INIT_PLUGIN(wintrans, init_plugin, info) |
607 purple_signal_connect(conv_handle, "conversation-created", plugin, |
| |
608 PURPLE_CALLBACK(new_conversation_cb), NULL); |
| |
609 |
| |
610 /* Set callback to remove window from the list, if the window is destroyed */ |
| |
611 purple_signal_connect(conv_handle, "deleting-conversation", plugin, |
| |
612 PURPLE_CALLBACK(conversation_delete_cb), NULL); |
| |
613 |
| |
614 purple_signal_connect(conv_handle, "conversation-dragging", plugin, |
| |
615 PURPLE_CALLBACK(set_conv_window_trans), NULL); |
| |
616 |
| |
617 purple_signal_connect(conv_handle, "conversation-updated", plugin, |
| |
618 PURPLE_CALLBACK(conv_updated_cb), NULL); |
| |
619 |
| |
620 update_existing_convs(); |
| |
621 |
| |
622 window = get_buddy_list_window(); |
| |
623 if(window != NULL) { |
| |
624 blist_created_cb(NULL, NULL); |
| |
625 } else { |
| |
626 purple_signal_connect(pidgin_blist_get_handle(), |
| |
627 "gtkblist-created", plugin, |
| |
628 PURPLE_CALLBACK(blist_created_cb), NULL); |
| |
629 } |
| |
630 |
| |
631 return TRUE; |
| |
632 } |
| |
633 |
| |
634 static gboolean |
| |
635 transparency_unload(GPluginPlugin *plugin, GError **error) { |
| |
636 GtkWidget *window = NULL; |
| |
637 |
| |
638 purple_debug_info(WINTRANS_PLUGIN_ID, "Unloading transparency plugin\n"); |
| |
639 |
| |
640 remove_convs_wintrans(TRUE); |
| |
641 |
| |
642 window = get_buddy_list_window(); |
| |
643 if (window != NULL) { |
| |
644 if (purple_prefs_get_bool(OPT_WINTRANS_BL_ENABLED)) |
| |
645 set_wintrans(window, 0, FALSE, FALSE); |
| |
646 |
| |
647 /* Remove the focus cbs */ |
| |
648 g_signal_handlers_disconnect_by_func(G_OBJECT(window), |
| |
649 G_CALLBACK(focus_blist_win_cb), window); |
| |
650 } |
| |
651 |
| |
652 return TRUE; |
| |
653 } |
| |
654 |
| |
655 GPLUGIN_NATIVE_PLUGIN_DECLARE(transparency) |
| |
656 |