3 * Copyright 2009 Roy Marples <roy@marples.name>
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
14 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
32 static const char *copyright = "Copyright (c) 2009 Roy Marples";
34 static const char *authors[] = {
35 "Roy Marples <roy@marples.name>",
38 static const char *license =
39 "Licensed under the 2 clause BSD license.\n"
41 "Redistribution and use in source and binary forms, with or without\n"
42 "modification, are permitted provided that the following conditions\n"
44 "1. Redistributions of source code must retain the above copyright\n"
45 " notice, this list of conditions and the following disclaimer.\n"
46 "2. Redistributions in binary form must reproduce the above copyright\n"
47 " notice, this list of conditions and the following disclaimer in the\n"
48 " documentation and/or other materials provided with the distribution.\n"
50 "THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\n"
51 "ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n"
52 "IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n"
53 "ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\n"
54 "FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n"
55 "DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n"
56 "OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n"
57 "HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n"
58 "LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n"
59 "OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n"
62 /* Should be in a header */
63 void notify_close(void);
66 on_quit(_unused GtkMenuItem *item, _unused gpointer data)
72 on_help(_unused GtkMenuItem *item, _unused gpointer data)
77 url_show(GtkAboutDialog *dialog, const char *url)
81 screen = gtk_widget_get_screen(GTK_WIDGET(dialog));
82 gtk_show_uri(screen, url, GDK_CURRENT_TIME, NULL);
86 email_hook(GtkAboutDialog *dialog, const char *url, _unused gpointer p)
90 address = g_strdup_printf("mailto:%s", url);
91 url_show(dialog, address);
96 url_hook(GtkAboutDialog *dialog, const char *url, _unused gpointer p)
98 url_show(dialog, url);
102 on_about(_unused GtkMenuItem *item, _unused gpointer data)
104 gtk_window_set_default_icon_name(GTK_STOCK_NETWORK);
105 gtk_about_dialog_set_email_hook(email_hook, NULL, NULL);
106 gtk_about_dialog_set_url_hook(url_hook, NULL, NULL);
107 gtk_show_about_dialog(NULL,
109 "copyright", copyright,
111 "website-label", "dhcpcd GTK Website",
112 "website", "http://roy.marples.name/projects/dhcpcd",
114 "wrap-license", TRUE,
115 "logo-icon-name", GTK_STOCK_NETWORK,
120 on_activate(_unused GtkStatusIcon *icon, _unused guint button, _unused guint32 atime, _unused gpointer data)
126 on_popup(GtkStatusIcon *icon, guint button, guint32 atime, gpointer data)
129 GtkWidget *item, *image;
133 menu = (GtkMenu *)gtk_menu_new();
135 item = gtk_image_menu_item_new_with_mnemonic("_Quit");
136 image = gtk_image_new_from_icon_name(GTK_STOCK_QUIT,
138 gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item), image);
139 g_signal_connect(G_OBJECT(item), "activate",
140 G_CALLBACK(on_quit), icon);
141 gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
143 item = gtk_separator_menu_item_new();
144 gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
146 item = gtk_image_menu_item_new_with_mnemonic("_Help");
147 image = gtk_image_new_from_icon_name(GTK_STOCK_HELP,
149 gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item), image);
150 g_signal_connect(G_OBJECT(item), "activate",
151 G_CALLBACK(on_help), icon);
152 gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
154 item = gtk_image_menu_item_new_with_mnemonic("_About");
155 image = gtk_image_new_from_icon_name(GTK_STOCK_ABOUT,
157 gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item), image);
158 g_signal_connect(G_OBJECT(item), "activate",
159 G_CALLBACK(on_about), icon);
160 gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
162 gtk_widget_show_all(GTK_WIDGET(menu));
163 gtk_menu_popup(GTK_MENU(menu), NULL, NULL,
164 gtk_status_icon_position_menu, data, button, atime);
166 gtk_menu_shell_select_first(GTK_MENU_SHELL(menu), FALSE);
170 menu_init(GtkStatusIcon *icon)
172 g_signal_connect_object(G_OBJECT(icon), "activate",
173 G_CALLBACK(on_activate), icon, 0);
174 g_signal_connect_object(G_OBJECT(icon), "popup_menu",
175 G_CALLBACK(on_popup), icon, 0);