1
// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
3
* Copyright 2012 Canonical Ltd.
5
* This program is free software: you can redistribute it and/or modify it
6
* under the terms of the GNU Lesser General Public License version 3, as
7
* published by the Free Software Foundation.
9
* This program is distributed in the hope that it will be useful, but
10
* WITHOUT ANY WARRANTY; without even the implied warranties of
11
* MERCHANTABILITY, SATISFACTORY QUALITY or FITNESS FOR A PARTICULAR
12
* PURPOSE. See the applicable version of the GNU Lesser General Public
13
* License for more details.
15
* You should have received a copy of both the GNU Lesser General Public
16
* License version 3 along with this program. If not, see
17
* <http://www.gnu.org/licenses/>
19
* Authored by: Andrea Azzaronea <andrea.azzarone@canonical>
25
#include "bamf-mock-window.h"
27
G_DEFINE_TYPE (BamfMockWindow, bamf_mock_window, BAMF_TYPE_WINDOW);
29
#define BAMF_MOCK_WINDOW_GET_PRIVATE(o) \
30
(G_TYPE_INSTANCE_GET_PRIVATE ((o), BAMF_TYPE_MOCK_WINDOW, BamfMockWindowPrivate))
32
struct _BamfMockWindowPrivate
34
BamfWindow* transient;
35
BamfWindowType window_type;
40
BamfWindowMaximizationType maximized;
45
bamf_mock_window_set_transient (BamfMockWindow *self, BamfWindow* transient)
47
g_return_if_fail (BAMF_IS_MOCK_WINDOW (self));
49
self->priv->transient = transient;
50
g_object_add_weak_pointer (G_OBJECT (self->priv->transient), (gpointer *) &self->priv->transient);
54
bamf_mock_window_set_window_type (BamfMockWindow *self, BamfWindowType window_type)
56
g_return_if_fail (BAMF_IS_MOCK_WINDOW (self));
57
self->priv->window_type = window_type;
61
bamf_mock_window_set_xid (BamfMockWindow *self, guint32 xid)
63
g_return_if_fail (BAMF_IS_MOCK_WINDOW (self));
64
self->priv->xid = xid;
68
bamf_mock_window_set_pid (BamfMockWindow *self, guint32 pid)
70
g_return_if_fail (BAMF_IS_MOCK_WINDOW (self));
71
self->priv->pid = pid;
75
bamf_mock_window_set_monitor (BamfMockWindow *self, gint monitor)
77
g_return_if_fail (BAMF_IS_MOCK_WINDOW (self));
79
if (self->priv->monitor != monitor)
81
gint old_value = self->priv->monitor;
82
self->priv->monitor = monitor;
83
g_signal_emit_by_name (G_OBJECT (self), "monitor-changed", old_value, monitor, NULL);
88
bamf_mock_window_set_utf8_prop (BamfMockWindow *self, const char* prop, const char* value)
90
g_return_if_fail (BAMF_IS_MOCK_WINDOW (self));
92
g_hash_table_insert(self->priv->props, g_strdup(prop), g_strdup(value));
96
bamf_mock_window_set_maximized (BamfMockWindow *self, BamfWindowMaximizationType maximized)
98
g_return_if_fail (BAMF_IS_MOCK_WINDOW (self));
100
if (self->priv->maximized != maximized)
102
BamfWindowMaximizationType old_value = self->priv->maximized;
103
self->priv->maximized = maximized;
104
g_signal_emit_by_name (G_OBJECT (self), "maximized-changed", old_value, maximized, NULL);
108
void bamf_mock_window_set_last_active (BamfMockWindow *self, time_t last_active)
110
g_return_if_fail (BAMF_IS_MOCK_WINDOW (self));
111
self->priv->last_active = last_active;
115
bamf_mock_window_finalize (GObject *object)
117
BamfMockWindow *self = BAMF_MOCK_WINDOW (object);
119
if (self->priv->transient)
121
g_object_remove_weak_pointer(G_OBJECT (self->priv->transient), (gpointer *) &self->priv->transient);
122
self->priv->transient = NULL;
126
if (self->priv->props)
128
g_hash_table_unref (self->priv->props);
129
self->priv->props = NULL;
134
bamf_mock_window_get_transient (BamfWindow *window)
136
g_return_val_if_fail (BAMF_IS_MOCK_WINDOW (window), NULL);
137
BamfMockWindow *self = BAMF_MOCK_WINDOW (window);
138
return self->priv->transient;
141
static BamfWindowType
142
bamf_mock_window_get_window_type (BamfWindow *window)
144
g_return_val_if_fail (BAMF_IS_MOCK_WINDOW (window), BAMF_WINDOW_NORMAL);
145
BamfMockWindow *self = BAMF_MOCK_WINDOW (window);
146
return self->priv->window_type;
150
bamf_mock_window_get_xid (BamfWindow *window)
152
g_return_val_if_fail (BAMF_IS_MOCK_WINDOW (window), 0);
153
BamfMockWindow *self = BAMF_MOCK_WINDOW (window);
154
return self->priv->xid;
158
bamf_mock_window_get_pid (BamfWindow *window)
160
g_return_val_if_fail (BAMF_IS_MOCK_WINDOW (window), 0);
161
BamfMockWindow *self = BAMF_MOCK_WINDOW (window);
162
return self->priv->pid;
166
bamf_mock_window_get_monitor (BamfWindow *window)
168
g_return_val_if_fail (BAMF_IS_MOCK_WINDOW (window), BAMF_WINDOW_NORMAL);
169
BamfMockWindow *self = BAMF_MOCK_WINDOW (window);
170
return self->priv->monitor;
174
bamf_mock_window_get_utf8_prop (BamfWindow *window, const char* prop)
176
g_return_val_if_fail (BAMF_IS_MOCK_WINDOW (window), BAMF_WINDOW_NORMAL);
177
BamfMockWindow *self = BAMF_MOCK_WINDOW (window);
179
if (g_hash_table_lookup(self->priv->props, prop))
180
return g_strdup(g_hash_table_lookup(self->priv->props, prop));
185
static BamfWindowMaximizationType
186
bamf_mock_window_maximized (BamfWindow *window)
188
g_return_val_if_fail (BAMF_IS_MOCK_WINDOW (window), BAMF_WINDOW_FLOATING);
189
BamfMockWindow *self = BAMF_MOCK_WINDOW (window);
190
return self->priv->maximized;
194
bamf_mock_window_last_active (BamfWindow *window)
196
g_return_val_if_fail (BAMF_IS_MOCK_WINDOW (window), 0);
197
BamfMockWindow *self = BAMF_MOCK_WINDOW (window);
198
return self->priv->last_active;
202
bamf_mock_window_class_init (BamfMockWindowClass *klass)
204
GObjectClass *obj_class = G_OBJECT_CLASS (klass);
205
BamfWindowClass *window_class = BAMF_WINDOW_CLASS (klass);
207
obj_class->finalize = bamf_mock_window_finalize;
208
window_class->get_transient = bamf_mock_window_get_transient;
209
window_class->get_window_type = bamf_mock_window_get_window_type;
210
window_class->get_xid = bamf_mock_window_get_xid;
211
window_class->get_pid = bamf_mock_window_get_pid;
212
window_class->get_monitor = bamf_mock_window_get_monitor;
213
window_class->get_utf8_prop = bamf_mock_window_get_utf8_prop;
214
window_class->maximized = bamf_mock_window_maximized;
215
window_class->last_active = bamf_mock_window_last_active;
217
g_type_class_add_private (obj_class, sizeof (BamfMockWindowPrivate));
221
bamf_mock_window_init (BamfMockWindow *self)
223
self->priv = BAMF_MOCK_WINDOW_GET_PRIVATE (self);
225
self->priv->transient = NULL;
226
self->priv->window_type = BAMF_WINDOW_NORMAL;
229
self->priv->monitor = 0;
230
self->priv->props = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free);
231
self->priv->maximized = BAMF_WINDOW_FLOATING;
232
self->priv->last_active = 0;
236
bamf_mock_window_new ()
238
return g_object_new (BAMF_TYPE_MOCK_WINDOW, NULL);