~ubuntu-branches/ubuntu/trusty/gnomeradio/trusty

« back to all changes in this revision

Viewing changes to src/trayicon.c

  • Committer: Package Import Robot
  • Author(s): POJAR GEORGE
  • Date: 2013-09-20 13:31:33 UTC
  • Revision ID: package-import@ubuntu.com-20130920133133-otwactksfjh4bwev
Tags: 1.8-2ubuntu23
* Updated debian/patches/gnomeradio-tray_menu.patch:
  - Fixed menu item not update conform new order when we use move up[down]
    swap. (LP: #1232931)
  - Fixed conditional jump or move depends on uninitialized value.
  - Added function to switch to preset in settings preset list when changed
    them from tray menu.
  - Cleaned up the files relating to the tray icon. Neither gui.c, prefs.c nor
    record.c touch the internals of trayicon.c anymore.
* Updated debian/patches/gnomeradio-preferences.patch:
  - Added option to disable audio loopback mode in Preferences settings.
  - Moved in separate GOptionGroup all command line parameters which refers to
    audio loopback mode.
* Updated debian/patches/gnomeradio-device.patch: Not need radio_mute() when
  exit or session die, already is called in radio_stop().
* Updated debian/patches/gnomeradio-station_list.patch: Fixed pointer targets
  in passing argument differ in signedness.
* Removed the content against configure and Makefile.in, since we use
  autoreconf anyways, from:
  - debian/patches/gnomeradio-gstreamer-1.0.patch.
  - debian/patches/gnomeradio-volume_button.patch.
* Updated debian/patches/gnomeradio-volume_button.patch: Removed unused
  vol_down[up].xpm icons.
* debian/gnomeradio.1: Updated man page.   

Show diffs side-by-side

added added

removed removed

Lines of Context:
24
24
#include "gui.h"
25
25
#include "trayicon.h"
26
26
#include "mixer.h"
27
 
 
28
 
extern GtkAdjustment *adj;
29
 
 
30
 
extern int mom_ps;
 
27
#include "prefs.h"
 
28
 
31
29
extern gnomeradio_settings settings;
32
30
 
 
31
GtkWidget *tray_menu;
 
32
GObject *tray_icon;
 
33
GtkWidget *mute_menuitem;
 
34
 
 
35
int mute_menuitem_toggled_cb_id;
 
36
 
33
37
static GtkWidget *showwindow_menuitem;
34
38
 
 
39
void tray_icon_set_title(gchar *title)
 
40
{
 
41
        if (tray_icon)
 
42
                gtk_status_icon_set_tooltip_text(GTK_STATUS_ICON(tray_icon), title);
 
43
}
 
44
 
 
45
void tray_menu_items_set_sensible(gboolean sensible)
 
46
{
 
47
        GList* menuitems;
 
48
        GtkWidget *menuitem;
 
49
        int i, cnt = g_list_length(settings.presets);
 
50
 
 
51
 
 
52
        menuitems = gtk_container_get_children(GTK_CONTAINER(tray_menu));
 
53
 
 
54
        g_assert(cnt + 6 == g_list_length(menuitems));
 
55
 
 
56
        /* Disable the presets */
 
57
        for (i = 0; i < cnt; i++) {
 
58
                menuitem = g_list_nth_data(menuitems, i);
 
59
                gtk_widget_set_sensitive(menuitem, sensible);
 
60
        }
 
61
 
 
62
        /* Disable the mute button (separator => +1) */
 
63
        menuitem = g_list_nth_data(menuitems, cnt + 1);
 
64
        gtk_widget_set_sensitive(menuitem, sensible);
 
65
 
 
66
        /* Disable the record button */
 
67
        menuitem = g_list_nth_data(menuitems, cnt + 2);
 
68
        gtk_widget_set_sensitive(menuitem, sensible);
 
69
 
 
70
        /* Disable the quit button */
 
71
        menuitem = g_list_nth_data(menuitems, cnt + 5);
 
72
        gtk_widget_set_sensitive(menuitem, sensible);
 
73
}
 
74
 
 
75
void tray_menu_enable_mute_button (gboolean enable)
 
76
{
 
77
        if (tray_menu) {
 
78
                g_signal_handler_block(G_OBJECT(mute_menuitem), mute_menuitem_toggled_cb_id);
 
79
                gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(mute_menuitem), enable);
 
80
                g_signal_handler_unblock(G_OBJECT(mute_menuitem), mute_menuitem_toggled_cb_id);
 
81
        }
 
82
}
 
83
 
 
84
void tray_menu_add_preset (preset* ps, gint index)
 
85
{
 
86
        GtkWidget *menuitem;
 
87
 
 
88
        menuitem = gtk_menu_item_new_with_label(ps->title);
 
89
 
 
90
        gtk_menu_shell_insert(GTK_MENU_SHELL(tray_menu), menuitem, index);
 
91
        g_signal_connect(G_OBJECT(menuitem), "activate", (GCallback)preset_menuitem_activate_cb, GINT_TO_POINTER (index));
 
92
        gtk_widget_show(menuitem);
 
93
}
 
94
 
 
95
void tray_menu_remove_preset (gint index)
 
96
{
 
97
        GList* menuitems;
 
98
        GtkWidget *menuitem;
 
99
 
 
100
        menuitems = gtk_container_get_children(GTK_CONTAINER(tray_menu));
 
101
        g_assert(index < g_list_length(menuitems));
 
102
        menuitem = g_list_nth_data(menuitems, index);
 
103
        gtk_widget_destroy(menuitem);
 
104
}
 
