3
* Copyright (C) 2006 Jörgen Scheibengruber
5
* This program is free software; you can redistribute it and/or
6
* modify it under the terms of the GNU General Public License as
7
* published by the Free Software Foundation; either version 2 of the
8
* License, or (at your option) any later version.
10
* This program is distributed in the hope that it will be useful,
11
* but WITHOUT ANY WARRANTY; without even the implied warranty of
12
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
* GNU General Public License for more details.
15
* You should have received a copy of the GNU General Public License
16
* along with this program; if not, write to the Free Software
17
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
26
static GtkWidget *showwindow_menuitem;
28
static void mute_menuitem_toggled_cb(GtkCheckMenuItem *checkmenuitem, gpointer user_data)
33
static void record_menuitem_activate_cb(GtkMenuItem *menuitem, gpointer user_data)
35
rec_button_clicked_cb(NULL, user_data);
38
static void showwindow_menuitem_toggled_cb(GtkCheckMenuItem *checkmenuitem, gpointer user_data)
40
GtkWidget* app = GTK_WIDGET(user_data);
41
toggle_mainwindow_visibility(app);
44
static void quit_menuitem_activate_cb(GtkMenuItem *menuitem, gpointer user_data)
49
void preset_menuitem_activate_cb(GtkMenuItem *menuitem, gpointer user_data)
52
mom_ps = (int)user_data;
54
g_assert(mom_ps >= 0 && mom_ps < g_list_length(settings.presets));
56
ps = (preset*)g_list_nth_data(settings.presets, mom_ps);
57
gtk_adjustment_set_value(adj, ps->freq * STEPS);
60
void create_tray_menu(GtkWidget *app) {
61
GList *node = settings.presets;
64
tray_menu = gtk_menu_new();
66
for (i = 0; node; i++, node = node->next)
68
preset *ps = (preset*)node->data;
69
GtkWidget *menuitem = gtk_menu_item_new_with_label(ps->title);
71
gtk_menu_shell_insert(GTK_MENU_SHELL(tray_menu), menuitem, i);
72
g_signal_connect(G_OBJECT(menuitem), "activate", (GCallback)preset_menuitem_activate_cb, (gpointer)i);
73
gtk_widget_show(menuitem);
76
gtk_menu_shell_append(GTK_MENU_SHELL(tray_menu), gtk_separator_menu_item_new());
78
mute_menuitem = gtk_check_menu_item_new_with_label(_("Muted"));
79
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(mute_menuitem), mixer_get_volume() == 0);
80
gtk_menu_shell_append(GTK_MENU_SHELL(tray_menu), mute_menuitem);
81
mute_menuitem_toggled_cb_id =
82
g_signal_connect(G_OBJECT(mute_menuitem), "toggled", (GCallback)mute_menuitem_toggled_cb, (gpointer)app);
83
gtk_widget_show(mute_menuitem);
85
GtkWidget *record_menuitem = gtk_image_menu_item_new_from_stock(GTK_STOCK_MEDIA_RECORD, NULL);
86
gtk_menu_shell_append(GTK_MENU_SHELL(tray_menu), record_menuitem);
87
g_signal_connect(G_OBJECT(record_menuitem), "activate", (GCallback)record_menuitem_activate_cb, app);
88
gtk_widget_show(record_menuitem);
90
gtk_menu_shell_append(GTK_MENU_SHELL(tray_menu), gtk_separator_menu_item_new());
92
showwindow_menuitem = gtk_check_menu_item_new_with_label(_("Show Window"));
93
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(showwindow_menuitem), TRUE);
94
/*gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(showwindow_menuitem), GTK_WIDGET_VISIBLE(app));*/
95
gtk_menu_shell_append(GTK_MENU_SHELL(tray_menu), showwindow_menuitem);
96
g_signal_connect(G_OBJECT(showwindow_menuitem), "activate", (GCallback)showwindow_menuitem_toggled_cb, (gpointer)app);
97
gtk_widget_show(showwindow_menuitem);
99
GtkWidget *quit_menuitem = gtk_image_menu_item_new_from_stock(GTK_STOCK_QUIT, NULL);
100
gtk_menu_shell_append(GTK_MENU_SHELL(tray_menu), quit_menuitem);
101
g_signal_connect(G_OBJECT(quit_menuitem), "activate", (GCallback)quit_menuitem_activate_cb, NULL);
102
gtk_widget_show(quit_menuitem);
104
gtk_widget_show_all(tray_menu);
107
static gboolean tray_destroyed_cb(GtkWidget *widget, GdkEvent *event, gpointer data)
109
create_tray_icon(GTK_WIDGET(data));
113
static gboolean tray_clicked_cb(GtkWidget *widget, GdkEventButton *event, gpointer data)
116
switch (event->button)
119
if (event->type != GDK_BUTTON_PRESS)
121
active = gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(showwindow_menuitem));
122
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(showwindow_menuitem), !active);
125
if (event->type != GDK_BUTTON_PRESS)
127
gtk_menu_popup(GTK_MENU(tray_menu), NULL, NULL, NULL, NULL, event->button, event->time);
133
void create_tray_icon(GtkWidget *app)
136
GtkWidget *tray_icon_image;
138
GtkIconTheme *icontheme;
141
tray_icon = GTK_WIDGET(egg_tray_icon_new (PACKAGE));
142
icontheme = gtk_icon_theme_get_default();
143
pixbuf = gtk_icon_theme_load_icon(icontheme, "gnomeradio", 22, 0, NULL);
144
g_return_if_fail(pixbuf);
145
tray_icon_image = gtk_image_new_from_pixbuf(pixbuf);
146
gdk_pixbuf_unref(pixbuf);
148
eventbox = gtk_event_box_new();
149
gtk_container_add(GTK_CONTAINER(eventbox), tray_icon_image);
150
gtk_container_add (GTK_CONTAINER(tray_icon), eventbox);
152
g_signal_connect(G_OBJECT(eventbox), "button-press-event",
153
G_CALLBACK(tray_clicked_cb), (gpointer)app);
154
g_signal_connect(G_OBJECT(tray_icon), "destroy-event",
155
G_CALLBACK(tray_destroyed_cb), (gpointer)app);
156
gtk_widget_show_all(GTK_WIDGET(tray_icon));
158
text = g_strdup_printf(_("Gnomeradio - %.2f MHz"), adj->value/STEPS);
159
gtk_tooltips_set_tip(tooltips, tray_icon, text, NULL);