2
* Copyright © 2012 Canonical Limited
4
* This library is free software; you can redistribute it and/or
5
* modify it under the terms of the GNU Lesser General Public
6
* License as published by the Free Software Foundation; either
7
* version 2 of the licence, or (at your option) any later version.
9
* This library is distributed in the hope that it will be useful,
10
* but WITHOUT ANY WARRANTY; without even the implied warranty of
11
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
* Lesser General Public License for more details.
14
* You should have received a copy of the GNU Lesser General Public
15
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
17
* Author: Ted Gould <ted.gould@canonical.com>
24
#include "window-menu.h"
25
#include "indicator-appmenu-marshal.h"
27
#define WINDOW_MENU_GET_PRIVATE(o) \
28
(G_TYPE_INSTANCE_GET_PRIVATE ((o), WINDOW_MENU_TYPE, WindowMenuPrivate))
42
static guint signals[LAST_SIGNAL] = { 0 };
46
static void window_menu_class_init (WindowMenuClass *klass);
47
static void window_menu_init (WindowMenu *self);
48
static void window_menu_dispose (GObject *object);
49
static void window_menu_finalize (GObject *object);
51
G_DEFINE_TYPE (WindowMenu, window_menu, G_TYPE_OBJECT);
54
window_menu_class_init (WindowMenuClass *klass)
56
GObjectClass *object_class = G_OBJECT_CLASS (klass);
58
object_class->dispose = window_menu_dispose;
59
object_class->finalize = window_menu_finalize;
62
signals[ENTRY_ADDED] = g_signal_new(WINDOW_MENU_SIGNAL_ENTRY_ADDED,
63
G_TYPE_FROM_CLASS(klass),
65
G_STRUCT_OFFSET (WindowMenuClass, entry_added),
67
g_cclosure_marshal_VOID__POINTER,
68
G_TYPE_NONE, 1, G_TYPE_POINTER);
69
signals[ENTRY_REMOVED] = g_signal_new(WINDOW_MENU_SIGNAL_ENTRY_REMOVED,
70
G_TYPE_FROM_CLASS(klass),
72
G_STRUCT_OFFSET (WindowMenuClass, entry_removed),
74
g_cclosure_marshal_VOID__POINTER,
75
G_TYPE_NONE, 1, G_TYPE_POINTER);
76
signals[ERROR_STATE] = g_signal_new(WINDOW_MENU_SIGNAL_ERROR_STATE,
77
G_TYPE_FROM_CLASS(klass),
79
G_STRUCT_OFFSET (WindowMenuClass, error_state),
81
g_cclosure_marshal_VOID__BOOLEAN,
82
G_TYPE_NONE, 1, G_TYPE_BOOLEAN, G_TYPE_NONE);
83
signals[STATUS_CHANGED] = g_signal_new(WINDOW_MENU_SIGNAL_STATUS_CHANGED,
84
G_TYPE_FROM_CLASS(klass),
86
G_STRUCT_OFFSET (WindowMenuClass, status_changed),
88
g_cclosure_marshal_VOID__INT,
89
G_TYPE_NONE, 1, G_TYPE_INT, G_TYPE_NONE);
90
signals[SHOW_MENU] = g_signal_new(WINDOW_MENU_SIGNAL_SHOW_MENU,
91
G_TYPE_FROM_CLASS(klass),
93
G_STRUCT_OFFSET (WindowMenuClass, show_menu),
95
_indicator_appmenu_marshal_VOID__POINTER_UINT,
96
G_TYPE_NONE, 2, G_TYPE_POINTER, G_TYPE_UINT, G_TYPE_NONE);
97
signals[A11Y_UPDATE] = g_signal_new(WINDOW_MENU_SIGNAL_A11Y_UPDATE,
98
G_TYPE_FROM_CLASS(klass),
100
G_STRUCT_OFFSET (WindowMenuClass, a11y_update),
102
_indicator_appmenu_marshal_VOID__POINTER,
103
G_TYPE_NONE, 1, G_TYPE_POINTER, G_TYPE_NONE);
109
window_menu_init (WindowMenu *self)
117
window_menu_dispose (GObject *object)
120
G_OBJECT_CLASS (window_menu_parent_class)->dispose (object);
125
window_menu_finalize (GObject *object)
128
G_OBJECT_CLASS (window_menu_parent_class)->finalize (object);
133
/**************************
135
**************************/
137
window_menu_get_entries (WindowMenu * wm)
139
WindowMenuClass * class = WINDOW_MENU_GET_CLASS(wm);
141
if (class->get_entries != NULL) {
142
return class->get_entries(wm);
149
window_menu_get_location (WindowMenu * wm, IndicatorObjectEntry * entry)
151
WindowMenuClass * class = WINDOW_MENU_GET_CLASS(wm);
153
if (class->get_location != NULL) {
154
return class->get_location(wm, entry);
161
window_menu_get_xid (WindowMenu * wm)
163
WindowMenuClass * class = WINDOW_MENU_GET_CLASS(wm);
165
if (class->get_xid != NULL) {
166
return class->get_xid(wm);
173
window_menu_get_error_state (WindowMenu * wm)
175
WindowMenuClass * class = WINDOW_MENU_GET_CLASS(wm);
177
if (class->get_error_state != NULL) {
178
return class->get_error_state(wm);
185
window_menu_get_status (WindowMenu * wm)
187
WindowMenuClass * class = WINDOW_MENU_GET_CLASS(wm);
189
if (class->get_status != NULL) {
190
return class->get_status(wm);
192
return WINDOW_MENU_STATUS_NORMAL;
197
window_menu_entry_restore (WindowMenu * wm, IndicatorObjectEntry * entry)
199
WindowMenuClass * class = WINDOW_MENU_GET_CLASS(wm);
201
if (class->entry_restore != NULL) {
202
return class->entry_restore(wm, entry);
209
window_menu_entry_activate (WindowMenu * wm, IndicatorObjectEntry * entry, guint timestamp)
211
WindowMenuClass * class = WINDOW_MENU_GET_CLASS(wm);
213
if (class->entry_activate != NULL) {
214
return class->entry_activate(wm, entry, timestamp);