~ubuntu-branches/ubuntu/precise/gnomeradio/precise-updates

« back to all changes in this revision

Viewing changes to src/trayicon.c

  • Committer: Bazaar Package Importer
  • Author(s): Francesco Namuri
  • Date: 2008-05-12 00:36:27 UTC
  • mfrom: (2.1.5 intrepid)
  • Revision ID: james.westby@ubuntu.com-20080512003627-m4r405wwqc2e3xgv
Tags: 1.7-6
* debian/changelog: sync with the one from ubuntu.
* debian/patches/prefs.c.patch: fixed. In 1.7-6 I've uploaded a wrong
  version of the patch, now it's the right one that Cesare Tirabassi
  has included in the ubuntu's package. (Closes: #468796, #462891)

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* trayicon.c
 
2
 *
 
3
 * Copyright (C) 2006 Jörgen Scheibengruber
 
4
 *
 
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.
 
9
 *
 
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.
 
14
 *
 
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
 
18
 * USA
 
19
 */
 
20
 
 
21
#include <config.h>
 
22
#include <gnome.h>
 
23
#include "gui.h"
 
24
#include "trayicon.h"
 
25
 
 
26
static GtkWidget *showwindow_menuitem;
 
27
 
 
28
static void mute_menuitem_toggled_cb(GtkCheckMenuItem *checkmenuitem, gpointer user_data)
 
29
{
 
30
        toggle_volume();
 
31
}
 
32
 
 
33
static void record_menuitem_activate_cb(GtkMenuItem *menuitem, gpointer user_data)
 
34
{
 
35
        rec_button_clicked_cb(NULL, user_data);
 
36
}
 
37
 
 
38
static void showwindow_menuitem_toggled_cb(GtkCheckMenuItem *checkmenuitem, gpointer user_data)
 
39
{
 
40
        GtkWidget* app = GTK_WIDGET(user_data);
 
41
        toggle_mainwindow_visibility(app);
 
42
}
 
43
 
 
44
static void quit_menuitem_activate_cb(GtkMenuItem *menuitem, gpointer user_data)
 
45
{
 
46
        exit_gnome_radio();
 
47
}
 
48
 
 
49
void preset_menuitem_activate_cb(GtkMenuItem *menuitem, gpointer user_data)
 
50
{
 
51
        preset* ps;
 
52
        mom_ps = (int)user_data;
 
53
        
 
54
        g_assert(mom_ps >= 0 && mom_ps < g_list_length(settings.presets));
 
55
        
 
56
        ps = (preset*)g_list_nth_data(settings.presets, mom_ps);
 
57
        gtk_adjustment_set_value(adj, ps->freq * STEPS);
 
58
}
 
59
 
 
60
void create_tray_menu(GtkWidget *app) {
 
61
        GList *node = settings.presets;
 
62
        int i;
 
63
        
 
64
        tray_menu = gtk_menu_new();
 
65
 
 
66
        for (i = 0; node; i++, node = node->next)
 
67
        {
 
68
                preset *ps = (preset*)node->data;
 
69
                GtkWidget *menuitem = gtk_menu_item_new_with_label(ps->title); 
 
70
                
 
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);
 
74
        }
 
75
        
 
76
        gtk_menu_shell_append(GTK_MENU_SHELL(tray_menu), gtk_separator_menu_item_new());
 
77
 
 
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);
 
84
 
 
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);
 
89
 
 
90
        gtk_menu_shell_append(GTK_MENU_SHELL(tray_menu), gtk_separator_menu_item_new());
 
91
        
 
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);
 
98
 
 
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);
 
103
 
 
104
        gtk_widget_show_all(tray_menu);
 
105
}
 
106
 
 
107
static gboolean tray_destroyed_cb(GtkWidget *widget, GdkEvent *event, gpointer data)
 
108
{
 
109
        create_tray_icon(GTK_WIDGET(data));
 
110
        return TRUE;
 
111
}
 
112
 
 
113
static gboolean tray_clicked_cb(GtkWidget *widget, GdkEventButton *event, gpointer data)
 
114
{
 
115
        gboolean active;
 
116
        switch (event->button)
 
117
        {
 
118
                case 1:
 
119
                        if (event->type != GDK_BUTTON_PRESS)
 
120
                                break;
 
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);
 
123
                        break;
 
124
                case 3:
 
125
                        if (event->type != GDK_BUTTON_PRESS)
 
126
                                break;
 
127
                        gtk_menu_popup(GTK_MENU(tray_menu), NULL, NULL, NULL, NULL, event->button, event->time);
 
128
                        break;
 
129
        }                       
 
130
        return FALSE;
 
131
}       
 
132
 
 
133
void create_tray_icon(GtkWidget *app)
 
134
{
 
135
        GdkPixbuf *pixbuf;
 
136
        GtkWidget *tray_icon_image;
 
137
        GtkWidget *eventbox;
 
138
        GtkIconTheme *icontheme;
 
139
        char *text;
 
140
        
 
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);
 
147
 
 
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);
 
151
 
 
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));
 
157
        
 
158
        text = g_strdup_printf(_("Gnomeradio - %.2f MHz"), adj->value/STEPS);
 
159
        gtk_tooltips_set_tip(tooltips, tray_icon, text, NULL);
 
160
        g_free(text);
 
161
}