Mercurial > audlegacy-plugins
comparison src/statusicon/si_ui.c @ 962:9f0ac3bb82f4 trunk
[svn] - statusicon: added support for quit button in smallmenu; also, the field is being prepared for customizable smallmenu entries
author | giacomo |
---|---|
date | Mon, 16 Apr 2007 01:35:24 -0700 |
parents | c84c20155e00 |
children | 149fc284aa86 |
comparison
equal
deleted
inserted
replaced
961:25bc2010e9f0 | 962:9f0ac3bb82f4 |
---|---|
36 | 36 |
37 | 37 |
38 static void si_ui_statusicon_popup_timer_start ( GtkWidget * ); | 38 static void si_ui_statusicon_popup_timer_start ( GtkWidget * ); |
39 static void si_ui_statusicon_popup_timer_stop ( GtkWidget * ); | 39 static void si_ui_statusicon_popup_timer_stop ( GtkWidget * ); |
40 static void si_ui_statusicon_smallmenu_show ( gint x, gint y, guint button, guint32 time , gpointer ); | 40 static void si_ui_statusicon_smallmenu_show ( gint x, gint y, guint button, guint32 time , gpointer ); |
41 static void si_ui_statusicon_smallmenu_recreate ( GtkWidget * ); | |
41 | 42 |
42 extern si_cfg_t si_cfg; | 43 extern si_cfg_t si_cfg; |
44 static gboolean recreate_smallmenu = FALSE; | |
43 | 45 |
44 | 46 |
45 /* this stuff required to make titlechange hook work properly */ | 47 /* this stuff required to make titlechange hook work properly */ |
46 typedef struct | 48 typedef struct |
47 { | 49 { |
78 | 80 |
79 case 3: | 81 case 3: |
80 { | 82 { |
81 switch ( si_cfg.rclick_menu ) | 83 switch ( si_cfg.rclick_menu ) |
82 { | 84 { |
83 case SI_CFG_RCLICK_MENU_SMALL: | 85 case SI_CFG_RCLICK_MENU_SMALL1: |
86 case SI_CFG_RCLICK_MENU_SMALL2: | |
87 if ( recreate_smallmenu == TRUE ) | |
88 si_ui_statusicon_smallmenu_recreate( evbox ); | |
84 si_ui_statusicon_smallmenu_show( event->x_root , event->y_root , 3 , event->time , evbox ); | 89 si_ui_statusicon_smallmenu_show( event->x_root , event->y_root , 3 , event->time , evbox ); |
85 break; | 90 break; |
86 case SI_CFG_RCLICK_MENU_AUD: | 91 case SI_CFG_RCLICK_MENU_AUD: |
87 default: | 92 default: |
88 audacious_menu_main_show( event->x_root , event->y_root , 3 , event->time ); | 93 audacious_menu_main_show( event->x_root , event->y_root , 3 , event->time ); |
379 si_ui_statusicon_smallmenu_create ( void ) | 384 si_ui_statusicon_smallmenu_create ( void ) |
380 { | 385 { |
381 GtkWidget *si_smenu = gtk_menu_new(); | 386 GtkWidget *si_smenu = gtk_menu_new(); |
382 GtkWidget *si_smenu_prev_item, *si_smenu_play_item, *si_smenu_pause_item; | 387 GtkWidget *si_smenu_prev_item, *si_smenu_play_item, *si_smenu_pause_item; |
383 GtkWidget *si_smenu_stop_item, *si_smenu_next_item, *si_smenu_sep_item, *si_smenu_eject_item; | 388 GtkWidget *si_smenu_stop_item, *si_smenu_next_item, *si_smenu_sep_item, *si_smenu_eject_item; |
384 | 389 GtkWidget *si_smenu_quit_item; |
390 | |
391 si_smenu_eject_item = gtk_image_menu_item_new_from_stock( | |
392 GTK_STOCK_OPEN , NULL ); | |
393 g_signal_connect_swapped( si_smenu_eject_item , "activate" , | |
394 G_CALLBACK(si_audacious_playback_ctrl) , | |
395 GINT_TO_POINTER(SI_AUDACIOUS_PLAYBACK_CTRL_EJECT) ); | |
396 gtk_menu_shell_append( GTK_MENU_SHELL(si_smenu) , si_smenu_eject_item ); | |
397 gtk_widget_show(si_smenu_eject_item); | |
398 si_smenu_sep_item = gtk_separator_menu_item_new(); | |
399 gtk_menu_shell_append( GTK_MENU_SHELL(si_smenu) , si_smenu_sep_item ); | |
400 gtk_widget_show(si_smenu_sep_item); | |
385 si_smenu_prev_item = gtk_image_menu_item_new_from_stock( | 401 si_smenu_prev_item = gtk_image_menu_item_new_from_stock( |
386 GTK_STOCK_MEDIA_PREVIOUS , NULL ); | 402 GTK_STOCK_MEDIA_PREVIOUS , NULL ); |
387 g_signal_connect_swapped( si_smenu_prev_item , "activate" , | 403 g_signal_connect_swapped( si_smenu_prev_item , "activate" , |
388 G_CALLBACK(si_audacious_playback_ctrl) , | 404 G_CALLBACK(si_audacious_playback_ctrl) , |
389 GINT_TO_POINTER(SI_AUDACIOUS_PLAYBACK_CTRL_PREV) ); | 405 GINT_TO_POINTER(SI_AUDACIOUS_PLAYBACK_CTRL_PREV) ); |
415 g_signal_connect_swapped( si_smenu_next_item , "activate" , | 431 g_signal_connect_swapped( si_smenu_next_item , "activate" , |
416 G_CALLBACK(si_audacious_playback_ctrl) , | 432 G_CALLBACK(si_audacious_playback_ctrl) , |
417 GINT_TO_POINTER(SI_AUDACIOUS_PLAYBACK_CTRL_NEXT) ); | 433 GINT_TO_POINTER(SI_AUDACIOUS_PLAYBACK_CTRL_NEXT) ); |
418 gtk_menu_shell_append( GTK_MENU_SHELL(si_smenu) , si_smenu_next_item ); | 434 gtk_menu_shell_append( GTK_MENU_SHELL(si_smenu) , si_smenu_next_item ); |
419 gtk_widget_show(si_smenu_next_item); | 435 gtk_widget_show(si_smenu_next_item); |
420 si_smenu_sep_item = gtk_separator_menu_item_new(); | 436 |
421 gtk_menu_shell_append( GTK_MENU_SHELL(si_smenu) , si_smenu_sep_item ); | 437 if ( si_cfg.rclick_menu == SI_CFG_RCLICK_MENU_SMALL2 ) |
422 gtk_widget_show(si_smenu_sep_item); | 438 { |
423 si_smenu_eject_item = gtk_image_menu_item_new_from_stock( | 439 si_smenu_sep_item = gtk_separator_menu_item_new(); |
424 GTK_STOCK_OPEN , NULL ); | 440 gtk_menu_shell_append( GTK_MENU_SHELL(si_smenu) , si_smenu_sep_item ); |
425 g_signal_connect_swapped( si_smenu_eject_item , "activate" , | 441 gtk_widget_show(si_smenu_sep_item); |
426 G_CALLBACK(si_audacious_playback_ctrl) , | 442 si_smenu_quit_item = gtk_image_menu_item_new_from_stock( |
427 GINT_TO_POINTER(SI_AUDACIOUS_PLAYBACK_CTRL_EJECT) ); | 443 GTK_STOCK_QUIT , NULL ); |
428 gtk_menu_shell_append( GTK_MENU_SHELL(si_smenu) , si_smenu_eject_item ); | 444 g_signal_connect_swapped( si_smenu_quit_item , "activate" , |
429 gtk_widget_show(si_smenu_eject_item); | 445 G_CALLBACK(si_audacious_quit) , NULL ); |
446 gtk_menu_shell_append( GTK_MENU_SHELL(si_smenu) , si_smenu_quit_item ); | |
447 gtk_widget_show(si_smenu_quit_item); | |
448 } | |
430 | 449 |
431 return si_smenu; | 450 return si_smenu; |
451 } | |
452 | |
453 | |
454 static void | |
455 si_ui_statusicon_smallmenu_recreate ( GtkWidget * evbox ) | |
456 { | |
457 GtkWidget *smenu = g_object_get_data( G_OBJECT(evbox) , "smenu" ); | |
458 gtk_widget_destroy( GTK_WIDGET(smenu) ); | |
459 smenu = si_ui_statusicon_smallmenu_create(); | |
460 g_object_set_data( G_OBJECT(evbox) , "smenu" , smenu ); | |
461 recreate_smallmenu = FALSE; | |
462 return; | |
432 } | 463 } |
433 | 464 |
434 | 465 |
435 void | 466 void |
436 si_ui_statusicon_enable ( gboolean enable ) | 467 si_ui_statusicon_enable ( gboolean enable ) |
437 { | 468 { |
438 static GtkWidget *si_evbox = NULL; | 469 static GtkWidget *si_evbox = NULL; |
439 static GtkWidget *si_smenu = NULL; | |
440 static si_hook_tchange_prevs_t *si_hook_tchange_prevs = NULL; | 470 static si_hook_tchange_prevs_t *si_hook_tchange_prevs = NULL; |
441 | 471 |
442 if (( enable == TRUE ) && ( si_evbox == NULL )) | 472 if (( enable == TRUE ) && ( si_evbox == NULL )) |
443 { | 473 { |
444 GtkWidget *si_image; | 474 GtkWidget *si_image; |
445 GtkWidget *si_popup; | 475 GtkWidget *si_popup; |
476 GtkWidget *si_smenu; | |
446 AudGtkTrayIcon *si_applet; | 477 AudGtkTrayIcon *si_applet; |
447 GtkRequisition req; | 478 GtkRequisition req; |
448 GtkAllocation allocation; | 479 GtkAllocation allocation; |
449 | 480 |
450 si_applet = si_ui_statusicon_create(); | 481 si_applet = si_ui_statusicon_create(); |
506 else | 537 else |
507 { | 538 { |
508 if ( si_evbox != NULL ) | 539 if ( si_evbox != NULL ) |
509 { | 540 { |
510 AudGtkTrayIcon *si_applet = g_object_get_data( G_OBJECT(si_evbox) , "applet" ); | 541 AudGtkTrayIcon *si_applet = g_object_get_data( G_OBJECT(si_evbox) , "applet" ); |
542 GtkWidget *si_smenu = g_object_get_data( G_OBJECT(si_evbox) , "smenu" ); | |
511 si_ui_statusicon_popup_timer_stop( si_evbox ); /* just in case the timer is active */ | 543 si_ui_statusicon_popup_timer_stop( si_evbox ); /* just in case the timer is active */ |
512 gtk_widget_destroy( GTK_WIDGET(si_evbox) ); | 544 gtk_widget_destroy( GTK_WIDGET(si_evbox) ); |
513 gtk_widget_destroy( GTK_WIDGET(si_applet) ); | 545 gtk_widget_destroy( GTK_WIDGET(si_applet) ); |
514 gtk_widget_destroy( GTK_WIDGET(si_smenu) ); | 546 gtk_widget_destroy( GTK_WIDGET(si_smenu) ); |
515 hook_dissociate( "playback begin" , si_ui_statusicon_cb_hook_pbstart ); | 547 hook_dissociate( "playback begin" , si_ui_statusicon_cb_hook_pbstart ); |
567 si_cfg.rclick_menu = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(list->data),"val")); | 599 si_cfg.rclick_menu = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(list->data),"val")); |
568 break; | 600 break; |
569 } | 601 } |
570 list = g_slist_next(list); | 602 list = g_slist_next(list); |
571 } | 603 } |
572 | 604 |
573 list = g_object_get_data( G_OBJECT(prefs_win) , "msa_grp" ); | 605 list = g_object_get_data( G_OBJECT(prefs_win) , "msa_grp" ); |
574 while ( list != NULL ) | 606 while ( list != NULL ) |
575 { | 607 { |
576 if ( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(list->data) ) == TRUE ) | 608 if ( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(list->data) ) == TRUE ) |
577 { | 609 { |
578 si_cfg.scroll_action = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(list->data),"val")); | 610 si_cfg.scroll_action = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(list->data),"val")); |
579 break; | 611 break; |
580 } | 612 } |
581 list = g_slist_next(list); | 613 list = g_slist_next(list); |
582 } | 614 } |
583 | 615 |
584 si_cfg_save(); | 616 si_cfg_save(); |
617 | |
618 /* request the recreation of status icon small-menu if necessary */ | |
619 if ( si_cfg.rclick_menu != SI_CFG_RCLICK_MENU_AUD ) | |
620 recreate_smallmenu = TRUE; | |
621 | |
585 gtk_widget_destroy( GTK_WIDGET(prefs_win) ); | 622 gtk_widget_destroy( GTK_WIDGET(prefs_win) ); |
586 } | 623 } |
587 | 624 |
588 | 625 |
589 void | 626 void |
590 si_ui_prefs_show ( void ) | 627 si_ui_prefs_show ( void ) |
591 { | 628 { |
592 static GtkWidget *prefs_win = NULL; | 629 static GtkWidget *prefs_win = NULL; |
593 GtkWidget *prefs_vbox; | 630 GtkWidget *prefs_vbox; |
594 GtkWidget *prefs_rclick_frame, *prefs_rclick_vbox; | 631 GtkWidget *prefs_rclick_frame, *prefs_rclick_vbox; |
595 GtkWidget *prefs_rclick_audmenu_rbt, *prefs_rclick_smallmenu_rbt; | 632 GtkWidget *prefs_rclick_audmenu_rbt, *prefs_rclick_smallmenu1_rbt, *prefs_rclick_smallmenu2_rbt; |
596 GtkWidget *prefs_scroll_frame, *prefs_scroll_vbox; | 633 GtkWidget *prefs_scroll_frame, *prefs_scroll_vbox; |
597 GtkWidget *prefs_scroll_vol_rbt, *prefs_scroll_skip_rbt; | 634 GtkWidget *prefs_scroll_vol_rbt, *prefs_scroll_skip_rbt; |
598 GtkWidget *prefs_bbar_bbox; | 635 GtkWidget *prefs_bbar_bbox; |
599 GtkWidget *prefs_bbar_bt_ok, *prefs_bbar_bt_cancel; | 636 GtkWidget *prefs_bbar_bt_ok, *prefs_bbar_bt_cancel; |
600 GdkGeometry prefs_win_hints; | 637 GdkGeometry prefs_win_hints; |
625 gtk_container_add( GTK_CONTAINER(prefs_rclick_frame) , prefs_rclick_vbox ); | 662 gtk_container_add( GTK_CONTAINER(prefs_rclick_frame) , prefs_rclick_vbox ); |
626 prefs_rclick_audmenu_rbt = gtk_radio_button_new_with_label( NULL , | 663 prefs_rclick_audmenu_rbt = gtk_radio_button_new_with_label( NULL , |
627 _("Audacious standard menu") ); | 664 _("Audacious standard menu") ); |
628 g_object_set_data( G_OBJECT(prefs_rclick_audmenu_rbt) , "val" , | 665 g_object_set_data( G_OBJECT(prefs_rclick_audmenu_rbt) , "val" , |
629 GINT_TO_POINTER(SI_CFG_RCLICK_MENU_AUD) ); | 666 GINT_TO_POINTER(SI_CFG_RCLICK_MENU_AUD) ); |
630 prefs_rclick_smallmenu_rbt = gtk_radio_button_new_with_label_from_widget( | 667 prefs_rclick_smallmenu1_rbt = gtk_radio_button_new_with_label_from_widget( |
631 GTK_RADIO_BUTTON(prefs_rclick_audmenu_rbt) , | 668 GTK_RADIO_BUTTON(prefs_rclick_audmenu_rbt) , |
632 _("Small playback menu") ); | 669 _("Small playback menu #1") ); |
633 g_object_set_data( G_OBJECT(prefs_rclick_smallmenu_rbt) , "val" , | 670 g_object_set_data( G_OBJECT(prefs_rclick_smallmenu1_rbt) , "val" , |
634 GINT_TO_POINTER(SI_CFG_RCLICK_MENU_SMALL) ); | 671 GINT_TO_POINTER(SI_CFG_RCLICK_MENU_SMALL1) ); |
672 prefs_rclick_smallmenu2_rbt = gtk_radio_button_new_with_label_from_widget( | |
673 GTK_RADIO_BUTTON(prefs_rclick_audmenu_rbt) , | |
674 _("Small playback menu #2") ); | |
675 g_object_set_data( G_OBJECT(prefs_rclick_smallmenu2_rbt) , "val" , | |
676 GINT_TO_POINTER(SI_CFG_RCLICK_MENU_SMALL2) ); | |
635 g_object_set_data( G_OBJECT(prefs_win) , "rcm_grp" , | 677 g_object_set_data( G_OBJECT(prefs_win) , "rcm_grp" , |
636 gtk_radio_button_get_group(GTK_RADIO_BUTTON(prefs_rclick_smallmenu_rbt)) ); | 678 gtk_radio_button_get_group(GTK_RADIO_BUTTON(prefs_rclick_smallmenu1_rbt)) ); |
637 if ( si_cfg.rclick_menu == SI_CFG_RCLICK_MENU_AUD ) | 679 switch ( si_cfg.rclick_menu ) |
638 gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(prefs_rclick_audmenu_rbt) , TRUE ); | 680 { |
639 else | 681 case SI_CFG_RCLICK_MENU_SMALL1: |
640 gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(prefs_rclick_smallmenu_rbt) , TRUE ); | 682 gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(prefs_rclick_smallmenu1_rbt) , TRUE ); |
683 break; | |
684 case SI_CFG_RCLICK_MENU_SMALL2: | |
685 gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(prefs_rclick_smallmenu2_rbt) , TRUE ); | |
686 break; | |
687 case SI_CFG_RCLICK_MENU_AUD: | |
688 default: | |
689 gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(prefs_rclick_audmenu_rbt) , TRUE ); | |
690 break; | |
691 } | |
641 gtk_box_pack_start( GTK_BOX(prefs_rclick_vbox) , prefs_rclick_audmenu_rbt , TRUE , TRUE , 0 ); | 692 gtk_box_pack_start( GTK_BOX(prefs_rclick_vbox) , prefs_rclick_audmenu_rbt , TRUE , TRUE , 0 ); |
642 gtk_box_pack_start( GTK_BOX(prefs_rclick_vbox) , prefs_rclick_smallmenu_rbt , TRUE , TRUE , 0 ); | 693 gtk_box_pack_start( GTK_BOX(prefs_rclick_vbox) , prefs_rclick_smallmenu1_rbt , TRUE , TRUE , 0 ); |
694 gtk_box_pack_start( GTK_BOX(prefs_rclick_vbox) , prefs_rclick_smallmenu2_rbt , TRUE , TRUE , 0 ); | |
643 gtk_box_pack_start( GTK_BOX(prefs_vbox) , prefs_rclick_frame , TRUE , TRUE , 0 ); | 695 gtk_box_pack_start( GTK_BOX(prefs_vbox) , prefs_rclick_frame , TRUE , TRUE , 0 ); |
644 | 696 |
645 prefs_scroll_frame = gtk_frame_new( _("Mouse Scroll Action") ); | 697 prefs_scroll_frame = gtk_frame_new( _("Mouse Scroll Action") ); |
646 prefs_scroll_vbox = gtk_vbox_new( TRUE , 0 ); | 698 prefs_scroll_vbox = gtk_vbox_new( TRUE , 0 ); |
647 gtk_container_set_border_width( GTK_CONTAINER(prefs_scroll_vbox) , 6 ); | 699 gtk_container_set_border_width( GTK_CONTAINER(prefs_scroll_vbox) , 6 ); |
648 gtk_container_add( GTK_CONTAINER(prefs_scroll_frame) , prefs_scroll_vbox ); | 700 gtk_container_add( GTK_CONTAINER(prefs_scroll_frame) , prefs_scroll_vbox ); |
649 prefs_scroll_vol_rbt = gtk_radio_button_new_with_label( NULL , | 701 prefs_scroll_vol_rbt = gtk_radio_button_new_with_label( NULL , |