105
 
 
106
void tray_menu_move_up_preset (preset* ps, gint index)
 
107
{
 
108
        GList* menuitems;
 
109
        GtkWidget *menuitem;
 
110
 
 
111
        menuitems = gtk_container_get_children(GTK_CONTAINER(tray_menu));
 
112
        g_assert(index < g_list_length(menuitems));
 
113
        menuitem = g_list_nth_data(menuitems, index);
 
114
 
 
115
        gtk_menu_reorder_child (GTK_MENU(tray_menu), menuitem, GPOINTER_TO_INT (index + 1));
 
116
        g_signal_connect(G_OBJECT(menuitem), "activate", (GCallback)preset_menuitem_activate_cb, GINT_TO_POINTER (index + 1));
 
117
 
 
118
        menuitems = gtk_container_get_children(GTK_CONTAINER(tray_menu));
 
119
        menuitem = g_list_nth_data(menuitems, index);
 
120
        g_signal_connect(G_OBJECT(menuitem), "activate", (GCallback)preset_menuitem_activate_cb, GINT_TO_POINTER (index));
 
121
}
 
122
 
 
123
void tray_menu_move_down_preset (preset* ps, gint index)
 
124
{
 
125
        GList* menuitems;
 
126
        GtkWidget *menuitem;
 
127
 
 
128
        menuitems = gtk_container_get_children(GTK_CONTAINER(tray_menu));
 
129
        g_assert(index < g_list_length(menuitems));
 
130
        menuitem = g_list_nth_data(menuitems, index);
 
131
 
 
132
        gtk_menu_reorder_child (GTK_MENU(tray_menu), menuitem, GPOINTER_TO_INT (index - 1));
 
133
        g_signal_connect(G_OBJECT(menuitem), "activate", (GCallback)preset_menuitem_activate_cb, GINT_TO_POINTER (index - 1));
 
134
 
 
135
        menuitems = gtk_container_get_children(GTK_CONTAINER(tray_menu));
 
136
        menuitem = g_list_nth_data(menuitems, index);
 
137
        g_signal_connect(G_OBJECT(menuitem), "activate", (GCallback)preset_menuitem_activate_cb, GINT_TO_POINTER (index));
 
138
}
 
139
 
 
140
void tray_menu_update_preset (preset* ps, gint index)
 
141
{
 
142
        tray_menu_remove_preset (index);
 
143
        tray_menu_add_preset (ps, index);
 
144
}
 
145
 
35
146
static void mute_menuitem_toggled_cb(GtkCheckMenuItem *checkmenuitem, gpointer user_data)
36
147
{
37
148
        toggle_volume();
55
166
 
56
167
void preset_menuitem_activate_cb(GtkMenuItem *menuitem, gpointer user_data)
57
168
{
58
 
        preset* ps;
59
 
        mom_ps = GPOINTER_TO_INT (user_data);
60
 
        
61
 
        g_assert(mom_ps >= 0 && mom_ps < g_list_length(settings.presets));
62
 
        
63
 
        ps = (preset*)g_list_nth_data(settings.presets, mom_ps);
64
 
        gtk_adjustment_set_value(adj, ps->freq * STEPS);
 
169
        gnomeradio_switch_to_preset(GPOINTER_TO_INT (user_data));
 
170
        list_view_switch_to_preset(GPOINTER_TO_INT (user_data));
65
171
}
66
172
 
67
173
void create_tray_menu(GtkWidget *app) {
71
177
        
72
178
        tray_menu = gtk_menu_new();
73
179
 
74
 
        for (i = 0; node; i++, node = node->next)
75
 
        {
 
180
        for (i = 0; node; i++, node = node->next) {
76
181
                preset *ps = (preset*)node->data;
77
182
                menuitem = gtk_menu_item_new_with_label(ps->title);
78
183
                
86
191
        mute_menuitem = gtk_check_menu_item_new_with_label(_("Muted"));
87
192
        gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(mute_menuitem), mixer->get_volume() == 0);
88
193
        gtk_menu_shell_append(GTK_MENU_SHELL(tray_menu), mute_menuitem);
89
 
        mute_menuitem_toggled_cb_id = 
90
 
        g_signal_connect(G_OBJECT(mute_menuitem), "toggled", (GCallback)mute_menuitem_toggled_cb, (gpointer)app);
 
194
        mute_menuitem_toggled_cb_id = g_signal_connect(G_OBJECT(mute_menuitem), "toggled", (GCallback)mute_menuitem_toggled_cb, (gpointer)app);
91
195
        gtk_widget_show(mute_menuitem);
92
196
 
93
197
        menuitem = gtk_menu_item_new_with_mnemonic (_("_Record"));
128
232
{
129
233
        GdkPixbuf *pixbuf;
130
234
        GtkIconTheme *icontheme;
131
 
        char *text;
132
235
        
133
236
        icontheme = gtk_icon_theme_get_default();
134
237
        pixbuf = gtk_icon_theme_load_icon(icontheme, "gnomeradio", 22, 0, NULL);
138
241
 
139
242
        g_signal_connect (G_OBJECT(tray_icon), "activate", G_CALLBACK (tray_activate_cb), (gpointer)app);
140
243
        g_signal_connect (G_OBJECT(tray_icon), "popup-menu", G_CALLBACK (tray_popup_menu), (gpointer)app);
141
 
        
142
 
        text = g_strdup_printf(_("Gnomeradio - %.2f MHz"), gtk_adjustment_get_value(adj)/STEPS);
143
 
        gtk_status_icon_set_tooltip_text(GTK_STATUS_ICON(tray_icon), text);
144
 
        g_free(text);
145
244
}