1.1.2
by Jani Monoses
Import upstream version 4.3.0svn+r19850 |
1 |
/*
|
2 |
* xfdesktop - xfce4's desktop manager
|
|
3 |
*
|
|
1.1.26
by Lionel Le Folgoc
Import upstream version 4.5.99.1 |
4 |
* Copyright (c) 2004-2008 Brian J. Tarricone <bjt23@cornell.edu>
|
1
by Simon Huggins
Import upstream version 4.0.5 |
5 |
*
|
6 |
* This program is free software; you can redistribute it and/or modify
|
|
7 |
* it under the terms of the GNU General Public License as published by
|
|
8 |
* the Free Software Foundation; either version 2 of the License, or
|
|
9 |
* (at your option) any later version.
|
|
10 |
*
|
|
11 |
* This program is distributed in the hope that it will be useful,
|
|
12 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
13 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
1.1.2
by Jani Monoses
Import upstream version 4.3.0svn+r19850 |
14 |
* GNU Library General Public License for more details.
|
1
by Simon Huggins
Import upstream version 4.0.5 |
15 |
*
|
16 |
* You should have received a copy of the GNU General Public License
|
|
1.5.6
by Jackson Doak
Import upstream version 4.11.2 |
17 |
* along with this program; if not, write to the Free Software Foundation,
|
18 |
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
|
1.1.2
by Jani Monoses
Import upstream version 4.3.0svn+r19850 |
19 |
*
|
20 |
* Random portions taken from or inspired by the original xfdesktop for xfce4:
|
|
21 |
* Copyright (C) 2002-2003 Jasper Huijsmans (huysmans@users.sourceforge.net)
|
|
22 |
* Copyright (C) 2003 Benedikt Meurer <benedikt.meurer@unix-ag.uni-siegen.de>
|
|
23 |
*/
|
|
1
by Simon Huggins
Import upstream version 4.0.5 |
24 |
|
25 |
#ifdef HAVE_CONFIG_H
|
|
26 |
#include <config.h> |
|
27 |
#endif
|
|
28 |
||
29 |
#ifdef HAVE_STRING_H
|
|
30 |
#include <string.h> |
|
31 |
#endif
|
|
32 |
||
1.1.2
by Jani Monoses
Import upstream version 4.3.0svn+r19850 |
33 |
#include <glib.h> |
1
by Simon Huggins
Import upstream version 4.0.5 |
34 |
#include <gtk/gtk.h> |
35 |
||
1.1.2
by Jani Monoses
Import upstream version 4.3.0svn+r19850 |
36 |
#include <libxfce4util/libxfce4util.h> |
37 |
||
1
by Simon Huggins
Import upstream version 4.0.5 |
38 |
#include "menu.h" |
1.1.2
by Jani Monoses
Import upstream version 4.3.0svn+r19850 |
39 |
#ifdef USE_DESKTOP_MENU
|
1.1.30
by Lionel Le Folgoc
Import upstream version 4.7.4 |
40 |
#include "xfce-desktop-menu.h" |
1.1.2
by Jani Monoses
Import upstream version 4.3.0svn+r19850 |
41 |
#endif
|
42 |
||
43 |
#ifdef USE_DESKTOP_MENU
|
|
1.1.5
by Jani Monoses
Import upstream version 4.3.7svn+r19979 |
44 |
static XfceDesktopMenu *desktop_menu = NULL; |
45 |
static gboolean show_desktop_menu_icons = TRUE; |
|
1.1.2
by Jani Monoses
Import upstream version 4.3.0svn+r19850 |
46 |
#endif
|
47 |
||
48 |
#ifdef USE_DESKTOP_MENU
|
|
49 |
static void |
|
1.1.26
by Lionel Le Folgoc
Import upstream version 4.5.99.1 |
50 |
_stop_menu_module(void) { |
1.1.2
by Jani Monoses
Import upstream version 4.3.0svn+r19850 |
51 |
if(desktop_menu) { |
52 |
xfce_desktop_menu_destroy(desktop_menu); |
|
53 |
desktop_menu = NULL; |
|
54 |
}
|
|
55 |
}
|
|
56 |
||
57 |
static gboolean |
|
1.1.26
by Lionel Le Folgoc
Import upstream version 4.5.99.1 |
58 |
_start_menu_module(void) |
1.1.2
by Jani Monoses
Import upstream version 4.3.0svn+r19850 |
59 |
{
|
1.1.30
by Lionel Le Folgoc
Import upstream version 4.7.4 |
60 |
desktop_menu = xfce_desktop_menu_new(TRUE); |
1.1.2
by Jani Monoses
Import upstream version 4.3.0svn+r19850 |
61 |
if(desktop_menu) { |
1.1.5
by Jani Monoses
Import upstream version 4.3.7svn+r19979 |
62 |
xfce_desktop_menu_set_show_icons(desktop_menu, show_desktop_menu_icons); |
1
by Simon Huggins
Import upstream version 4.0.5 |
63 |
return TRUE; |
1.1.2
by Jani Monoses
Import upstream version 4.3.0svn+r19850 |
64 |
} else { |
65 |
g_warning("%s: Unable to initialise menu module. Right-click menu will be unavailable.\n", PACKAGE); |
|
66 |
return FALSE; |
|
67 |
}
|
|
68 |
}
|
|
69 |
#endif
|
|
70 |
||
1.5.11
by Sean Davis
Import upstream version 4.11.7 |
71 |
#ifdef USE_DESKTOP_MENU
|
1.1.26
by Lionel Le Folgoc
Import upstream version 4.5.99.1 |
72 |
static void |
73 |
menu_populate(XfceDesktop *desktop, |
|
74 |
GtkMenuShell *menu, |
|
75 |
gpointer user_data) |
|
1.1.2
by Jani Monoses
Import upstream version 4.3.0svn+r19850 |
76 |
{
|
1.1.26
by Lionel Le Folgoc
Import upstream version 4.5.99.1 |
77 |
GtkWidget *desktop_menu_widget; |
78 |
GList *menu_children; |
|
79 |
||
80 |
TRACE("ENTERING"); |
|
1.1.2
by Jani Monoses
Import upstream version 4.3.0svn+r19850 |
81 |
|
82 |
if(!desktop_menu) |
|
83 |
return; |
|
84 |
||
1.1.26
by Lionel Le Folgoc
Import upstream version 4.5.99.1 |
85 |
/* check to see if the menu is empty. if not, add the desktop menu
|
86 |
* to a submenu */
|
|
87 |
menu_children = gtk_container_get_children(GTK_CONTAINER(menu)); |
|
88 |
if(menu_children) { |
|
89 |
g_list_free(menu_children); |
|
90 |
||
91 |
desktop_menu_widget = xfce_desktop_menu_get_widget(desktop_menu); |
|
92 |
if(desktop_menu_widget) { |
|
93 |
GtkWidget *mi, *img = NULL; |
|
94 |
GtkIconTheme *itheme = gtk_icon_theme_get_default(); |
|
95 |
||
96 |
mi = gtk_separator_menu_item_new(); |
|
97 |
gtk_widget_show(mi); |
|
98 |
gtk_menu_shell_append(GTK_MENU_SHELL(menu), mi); |
|
99 |
||
1.5.1
by Lionel Le Folgoc
Import upstream version 4.9.2 |
100 |
if(gtk_icon_theme_has_icon(itheme, "applications-other")) { |
101 |
img = gtk_image_new_from_icon_name("applications-other", |
|
1.1.26
by Lionel Le Folgoc
Import upstream version 4.5.99.1 |
102 |
GTK_ICON_SIZE_MENU); |
103 |
gtk_widget_show(img); |
|
104 |
}
|
|
105 |
||
106 |
mi = gtk_image_menu_item_new_with_mnemonic(_("_Applications")); |
|
107 |
gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(mi), img); |
|
108 |
gtk_widget_show(mi); |
|
109 |
gtk_menu_shell_append(GTK_MENU_SHELL(menu), mi); |
|
110 |
||
111 |
gtk_menu_item_set_submenu(GTK_MENU_ITEM(mi), desktop_menu_widget); |
|
112 |
}
|
|
113 |
} else { |
|
114 |
/* just get the menu as a list of toplevel GtkMenuItems instead of
|
|
115 |
* a toplevel menu */
|
|
116 |
xfce_desktop_menu_populate_menu(desktop_menu, GTK_WIDGET(menu)); |
|
117 |
}
|
|
118 |
}
|
|
1.5.11
by Sean Davis
Import upstream version 4.11.7 |
119 |
#endif /* USE_DESKTOP_MENU */ |
1.1.18
by Jani Monoses
Import upstream version 4.3.99.1svn+r23428 |
120 |
|
1.1.26
by Lionel Le Folgoc
Import upstream version 4.5.99.1 |
121 |
#ifdef USE_DESKTOP_MENU
|
122 |
static void |
|
123 |
menu_settings_changed(XfconfChannel *channel, |
|
124 |
const gchar *property, |
|
125 |
const GValue *value, |
|
126 |
gpointer user_data) |
|
127 |
{
|
|
128 |
if(!strcmp(property, "/desktop-menu/show")) { |
|
129 |
if(!G_VALUE_TYPE(value) || g_value_get_boolean(value)) { |
|
130 |
if(!desktop_menu) { |
|
131 |
_start_menu_module(); |
|
132 |
if(desktop_menu && !show_desktop_menu_icons) |
|
133 |
xfce_desktop_menu_set_show_icons(desktop_menu, FALSE); |
|
134 |
}
|
|
135 |
} else { |
|
136 |
if(desktop_menu) |
|
137 |
_stop_menu_module(); |
|
138 |
}
|
|
139 |
} else if(!strcmp(property, "/desktop-menu/show-icons")) { |
|
140 |
show_desktop_menu_icons = G_VALUE_TYPE(value) |
|
141 |
? g_value_get_boolean(value) |
|
142 |
: TRUE; |
|
143 |
if(desktop_menu) { |
|
144 |
xfce_desktop_menu_set_show_icons(desktop_menu, |
|
145 |
show_desktop_menu_icons); |
|
146 |
}
|
|
1.1.2
by Jani Monoses
Import upstream version 4.3.0svn+r19850 |
147 |
}
|
1.1.26
by Lionel Le Folgoc
Import upstream version 4.5.99.1 |
148 |
}
|
1.1.2
by Jani Monoses
Import upstream version 4.3.0svn+r19850 |
149 |
#endif
|
150 |
||
151 |
void
|
|
1.1.26
by Lionel Le Folgoc
Import upstream version 4.5.99.1 |
152 |
menu_init(XfconfChannel *channel) |
1.1.2
by Jani Monoses
Import upstream version 4.3.0svn+r19850 |
153 |
{
|
154 |
#ifdef USE_DESKTOP_MENU
|
|
1.1.26
by Lionel Le Folgoc
Import upstream version 4.5.99.1 |
155 |
if(!channel |
156 |
|| xfconf_channel_get_bool(channel, "/desktop-menu/show", TRUE)) |
|
157 |
{
|
|
158 |
if(channel) { |
|
159 |
show_desktop_menu_icons = xfconf_channel_get_bool(channel, |
|
160 |
"/desktop-menu/show-icons", |
|
161 |
TRUE); |
|
162 |
}
|
|
1.1.2
by Jani Monoses
Import upstream version 4.3.0svn+r19850 |
163 |
_start_menu_module(); |
1.1.26
by Lionel Le Folgoc
Import upstream version 4.5.99.1 |
164 |
} else |
165 |
_stop_menu_module(); |
|
166 |
||
167 |
if(channel) { |
|
168 |
g_signal_connect(G_OBJECT(channel), "property-changed", |
|
169 |
G_CALLBACK(menu_settings_changed), NULL); |
|
170 |
}
|
|
171 |
#endif
|
|
172 |
}
|
|
173 |
||
174 |
void
|
|
175 |
menu_attach(XfceDesktop *desktop) |
|
176 |
{
|
|
1.5.11
by Sean Davis
Import upstream version 4.11.7 |
177 |
#ifdef USE_DESKTOP_MENU
|
1.1.26
by Lionel Le Folgoc
Import upstream version 4.5.99.1 |
178 |
DBG("attached default menu"); |
179 |
g_signal_connect_after(G_OBJECT(desktop), "populate-root-menu", |
|
180 |
G_CALLBACK(menu_populate), NULL); |
|
1.5.11
by Sean Davis
Import upstream version 4.11.7 |
181 |
#endif /* USE_DESKTOP_MENU */ |
1.1.26
by Lionel Le Folgoc
Import upstream version 4.5.99.1 |
182 |
}
|
183 |
||
184 |
void
|
|
185 |
menu_reload(void) |
|
1.1.2
by Jani Monoses
Import upstream version 4.3.0svn+r19850 |
186 |
{
|
187 |
#ifdef USE_DESKTOP_MENU
|
|
188 |
if(desktop_menu) |
|
189 |
xfce_desktop_menu_force_regen(desktop_menu); |
|
190 |
#endif
|
|
191 |
}
|
|
192 |
||
193 |
void
|
|
1.1.26
by Lionel Le Folgoc
Import upstream version 4.5.99.1 |
194 |
menu_cleanup(void) |
1.1.2
by Jani Monoses
Import upstream version 4.3.0svn+r19850 |
195 |
{
|
196 |
#ifdef USE_DESKTOP_MENU
|
|
197 |
_stop_menu_module(); |
|
198 |
#endif
|
|
1
by Simon Huggins
Import upstream version 4.0.5 |
199 |
}
|