~ubuntu-branches/ubuntu/utopic/xfdesktop4/utopic

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
}