File: | cafe-panel/panel-toplevel.c |
Warning: | line 2572, column 2 Value stored to 'orientation' is never read |
Press '?' to see keyboard shortcuts
Keyboard shortcuts:
1 | /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- |
2 | * |
3 | * panel-toplevel.c: The panel's toplevel window object. |
4 | * |
5 | * Copyright (C) 2003 Sun Microsystems, Inc. |
6 | * Copyright (C) 2004 Rob Adams |
7 | * |
8 | * This program is free software; you can redistribute it and/or |
9 | * modify it under the terms of the GNU General Public License as |
10 | * published by the Free Software Foundation; either version 2 of the |
11 | * License, or (at your option) any later version. |
12 | * |
13 | * This program is distributed in the hope that it will be useful, but |
14 | * WITHOUT ANY WARRANTY; without even the implied warranty of |
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
16 | * General Public License for more details. |
17 | * |
18 | * You should have received a copy of the GNU General Public License |
19 | * along with this program; if not, write to the Free Software |
20 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA |
21 | * 02110-1301, USA. |
22 | * |
23 | * Authors: |
24 | * Mark McLoughlin <mark@skynet.ie> |
25 | */ |
26 | |
27 | #include <config.h> |
28 | |
29 | #include "panel-toplevel.h" |
30 | |
31 | #include <stdlib.h> |
32 | #include <string.h> |
33 | |
34 | #include <ctk/ctk.h> |
35 | #include <cdk/cdkkeysyms.h> |
36 | #include <glib/gi18n.h> |
37 | |
38 | #ifdef HAVE_X111 |
39 | #include <cdk/cdkx.h> |
40 | #endif |
41 | |
42 | #include "panel-util.h" |
43 | #include "panel-profile.h" |
44 | #include "panel-frame.h" |
45 | #include "panel-multimonitor.h" |
46 | #include "panel-a11y.h" |
47 | #include "panel-typebuiltins.h" |
48 | #include "panel-marshal.h" |
49 | #include "panel-widget.h" |
50 | #include "panel-bindings.h" |
51 | #include "panel-config-global.h" |
52 | #include "panel-lockdown.h" |
53 | #include "panel-schemas.h" |
54 | |
55 | #ifdef HAVE_X111 |
56 | #include "xstuff.h" |
57 | #include "panel-xutils.h" |
58 | #include "panel-struts.h" |
59 | #endif |
60 | #ifdef HAVE_WAYLAND |
61 | #include "wayland-backend.h" |
62 | #endif |
63 | |
64 | #define DEFAULT_SIZE48 48 |
65 | #define DEFAULT_AUTO_HIDE_SIZE1 1 |
66 | #define DEFAULT_HIDE_DELAY300 300 |
67 | #define DEFAULT_UNHIDE_DELAY100 100 |
68 | #define DEFAULT_DND_THRESHOLD8 8 |
69 | #define MINIMUM_WIDTH100 100 |
70 | #define MAXIMUM_SIZE_SCREEN_RATIO5 5 |
71 | #define SNAP_TOLERANCE_FACTOR6 6 |
72 | #define DEFAULT_ARROW_SIZE20 20 |
73 | #define HANDLE_SIZE10 10 |
74 | #define N_ATTACH_TOPLEVEL_SIGNALS5 5 |
75 | #define N_ATTACH_WIDGET_SIGNALS5 5 |
76 | |
77 | typedef enum { |
78 | PANEL_GRAB_OP_NONE, |
79 | PANEL_GRAB_OP_MOVE, |
80 | PANEL_GRAB_OP_RESIZE, |
81 | PANEL_GRAB_OP_RESIZE_UP, |
82 | PANEL_GRAB_OP_RESIZE_DOWN, |
83 | PANEL_GRAB_OP_RESIZE_LEFT, |
84 | PANEL_GRAB_OP_RESIZE_RIGHT |
85 | } PanelGrabOpType; |
86 | |
87 | struct _PanelToplevelPrivate { |
88 | gchar *settings_path; |
89 | |
90 | gboolean expand; |
91 | PanelOrientation orientation; |
92 | int size; |
93 | gint scale; |
94 | |
95 | /* relative to the monitor origin */ |
96 | int x; |
97 | int y; |
98 | /* relative to the bottom right corner, -1 to ignore and use x, y*/ |
99 | int x_right; |
100 | int y_bottom; |
101 | |
102 | int monitor; |
103 | /* this is used when the configured monitor is missing. We keep it so |
104 | * we can move the toplevel to the right monitor when it becomes |
105 | * available */ |
106 | int configured_monitor; |
107 | |
108 | int hide_delay; |
109 | int unhide_delay; |
110 | int auto_hide_size; |
111 | PanelAnimationSpeed animation_speed; |
112 | |
113 | int snap_tolerance; |
114 | CtkSettings *ctk_settings; |
115 | |
116 | PanelState state; |
117 | |
118 | char *name; |
119 | char *description; |
120 | |
121 | guint hide_timeout; |
122 | guint unhide_timeout; |
123 | |
124 | CdkRectangle geometry; |
125 | PanelFrameEdge edges; |
126 | |
127 | int original_width; |
128 | int original_height; |
129 | |
130 | PanelGrabOpType grab_op; |
131 | |
132 | /* The offset within the panel from which the panel |
133 | * drag was initiated relative to the screen origin. |
134 | */ |
135 | int drag_offset_x; |
136 | int drag_offset_y; |
137 | |
138 | /* Saved state before for cancelled grab op */ |
139 | int orig_monitor; |
140 | int orig_x; |
141 | int orig_y; |
142 | int orig_x_right; |
143 | int orig_y_bottom; |
144 | int orig_size; |
145 | int orig_orientation; |
146 | |
147 | /* relative to the monitor origin */ |
148 | int animation_end_x; |
149 | int animation_end_y; |
150 | int animation_end_width; |
151 | int animation_end_height; |
152 | GDateTime *animation_start_time; |
153 | GDateTime *animation_end_time; |
154 | guint animation_timeout; |
155 | |
156 | PanelWidget *panel_widget; |
157 | PanelFrame *inner_frame; |
158 | CtkWidget *grid; |
159 | CtkWidget *hide_button_top; |
160 | CtkWidget *hide_button_bottom; |
161 | CtkWidget *hide_button_left; |
162 | CtkWidget *hide_button_right; |
163 | |
164 | PanelToplevel *attach_toplevel; |
165 | gulong attach_toplevel_signals [N_ATTACH_TOPLEVEL_SIGNALS5]; |
166 | CtkWidget *attach_widget; |
167 | gulong attach_widget_signals [N_ATTACH_WIDGET_SIGNALS5]; |
168 | gint n_autohide_disablers; |
169 | |
170 | guint auto_hide : 1; |
171 | guint animate : 1; |
172 | guint buttons_enabled : 1; |
173 | guint arrows_enabled : 1; |
174 | |
175 | /* The co-ordinates are relative to center screen */ |
176 | guint x_centered : 1; |
177 | guint y_centered : 1; |
178 | |
179 | /* The panel is not lined up with th screen edge */ |
180 | guint floating : 1; |
181 | |
182 | /* We are currently animating a hide/show */ |
183 | guint animating : 1; |
184 | |
185 | /* This is a keyboard initiated grab operation */ |
186 | guint grab_is_keyboard : 1; |
187 | |
188 | /* The x-y co-ordinates temporarily specify the panel center. |
189 | * This is used when the panel is rotating, because the width/height |
190 | * of the toplevel might change, so we need to compute new values for |
191 | * those. */ |
192 | guint position_centered : 1; |
193 | |
194 | /* The toplevel is "attached" to another widget */ |
195 | guint attached : 1; |
196 | |
197 | /* Hidden temporarily because the attach_toplevel was hidden */ |
198 | guint attach_hidden : 1; |
199 | |
200 | /* More saved grab op state */ |
201 | guint orig_x_centered : 1; |
202 | guint orig_y_centered : 1; |
203 | |
204 | /* flag to see if we have already done geometry updating, |
205 | if not then we're still loading and can ignore many things */ |
206 | guint updated_geometry_initial : 1; |
207 | /* flag to see if we have done the initial animation */ |
208 | guint initial_animation_done : 1; |
209 | }; |
210 | |
211 | enum { |
212 | HIDE_SIGNAL, |
213 | UNHIDE_SIGNAL, |
214 | POPUP_PANEL_MENU_SIGNAL, |
215 | TOGGLE_EXPAND_SIGNAL, |
216 | EXPAND_SIGNAL, |
217 | UNEXPAND_SIGNAL, |
218 | TOGGLE_HIDDEN_SIGNAL, |
219 | BEGIN_MOVE_SIGNAL, |
220 | BEGIN_RESIZE_SIGNAL, |
221 | LAST_SIGNAL |
222 | }; |
223 | |
224 | enum { |
225 | PROP_0, |
226 | PROP_NAME, |
227 | PROP_SETTINGS_PATH, |
228 | PROP_EXPAND, |
229 | PROP_ORIENTATION, |
230 | PROP_SIZE, |
231 | PROP_X, |
232 | PROP_X_RIGHT, |
233 | PROP_X_CENTERED, |
234 | PROP_Y, |
235 | PROP_Y_BOTTOM, |
236 | PROP_Y_CENTERED, |
237 | PROP_MONITOR, |
238 | PROP_AUTOHIDE, |
239 | PROP_HIDE_DELAY, |
240 | PROP_UNHIDE_DELAY, |
241 | PROP_AUTOHIDE_SIZE, |
242 | PROP_ANIMATE, |
243 | PROP_ANIMATION_SPEED, |
244 | PROP_BUTTONS_ENABLED, |
245 | PROP_ARROWS_ENABLED |
246 | }; |
247 | |
248 | G_DEFINE_TYPE_WITH_PRIVATE (PanelToplevel, panel_toplevel, CTK_TYPE_WINDOW)static void panel_toplevel_init (PanelToplevel *self); static void panel_toplevel_class_init (PanelToplevelClass *klass); static GType panel_toplevel_get_type_once (void); static gpointer panel_toplevel_parent_class = ((void*)0); static gint PanelToplevel_private_offset; static void panel_toplevel_class_intern_init (gpointer klass) { panel_toplevel_parent_class = g_type_class_peek_parent (klass); if (PanelToplevel_private_offset != 0) g_type_class_adjust_private_offset (klass, &PanelToplevel_private_offset ); panel_toplevel_class_init ((PanelToplevelClass*) klass); } __attribute__ ((__unused__)) static inline gpointer panel_toplevel_get_instance_private (PanelToplevel *self) { return (((gpointer) ((guint8*) (self ) + (glong) (PanelToplevel_private_offset)))); } GType panel_toplevel_get_type (void) { static GType static_g_define_type_id = 0; if ((__extension__ ({ _Static_assert (sizeof *(&static_g_define_type_id) == sizeof (gpointer), "Expression evaluates to false"); (void) ( 0 ? (gpointer) * (&static_g_define_type_id) : ((void*)0)) ; (!(__extension__ ({ _Static_assert (sizeof *(&static_g_define_type_id ) == sizeof (gpointer), "Expression evaluates to false"); __typeof__ (*(&static_g_define_type_id)) gapg_temp_newval; __typeof__ ((&static_g_define_type_id)) gapg_temp_atomic = (&static_g_define_type_id ); __atomic_load (gapg_temp_atomic, &gapg_temp_newval, 5) ; gapg_temp_newval; })) && g_once_init_enter_pointer ( &static_g_define_type_id)); })) ) { GType g_define_type_id = panel_toplevel_get_type_once (); (__extension__ ({ _Static_assert (sizeof *(&static_g_define_type_id) == sizeof (gpointer) , "Expression evaluates to false"); 0 ? (void) (*(&static_g_define_type_id ) = (g_define_type_id)) : (void) 0; g_once_init_leave_pointer ((&static_g_define_type_id), (gpointer) (guintptr) (g_define_type_id )); })) ; } return static_g_define_type_id; } __attribute__ ( (__noinline__)) static GType panel_toplevel_get_type_once (void ) { GType g_define_type_id = g_type_register_static_simple (( ctk_window_get_type ()), g_intern_static_string ("PanelToplevel" ), sizeof (PanelToplevelClass), (GClassInitFunc)(void (*)(void )) panel_toplevel_class_intern_init, sizeof (PanelToplevel), ( GInstanceInitFunc)(void (*)(void)) panel_toplevel_init, (GTypeFlags ) 0); { {{ PanelToplevel_private_offset = g_type_add_instance_private (g_define_type_id, sizeof (PanelToplevelPrivate)); };} } return g_define_type_id; } |
249 | |
250 | static guint toplevel_signals[LAST_SIGNAL] = {0}; |
251 | static GSList* toplevel_list = NULL((void*)0); |
252 | |
253 | static void panel_toplevel_calculate_animation_end_geometry(PanelToplevel *toplevel); |
254 | |
255 | static void panel_toplevel_update_monitor(PanelToplevel* toplevel); |
256 | static void panel_toplevel_set_monitor_internal(PanelToplevel* toplevel, int monitor, gboolean force_resize); |
257 | |
258 | static void panel_toplevel_drag_threshold_changed (PanelToplevel *toplevel); |
259 | |
260 | static void |
261 | update_style_classes (PanelToplevel *toplevel) |
262 | { |
263 | CtkStyleContext *context; |
264 | |
265 | context = ctk_widget_get_style_context (CTK_WIDGET (toplevel)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), ((ctk_widget_get_type ()))))))); |
266 | |
267 | /*ensure the panel BG can always be themed*/ |
268 | /*Without this ctk3.19/20 cannot set the BG color and resetting the bg to system is not immediately applied*/ |
269 | ctk_style_context_add_class(context,"gnome-panel-menu-bar"); |
270 | ctk_style_context_add_class(context,"cafe-panel-menu-bar"); |
271 | |
272 | ctk_style_context_remove_class (context, CTK_STYLE_CLASS_HORIZONTAL"horizontal"); |
273 | ctk_style_context_remove_class (context, CTK_STYLE_CLASS_VERTICAL"vertical"); |
274 | ctk_style_context_remove_class (context, CTK_STYLE_CLASS_RIGHT"right"); |
275 | ctk_style_context_remove_class (context, CTK_STYLE_CLASS_LEFT"left"); |
276 | ctk_style_context_remove_class (context, CTK_STYLE_CLASS_TOP"top"); |
277 | ctk_style_context_remove_class (context, CTK_STYLE_CLASS_BOTTOM"bottom"); |
278 | |
279 | switch (toplevel->priv->orientation) { |
280 | case PANEL_ORIENTATION_TOP: |
281 | ctk_style_context_add_class (context, CTK_STYLE_CLASS_HORIZONTAL"horizontal"); |
282 | ctk_style_context_add_class (context, CTK_STYLE_CLASS_TOP"top"); |
283 | break; |
284 | |
285 | case PANEL_ORIENTATION_LEFT: |
286 | ctk_style_context_add_class (context, CTK_STYLE_CLASS_VERTICAL"vertical"); |
287 | ctk_style_context_add_class (context, CTK_STYLE_CLASS_LEFT"left"); |
288 | break; |
289 | |
290 | case PANEL_ORIENTATION_BOTTOM: |
291 | ctk_style_context_add_class (context, CTK_STYLE_CLASS_HORIZONTAL"horizontal"); |
292 | ctk_style_context_add_class (context, CTK_STYLE_CLASS_BOTTOM"bottom"); |
293 | break; |
294 | |
295 | case PANEL_ORIENTATION_RIGHT: |
296 | ctk_style_context_add_class (context, CTK_STYLE_CLASS_VERTICAL"vertical"); |
297 | ctk_style_context_add_class (context, CTK_STYLE_CLASS_RIGHT"right"); |
298 | break; |
299 | |
300 | default: |
301 | g_assert_not_reached ()do { g_assertion_message_expr (((gchar*) 0), "panel-toplevel.c" , 301, ((const char*) (__func__)), ((void*)0)); } while (0); |
302 | break; |
303 | } |
304 | } |
305 | |
306 | GSList* panel_toplevel_list_toplevels(void) |
307 | { |
308 | return toplevel_list; |
309 | } |
310 | |
311 | /* Is this the last un-attached toplevel? */ |
312 | gboolean panel_toplevel_is_last_unattached(PanelToplevel* toplevel) |
313 | { |
314 | GSList* l; |
315 | |
316 | if (panel_toplevel_get_is_attached(toplevel)) |
317 | { |
318 | return FALSE(0); |
319 | } |
320 | |
321 | for (l = toplevel_list; l; l = l->next) |
322 | { |
323 | PanelToplevel* t = l->data; |
324 | |
325 | if (t != toplevel && !panel_toplevel_get_is_attached(t)) |
326 | { |
327 | return FALSE(0); |
328 | } |
329 | } |
330 | |
331 | return TRUE(!(0)); |
332 | } |
333 | |
334 | static void panel_toplevel_get_monitor_geometry(PanelToplevel* toplevel, CdkRectangle *geom) |
335 | { |
336 | g_return_if_fail(PANEL_IS_TOPLEVEL(toplevel))do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((toplevel)); GType __t = ((panel_toplevel_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; })))))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char* ) (__func__)), "PANEL_IS_TOPLEVEL(toplevel)"); return; } } while (0); |
337 | g_return_if_fail(geom)do { if ((geom)) { } else { g_return_if_fail_warning (((gchar *) 0), ((const char*) (__func__)), "geom"); return; } } while (0); |
338 | |
339 | geom->x = panel_multimonitor_x(toplevel->priv->monitor); |
340 | geom->y = panel_multimonitor_y(toplevel->priv->monitor); |
341 | geom->width = panel_multimonitor_width(toplevel->priv->monitor); |
342 | geom->height = panel_multimonitor_height(toplevel->priv->monitor); |
343 | } |
344 | |
345 | static CdkCursorType panel_toplevel_grab_op_cursor(PanelToplevel* toplevel, PanelGrabOpType grab_op) |
346 | { |
347 | CdkCursorType retval = -1; |
348 | |
349 | switch (grab_op) { |
350 | case PANEL_GRAB_OP_MOVE: |
351 | case PANEL_GRAB_OP_RESIZE: |
352 | if (toplevel->priv->grab_is_keyboard) |
353 | retval = CDK_CROSS; |
354 | else |
355 | retval = CDK_FLEUR; |
356 | break; |
357 | case PANEL_GRAB_OP_RESIZE_UP: |
358 | retval = CDK_TOP_SIDE; |
359 | break; |
360 | case PANEL_GRAB_OP_RESIZE_DOWN: |
361 | retval = CDK_BOTTOM_SIDE; |
362 | break; |
363 | case PANEL_GRAB_OP_RESIZE_LEFT: |
364 | retval = CDK_LEFT_SIDE; |
365 | break; |
366 | case PANEL_GRAB_OP_RESIZE_RIGHT: |
367 | retval = CDK_RIGHT_SIDE; |
368 | break; |
369 | default: |
370 | g_assert_not_reached ()do { g_assertion_message_expr (((gchar*) 0), "panel-toplevel.c" , 370, ((const char*) (__func__)), ((void*)0)); } while (0); |
371 | break; |
372 | } |
373 | |
374 | return retval; |
375 | } |
376 | |
377 | #ifdef HAVE_X111 |
378 | static void panel_toplevel_init_resize_drag_offsets(PanelToplevel* toplevel, PanelGrabOpType grab_op) |
379 | { |
380 | g_assert (CDK_IS_X11_DISPLAY (ctk_widget_get_display (CTK_WIDGET (toplevel))))do { if ((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((ctk_widget_get_display (((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance*) ((toplevel)), ((ctk_widget_get_type ())))) ))))); GType __t = ((cdk_x11_display_get_type())); gboolean __r ; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; }))))) ; else g_assertion_message_expr (((gchar*) 0), "panel-toplevel.c", 380 , ((const char*) (__func__)), "CDK_IS_X11_DISPLAY (ctk_widget_get_display (CTK_WIDGET (toplevel)))" ); } while (0); |
381 | |
382 | toplevel->priv->drag_offset_x = 0; |
383 | toplevel->priv->drag_offset_y = 0; |
384 | |
385 | switch (grab_op) { |
386 | case PANEL_GRAB_OP_RESIZE_DOWN: |
387 | toplevel->priv->drag_offset_y = toplevel->priv->geometry.y; |
388 | break; |
389 | case PANEL_GRAB_OP_RESIZE_UP: |
390 | toplevel->priv->drag_offset_y = |
391 | toplevel->priv->geometry.y + toplevel->priv->geometry.height; |
392 | break; |
393 | case PANEL_GRAB_OP_RESIZE_RIGHT: |
394 | toplevel->priv->drag_offset_x = toplevel->priv->geometry.x; |
395 | break; |
396 | case PANEL_GRAB_OP_RESIZE_LEFT: |
397 | toplevel->priv->drag_offset_x = |
398 | toplevel->priv->geometry.x + toplevel->priv->geometry.width; |
399 | break; |
400 | default: |
401 | g_assert_not_reached ()do { g_assertion_message_expr (((gchar*) 0), "panel-toplevel.c" , 401, ((const char*) (__func__)), ((void*)0)); } while (0); |
402 | break; |
403 | } |
404 | } |
405 | |
406 | static void panel_toplevel_warp_pointer(PanelToplevel* toplevel) |
407 | { |
408 | CtkWidget *widget; |
409 | CdkRectangle geometry; |
410 | int x, y; |
411 | |
412 | widget = CTK_WIDGET (toplevel)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), ((ctk_widget_get_type ())))))); |
413 | g_return_if_fail (CDK_IS_X11_DISPLAY (ctk_widget_get_display (widget)))do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((ctk_widget_get_display (widget))); GType __t = ((cdk_x11_display_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst-> g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; })))))) { } else { g_return_if_fail_warning (((gchar*) 0 ), ((const char*) (__func__)), "CDK_IS_X11_DISPLAY (ctk_widget_get_display (widget))" ); return; } } while (0); |
414 | |
415 | geometry = toplevel->priv->geometry; |
416 | |
417 | x = y = 0; |
418 | |
419 | switch (toplevel->priv->grab_op) { |
420 | case PANEL_GRAB_OP_MOVE: |
421 | case PANEL_GRAB_OP_RESIZE: |
422 | x = (geometry.width / 2); |
423 | y = (geometry.height / 2); |
424 | break; |
425 | case PANEL_GRAB_OP_RESIZE_UP: |
426 | x = (geometry.width / 2); |
427 | break; |
428 | case PANEL_GRAB_OP_RESIZE_DOWN: |
429 | x = (geometry.width / 2); |
430 | y = geometry.height; |
431 | break; |
432 | case PANEL_GRAB_OP_RESIZE_LEFT: |
433 | y = (geometry.height / 2); |
434 | break; |
435 | case PANEL_GRAB_OP_RESIZE_RIGHT: |
436 | x = geometry.width; |
437 | y = (geometry.height / 2); |
438 | break; |
439 | default: |
440 | g_assert_not_reached ()do { g_assertion_message_expr (((gchar*) 0), "panel-toplevel.c" , 440, ((const char*) (__func__)), ((void*)0)); } while (0); |
441 | break; |
442 | } |
443 | |
444 | if (toplevel->priv->grab_op == PANEL_GRAB_OP_MOVE || |
445 | toplevel->priv->grab_op == PANEL_GRAB_OP_RESIZE) { |
446 | toplevel->priv->drag_offset_x = x; |
447 | toplevel->priv->drag_offset_y = y; |
448 | } else |
449 | panel_toplevel_init_resize_drag_offsets (toplevel, toplevel->priv->grab_op); |
450 | |
451 | panel_warp_pointer (ctk_widget_get_window (widget), x, y); |
452 | } |
453 | #endif // HAVE_X11 |
454 | |
455 | static void panel_toplevel_begin_attached_move(PanelToplevel* toplevel, gboolean is_keyboard, guint32 time_) |
456 | { |
457 | PanelWidget *attached_panel_widget; |
458 | |
459 | attached_panel_widget = panel_toplevel_get_panel_widget (toplevel->priv->attach_toplevel); |
460 | |
461 | panel_widget_applet_drag_start (attached_panel_widget, |
462 | toplevel->priv->attach_widget, |
463 | is_keyboard ? PW_DRAG_OFF_CENTER-2 : PW_DRAG_OFF_CURSOR-1, |
464 | time_); |
465 | } |
466 | |
467 | static void panel_toplevel_begin_grab_op(PanelToplevel* toplevel, PanelGrabOpType op_type, gboolean grab_keyboard, guint32 time_) |
468 | { |
469 | CtkWidget *widget; |
470 | CdkWindow *window; |
471 | CdkCursorType cursor_type; |
472 | CdkCursor *cursor; |
473 | CdkDisplay *display; |
474 | CdkSeat *seat; |
475 | CdkSeatCapabilities capabilities; |
476 | |
477 | if (toplevel->priv->state != PANEL_STATE_NORMAL || |
478 | toplevel->priv->grab_op != PANEL_GRAB_OP_NONE) |
479 | return; |
480 | |
481 | if (panel_lockdown_get_locked_down ()) |
482 | return; |
483 | |
484 | /* If any of the position/orientation are not writable, |
485 | then we can't really move freely */ |
486 | if (op_type == PANEL_GRAB_OP_MOVE && |
487 | ! panel_profile_can_be_moved_freely (toplevel)) |
488 | return; |
489 | |
490 | /* If size is not writable, then we can't resize */ |
491 | if ((op_type == PANEL_GRAB_OP_RESIZE || |
492 | op_type == PANEL_GRAB_OP_RESIZE_UP || |
493 | op_type == PANEL_GRAB_OP_RESIZE_DOWN || |
494 | op_type == PANEL_GRAB_OP_RESIZE_LEFT || |
495 | op_type == PANEL_GRAB_OP_RESIZE_RIGHT) && |
496 | ! panel_profile_key_is_writable (toplevel, PANEL_TOPLEVEL_SIZE_KEY"size")) |
497 | return; |
498 | |
499 | if (toplevel->priv->attached && op_type == PANEL_GRAB_OP_MOVE) { |
500 | panel_toplevel_begin_attached_move (toplevel, grab_keyboard, time_); |
501 | return; |
502 | } |
503 | |
504 | widget = CTK_WIDGET (toplevel)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), ((ctk_widget_get_type ())))))); |
505 | window = ctk_widget_get_window (widget); |
506 | |
507 | toplevel->priv->grab_op = op_type; |
508 | toplevel->priv->grab_is_keyboard = grab_keyboard; |
509 | |
510 | toplevel->priv->orig_monitor = toplevel->priv->monitor; |
511 | toplevel->priv->orig_x = toplevel->priv->x; |
512 | toplevel->priv->orig_x_right = toplevel->priv->x_right; |
513 | toplevel->priv->orig_x_centered = toplevel->priv->x_centered; |
514 | toplevel->priv->orig_y = toplevel->priv->y; |
515 | toplevel->priv->orig_y_bottom = toplevel->priv->y_bottom; |
516 | toplevel->priv->orig_y_centered = toplevel->priv->y_centered; |
517 | toplevel->priv->orig_size = toplevel->priv->size; |
518 | toplevel->priv->orig_orientation = toplevel->priv->orientation; |
519 | |
520 | ctk_grab_add (widget); |
521 | |
522 | #ifdef HAVE_X111 |
523 | if (CDK_IS_X11_DISPLAY (ctk_widget_get_display (widget))(((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) ( (ctk_widget_get_display (widget))); GType __t = ((cdk_x11_display_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst-> g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; })))) && |
524 | toplevel->priv->grab_is_keyboard) { |
525 | panel_toplevel_warp_pointer (toplevel); |
526 | } |
527 | #endif // HAVE_X11 |
528 | |
529 | cursor_type = panel_toplevel_grab_op_cursor ( |
530 | toplevel, toplevel->priv->grab_op); |
531 | |
532 | |
533 | cursor = cdk_cursor_new_for_display (cdk_display_get_default (), |
534 | cursor_type); |
535 | display = cdk_window_get_display (window); |
536 | seat = cdk_display_get_default_seat (display); |
537 | capabilities = CDK_SEAT_CAPABILITY_POINTER; |
538 | if (grab_keyboard) |
539 | capabilities |= CDK_SEAT_CAPABILITY_KEYBOARD; |
540 | |
541 | cdk_seat_grab (seat, window, capabilities, FALSE(0), cursor, |
542 | NULL((void*)0), NULL((void*)0), NULL((void*)0)); |
543 | |
544 | g_object_unref (cursor); |
545 | } |
546 | |
547 | static void panel_toplevel_end_grab_op (PanelToplevel *toplevel, |
548 | guint32 time_ G_GNUC_UNUSED__attribute__ ((__unused__))) |
549 | { |
550 | CtkWidget *widget; |
551 | CdkDisplay *display; |
552 | CdkSeat *seat; |
553 | |
554 | g_return_if_fail (toplevel->priv->grab_op != PANEL_GRAB_OP_NONE)do { if ((toplevel->priv->grab_op != PANEL_GRAB_OP_NONE )) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char*) (__func__)), "toplevel->priv->grab_op != PANEL_GRAB_OP_NONE" ); return; } } while (0); |
555 | |
556 | widget = CTK_WIDGET (toplevel)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), ((ctk_widget_get_type ())))))); |
557 | |
558 | toplevel->priv->grab_op = PANEL_GRAB_OP_NONE; |
559 | toplevel->priv->grab_is_keyboard = FALSE(0); |
560 | |
561 | ctk_grab_remove (widget); |
562 | |
563 | display = ctk_widget_get_display (widget); |
564 | seat = cdk_display_get_default_seat (display); |
565 | |
566 | cdk_seat_ungrab (seat); |
567 | } |
568 | |
569 | static void panel_toplevel_cancel_grab_op (PanelToplevel *toplevel, |
570 | guint32 time_ G_GNUC_UNUSED__attribute__ ((__unused__))) |
571 | { |
572 | panel_toplevel_set_orientation (toplevel, toplevel->priv->orig_orientation); |
573 | panel_toplevel_set_monitor (toplevel, toplevel->priv->orig_monitor); |
574 | panel_toplevel_set_size (toplevel, toplevel->priv->orig_size); |
575 | panel_toplevel_set_x (toplevel, |
576 | toplevel->priv->orig_x, |
577 | toplevel->priv->orig_x_right, |
578 | toplevel->priv->orig_x_centered); |
579 | panel_toplevel_set_y (toplevel, |
580 | toplevel->priv->orig_y, |
581 | toplevel->priv->orig_y_bottom, |
582 | toplevel->priv->orig_y_centered); |
583 | } |
584 | |
585 | static void panel_toplevel_resize_to_pointer(PanelToplevel* toplevel, int x, int y) |
586 | { |
587 | int new_size; |
588 | int new_x, new_y; |
589 | int new_x_right, new_y_bottom; |
590 | int new_x_centered, new_y_centered; |
591 | CdkRectangle monitor_geom; |
592 | |
593 | new_size = toplevel->priv->size; |
594 | new_x = toplevel->priv->x; |
595 | new_y = toplevel->priv->y; |
596 | new_x_right = toplevel->priv->x_right; |
597 | new_y_bottom = toplevel->priv->y_bottom; |
598 | new_x_centered = toplevel->priv->x_centered; |
599 | new_y_centered = toplevel->priv->y_centered; |
600 | |
601 | panel_toplevel_get_monitor_geometry (toplevel, &monitor_geom); |
602 | |
603 | switch (toplevel->priv->grab_op) { |
604 | case PANEL_GRAB_OP_RESIZE_UP: |
605 | new_size = toplevel->priv->drag_offset_y - y; |
606 | new_size = CLAMP (new_size, 0, monitor_geom.height / 4)(((new_size) > (monitor_geom.height / 4)) ? (monitor_geom. height / 4) : (((new_size) < (0)) ? (0) : (new_size))); |
607 | new_y -= (new_size - toplevel->priv->size); |
608 | if (!toplevel->priv->y_centered && (new_y + new_size / 2) > monitor_geom.height / 2) |
609 | new_y_bottom = monitor_geom.height - (new_y + new_size); |
610 | else |
611 | new_y_bottom = -1; |
612 | break; |
613 | case PANEL_GRAB_OP_RESIZE_DOWN: |
614 | new_size = y - toplevel->priv->drag_offset_y; |
615 | new_size = CLAMP (new_size, 0, monitor_geom.height / 4)(((new_size) > (monitor_geom.height / 4)) ? (monitor_geom. height / 4) : (((new_size) < (0)) ? (0) : (new_size))); |
616 | if (!toplevel->priv->y_centered && (new_y + new_size / 2) > monitor_geom.height / 2) |
617 | new_y_bottom = monitor_geom.height - (new_y + new_size); |
618 | else |
619 | new_y_bottom = -1; |
620 | break; |
621 | case PANEL_GRAB_OP_RESIZE_LEFT: |
622 | new_size = toplevel->priv->drag_offset_x - x; |
623 | new_size = CLAMP (new_size, 0, monitor_geom.width / 4)(((new_size) > (monitor_geom.width / 4)) ? (monitor_geom.width / 4) : (((new_size) < (0)) ? (0) : (new_size))); |
624 | new_x -= (new_size - toplevel->priv->size); |
625 | if (!toplevel->priv->x_centered && (new_x + new_size / 2) > monitor_geom.width / 2) |
626 | new_x_right = monitor_geom.width - (new_x + new_size); |
627 | else |
628 | new_x_right = -1; |
629 | break; |
630 | case PANEL_GRAB_OP_RESIZE_RIGHT: |
631 | new_size = x - toplevel->priv->drag_offset_x; |
632 | new_size = CLAMP (new_size, 0, monitor_geom.width / 4)(((new_size) > (monitor_geom.width / 4)) ? (monitor_geom.width / 4) : (((new_size) < (0)) ? (0) : (new_size))); |
633 | if (!toplevel->priv->x_centered && (new_x + new_size / 2) > monitor_geom.width / 2) |
634 | new_x_right = monitor_geom.width - (new_x + new_size); |
635 | else |
636 | new_x_right = -1; |
637 | break; |
638 | default: |
639 | g_assert_not_reached ()do { g_assertion_message_expr (((gchar*) 0), "panel-toplevel.c" , 639, ((const char*) (__func__)), ((void*)0)); } while (0); |
640 | break; |
641 | } |
642 | |
643 | if (new_size == 0) |
644 | return; |
645 | |
646 | panel_toplevel_set_x (toplevel, new_x, new_x_right, new_x_centered); |
647 | panel_toplevel_set_y (toplevel, new_y, new_y_bottom, new_y_centered); |
648 | panel_toplevel_set_size (toplevel, new_size); |
649 | } |
650 | |
651 | /* this is called for expanded panels that are dragged around */ |
652 | static void panel_toplevel_calc_new_orientation(PanelToplevel* toplevel, int pointer_x, int pointer_y) |
653 | { |
654 | PanelOrientation new_orientation; |
655 | int hborder, vborder; |
656 | int monitor; |
657 | int monitor_width, monitor_height; |
658 | int new_x, new_y; |
659 | |
660 | monitor = panel_multimonitor_get_monitor_at_point (pointer_x, pointer_y); |
661 | |
662 | if (toplevel->priv->geometry.height < toplevel->priv->geometry.width) |
663 | vborder = hborder = (3 * toplevel->priv->geometry.height) >> 1; |
664 | else |
665 | vborder = hborder = (3 * toplevel->priv->geometry.width) >> 1; |
666 | |
667 | new_x = pointer_x - panel_multimonitor_x (monitor); |
668 | new_y = pointer_y - panel_multimonitor_y (monitor); |
669 | monitor_width = panel_multimonitor_width (monitor); |
670 | monitor_height = panel_multimonitor_height (monitor); |
671 | |
672 | new_orientation = toplevel->priv->orientation; |
673 | |
674 | switch (toplevel->priv->orientation) { |
675 | case PANEL_ORIENTATION_TOP: |
676 | if (new_y > (monitor_height - hborder)) |
677 | new_orientation = PANEL_ORIENTATION_BOTTOM; |
678 | |
679 | else if (new_y > hborder) { |
680 | if (new_x > (monitor_width - vborder)) |
681 | new_orientation = PANEL_ORIENTATION_RIGHT; |
682 | else if (new_x < vborder) |
683 | new_orientation = PANEL_ORIENTATION_LEFT; |
684 | } |
685 | break; |
686 | case PANEL_ORIENTATION_BOTTOM: |
687 | if (new_y < hborder) |
688 | new_orientation = PANEL_ORIENTATION_TOP; |
689 | |
690 | else if (new_y < (monitor_height - hborder)) { |
691 | if (new_x > (monitor_width - vborder)) |
692 | new_orientation = PANEL_ORIENTATION_RIGHT; |
693 | else if (new_x < vborder) |
694 | new_orientation = PANEL_ORIENTATION_LEFT; |
695 | } |
696 | break; |
697 | case PANEL_ORIENTATION_LEFT: |
698 | if (new_x > (monitor_width - vborder)) |
699 | new_orientation = PANEL_ORIENTATION_RIGHT; |
700 | |
701 | else if (new_x > vborder) { |
702 | if (new_y > (monitor_height - hborder)) |
703 | new_orientation = PANEL_ORIENTATION_BOTTOM; |
704 | else if (new_y < hborder) |
705 | new_orientation = PANEL_ORIENTATION_TOP; |
706 | } |
707 | break; |
708 | case PANEL_ORIENTATION_RIGHT: |
709 | if (new_x < vborder) |
710 | new_orientation = PANEL_ORIENTATION_LEFT; |
711 | |
712 | else if (new_x < (monitor_width - vborder)) { |
713 | if (new_y > (monitor_height - hborder)) |
714 | new_orientation = PANEL_ORIENTATION_BOTTOM; |
715 | else if (new_y < hborder) |
716 | new_orientation = PANEL_ORIENTATION_TOP; |
717 | } |
718 | break; |
719 | default: |
720 | g_assert_not_reached ()do { g_assertion_message_expr (((gchar*) 0), "panel-toplevel.c" , 720, ((const char*) (__func__)), ((void*)0)); } while (0); |
721 | break; |
722 | } |
723 | |
724 | panel_toplevel_set_monitor (toplevel, monitor); |
725 | panel_toplevel_set_orientation (toplevel, new_orientation); |
726 | } |
727 | |
728 | static void panel_toplevel_move_to(PanelToplevel* toplevel, int new_x, int new_y) |
729 | { |
730 | PanelOrientation new_orientation; |
731 | gboolean x_centered, y_centered; |
732 | CdkPoint display_min, display_max; |
733 | CdkRectangle monitor_geom; |
734 | int width, height; |
735 | int new_monitor; |
736 | int x, y, x_right, y_bottom; |
737 | int snap_tolerance; |
738 | |
739 | panel_multimonitor_get_bounds (&display_min, &display_max); |
740 | |
741 | width = toplevel->priv->geometry.width; |
742 | height = toplevel->priv->geometry.height; |
743 | |
744 | snap_tolerance = toplevel->priv->snap_tolerance; |
745 | |
746 | new_x = CLAMP (new_x, 0, display_max.x - width)(((new_x) > (display_max.x - width)) ? (display_max.x - width ) : (((new_x) < (0)) ? (0) : (new_x))); |
747 | new_y = CLAMP (new_y, 0, display_max.y - height)(((new_y) > (display_max.y - height)) ? (display_max.y - height ) : (((new_y) < (0)) ? (0) : (new_y))); |
748 | |
749 | new_orientation = toplevel->priv->orientation; |
750 | |
751 | if (new_x <= (display_min.x + snap_tolerance) && |
752 | toplevel->priv->orientation & PANEL_VERTICAL_MASK(PANEL_ORIENTATION_LEFT | PANEL_ORIENTATION_RIGHT)) |
753 | new_orientation = PANEL_ORIENTATION_LEFT; |
754 | |
755 | else if ((new_x + width) >= (display_max.x - snap_tolerance) && |
756 | toplevel->priv->orientation & PANEL_VERTICAL_MASK(PANEL_ORIENTATION_LEFT | PANEL_ORIENTATION_RIGHT)) |
757 | new_orientation = PANEL_ORIENTATION_RIGHT; |
758 | |
759 | if (new_y <= (display_min.y + snap_tolerance) && |
760 | toplevel->priv->orientation & PANEL_HORIZONTAL_MASK(PANEL_ORIENTATION_TOP | PANEL_ORIENTATION_BOTTOM)) |
761 | new_orientation = PANEL_ORIENTATION_TOP; |
762 | |
763 | else if ((new_y + height) >= (display_max.y - snap_tolerance) && |
764 | toplevel->priv->orientation & PANEL_HORIZONTAL_MASK(PANEL_ORIENTATION_TOP | PANEL_ORIENTATION_BOTTOM)) |
765 | new_orientation = PANEL_ORIENTATION_BOTTOM; |
766 | |
767 | new_monitor = panel_multimonitor_get_monitor_at_point (new_x, new_y); |
768 | |
769 | panel_toplevel_get_monitor_geometry (toplevel, &monitor_geom); |
770 | |
771 | x_centered = toplevel->priv->x_centered; |
772 | y_centered = toplevel->priv->y_centered; |
773 | |
774 | x = new_x - panel_multimonitor_x (new_monitor); |
775 | y = new_y - panel_multimonitor_y (new_monitor); |
776 | |
777 | if (toplevel->priv->orientation & PANEL_HORIZONTAL_MASK(PANEL_ORIENTATION_TOP | PANEL_ORIENTATION_BOTTOM)) { |
778 | y_centered = FALSE(0); |
779 | if (new_y <= display_min.y + snap_tolerance || |
780 | new_y + height >= display_max.y - snap_tolerance) |
781 | x_centered = abs (x - ((monitor_geom.width - width) / 2)) |
782 | <= snap_tolerance; |
783 | else |
784 | x_centered = FALSE(0); |
785 | } else { |
786 | x_centered = FALSE(0); |
787 | if (new_x <= display_min.x + snap_tolerance || |
788 | new_x + width >= display_max.x - snap_tolerance) |
789 | y_centered = abs (y - ((monitor_geom.height - height) / 2)) |
790 | <= snap_tolerance; |
791 | else |
792 | y_centered = FALSE(0); |
793 | } |
794 | |
795 | if (x_centered) |
796 | x = (monitor_geom.width - width) / 2; |
797 | if (y_centered) |
798 | y = (monitor_geom.height - height) / 2; |
799 | |
800 | if (!x_centered && (x + width / 2) > monitor_geom.width / 2) |
801 | x_right = monitor_geom.width - (x + width); |
802 | else |
803 | x_right = -1; |
804 | |
805 | if (!y_centered && (y + height / 2) > monitor_geom.height / 2) |
806 | y_bottom = monitor_geom.height - (y + height); |
807 | else |
808 | y_bottom = -1; |
809 | |
810 | panel_toplevel_set_monitor (toplevel, new_monitor); |
811 | panel_toplevel_set_orientation (toplevel, new_orientation); |
812 | panel_toplevel_set_x (toplevel, x, x_right, x_centered); |
813 | panel_toplevel_set_y (toplevel, y, y_bottom, y_centered); |
814 | } |
815 | |
816 | static void panel_toplevel_move_to_pointer(PanelToplevel* toplevel, int pointer_x, int pointer_y) |
817 | { |
818 | int new_x, new_y; |
819 | |
820 | new_x = pointer_x - toplevel->priv->drag_offset_x; |
821 | new_y = pointer_y - toplevel->priv->drag_offset_y; |
822 | |
823 | panel_toplevel_move_to (toplevel, new_x, new_y); |
824 | } |
825 | |
826 | static void panel_toplevel_rotate_to_pointer(PanelToplevel* toplevel, int pointer_x, int pointer_y) |
827 | { |
828 | int x_diff, y_diff; |
829 | int x, y; |
830 | int snap_tolerance; |
831 | |
832 | x = toplevel->priv->geometry.x; |
833 | y = toplevel->priv->geometry.y; |
834 | snap_tolerance = toplevel->priv->snap_tolerance; |
835 | |
836 | x_diff = pointer_x - (x + toplevel->priv->geometry.width / 2); |
837 | y_diff = pointer_y - (y + toplevel->priv->geometry.height / 2); |
838 | |
839 | if (((-y_diff > x_diff + snap_tolerance) && x_diff > 0 && y_diff < 0) || |
840 | (( y_diff < x_diff + snap_tolerance) && x_diff < 0 && y_diff < 0)) |
841 | panel_toplevel_set_orientation (toplevel, PANEL_ORIENTATION_RIGHT); |
842 | |
843 | else if (((-x_diff < y_diff - snap_tolerance) && x_diff > 0 && y_diff < 0) || |
844 | (( x_diff > y_diff - snap_tolerance) && x_diff > 0 && y_diff > 0)) |
845 | panel_toplevel_set_orientation (toplevel, PANEL_ORIENTATION_BOTTOM); |
846 | |
847 | else if ((( y_diff > x_diff + snap_tolerance) && x_diff > 0 && y_diff > 0) || |
848 | ((-y_diff < x_diff + snap_tolerance) && x_diff < 0 && y_diff > 0)) |
849 | panel_toplevel_set_orientation (toplevel, PANEL_ORIENTATION_LEFT); |
850 | |
851 | else if (((-x_diff > y_diff - snap_tolerance) && x_diff < 0 && y_diff > 0) || |
852 | (( x_diff < y_diff - snap_tolerance) && x_diff < 0 && y_diff < 0)) |
853 | panel_toplevel_set_orientation (toplevel, PANEL_ORIENTATION_TOP); |
854 | } |
855 | |
856 | #ifdef HAVE_X111 |
857 | static gboolean panel_toplevel_warp_pointer_increment(PanelToplevel* toplevel, int keyval, int increment) |
858 | { |
859 | CdkScreen *screen; |
860 | CdkWindow *root_window; |
861 | CdkDevice *device; |
862 | int new_x, new_y; |
863 | |
864 | screen = ctk_window_get_screen (CTK_WINDOW (toplevel)((((CtkWindow*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), ((ctk_window_get_type ()))))))); |
865 | g_return_val_if_fail (CDK_IS_X11_SCREEN (screen), FALSE)do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((screen)); GType __t = ((cdk_x11_screen_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; })))))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char* ) (__func__)), "CDK_IS_X11_SCREEN (screen)"); return ((0)); } } while (0); |
866 | root_window = cdk_screen_get_root_window (screen); |
867 | device = cdk_seat_get_pointer (cdk_display_get_default_seat (ctk_widget_get_display (CTK_WIDGET(root_window)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((root_window)), ((ctk_widget_get_type ()))))))))); |
868 | cdk_window_get_device_position (ctk_widget_get_window (CTK_WIDGET (root_window)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((root_window)), ((ctk_widget_get_type ()))))))), device, &new_x, &new_y, NULL((void*)0)); |
869 | |
870 | switch (keyval) { |
871 | case CDK_KEY_Up0xff52: |
872 | case CDK_KEY_KP_Up0xff97: |
873 | new_y -= increment; |
874 | break; |
875 | case CDK_KEY_Left0xff51: |
876 | case CDK_KEY_KP_Left0xff96: |
877 | new_x -= increment; |
878 | break; |
879 | case CDK_KEY_Down0xff54: |
880 | case CDK_KEY_KP_Down0xff99: |
881 | new_y += increment; |
882 | break; |
883 | case CDK_KEY_Right0xff53: |
884 | case CDK_KEY_KP_Right0xff98: |
885 | new_x += increment; |
886 | break; |
887 | default: |
888 | g_assert_not_reached ()do { g_assertion_message_expr (((gchar*) 0), "panel-toplevel.c" , 888, ((const char*) (__func__)), ((void*)0)); } while (0); |
889 | return FALSE(0); |
890 | } |
891 | |
892 | panel_warp_pointer (root_window, new_x, new_y); |
893 | |
894 | return TRUE(!(0)); |
895 | } |
896 | |
897 | static gboolean panel_toplevel_move_keyboard_floating(PanelToplevel* toplevel, CdkEventKey* event) |
898 | { |
899 | #define SMALL_INCREMENT 1 |
900 | #define NORMAL_INCREMENT 10 |
901 | |
902 | int increment = NORMAL_INCREMENT; |
903 | |
904 | if ((event->state & ctk_accelerator_get_default_mod_mask ()) == CDK_SHIFT_MASK) |
905 | increment = SMALL_INCREMENT; |
906 | |
907 | return panel_toplevel_warp_pointer_increment ( |
908 | toplevel, event->keyval, increment); |
909 | |
910 | #undef SMALL_INCREMENT |
911 | #undef NORMAL_INCREMENT |
912 | } |
913 | |
914 | #endif // HAVE_X11 |
915 | |
916 | static gboolean panel_toplevel_move_keyboard_expanded(PanelToplevel* toplevel, CdkEventKey* event) |
917 | { |
918 | PanelOrientation new_orientation; |
919 | |
920 | switch (event->keyval) { |
921 | case CDK_KEY_Up0xff52: |
922 | case CDK_KEY_KP_Up0xff97: |
923 | new_orientation = PANEL_ORIENTATION_TOP; |
924 | break; |
925 | case CDK_KEY_Left0xff51: |
926 | case CDK_KEY_KP_Left0xff96: |
927 | new_orientation = PANEL_ORIENTATION_LEFT; |
928 | break; |
929 | case CDK_KEY_Down0xff54: |
930 | case CDK_KEY_KP_Down0xff99: |
931 | new_orientation = PANEL_ORIENTATION_BOTTOM; |
932 | break; |
933 | case CDK_KEY_Right0xff53: |
934 | case CDK_KEY_KP_Right0xff98: |
935 | new_orientation = PANEL_ORIENTATION_RIGHT; |
936 | break; |
937 | default: |
938 | g_assert_not_reached ()do { g_assertion_message_expr (((gchar*) 0), "panel-toplevel.c" , 938, ((const char*) (__func__)), ((void*)0)); } while (0); |
939 | return FALSE(0); |
940 | } |
941 | |
942 | panel_toplevel_set_orientation (toplevel, new_orientation); |
943 | |
944 | return TRUE(!(0)); |
945 | } |
946 | |
947 | static gboolean panel_toplevel_initial_resize_keypress(PanelToplevel* toplevel, CdkEventKey* event) |
948 | { |
949 | PanelGrabOpType grab_op; |
950 | |
951 | switch (event->keyval) { |
952 | case CDK_KEY_Up0xff52: |
953 | case CDK_KEY_KP_Up0xff97: |
954 | if (!(toplevel->priv->orientation & PANEL_HORIZONTAL_MASK(PANEL_ORIENTATION_TOP | PANEL_ORIENTATION_BOTTOM))) |
955 | return FALSE(0); |
956 | grab_op = PANEL_GRAB_OP_RESIZE_UP; |
957 | break; |
958 | case CDK_KEY_Left0xff51: |
959 | case CDK_KEY_KP_Left0xff96: |
960 | if (!(toplevel->priv->orientation & PANEL_VERTICAL_MASK(PANEL_ORIENTATION_LEFT | PANEL_ORIENTATION_RIGHT))) |
961 | return FALSE(0); |
962 | grab_op = PANEL_GRAB_OP_RESIZE_LEFT; |
963 | break; |
964 | case CDK_KEY_Down0xff54: |
965 | case CDK_KEY_KP_Down0xff99: |
966 | if (!(toplevel->priv->orientation & PANEL_HORIZONTAL_MASK(PANEL_ORIENTATION_TOP | PANEL_ORIENTATION_BOTTOM))) |
967 | return FALSE(0); |
968 | grab_op = PANEL_GRAB_OP_RESIZE_DOWN; |
969 | break; |
970 | case CDK_KEY_Right0xff53: |
971 | case CDK_KEY_KP_Right0xff98: |
972 | if (!(toplevel->priv->orientation & PANEL_VERTICAL_MASK(PANEL_ORIENTATION_LEFT | PANEL_ORIENTATION_RIGHT))) |
973 | return FALSE(0); |
974 | grab_op = PANEL_GRAB_OP_RESIZE_RIGHT; |
975 | break; |
976 | default: |
977 | g_assert_not_reached ()do { g_assertion_message_expr (((gchar*) 0), "panel-toplevel.c" , 977, ((const char*) (__func__)), ((void*)0)); } while (0); |
978 | return FALSE(0); |
979 | } |
980 | |
981 | panel_toplevel_end_grab_op (toplevel, event->time); |
982 | panel_toplevel_begin_grab_op (toplevel, grab_op, TRUE(!(0)), event->time); |
983 | |
984 | return TRUE(!(0)); |
985 | } |
986 | |
987 | static gboolean panel_toplevel_handle_grab_op_key_event(PanelToplevel* toplevel, CdkEventKey* event) |
988 | { |
989 | gboolean retval = FALSE(0); |
990 | |
991 | switch (event->keyval) { |
992 | case CDK_KEY_Up0xff52: |
993 | case CDK_KEY_KP_Up0xff97: |
994 | case CDK_KEY_Left0xff51: |
995 | case CDK_KEY_KP_Left0xff96: |
996 | case CDK_KEY_Down0xff54: |
997 | case CDK_KEY_KP_Down0xff99: |
998 | case CDK_KEY_Right0xff53: |
999 | case CDK_KEY_KP_Right0xff98: |
1000 | switch (toplevel->priv->grab_op) { |
1001 | case PANEL_GRAB_OP_MOVE: |
1002 | if (toplevel->priv->expand) { |
1003 | retval = panel_toplevel_move_keyboard_expanded ( |
1004 | toplevel, event); |
1005 | } |
1006 | #ifdef HAVE_X111 |
1007 | else if (CDK_IS_X11_DISPLAY (ctk_widget_get_display (CTK_WIDGET (toplevel)))(((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) ( (ctk_widget_get_display (((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance*) ((toplevel)), ((ctk_widget_get_type ())))) ))))); GType __t = ((cdk_x11_display_get_type())); gboolean __r ; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; }))))) { |
1008 | retval = panel_toplevel_move_keyboard_floating ( |
1009 | toplevel, event); |
1010 | } |
1011 | #endif // HAVE_X11 |
1012 | break; |
1013 | case PANEL_GRAB_OP_RESIZE: |
1014 | retval = panel_toplevel_initial_resize_keypress (toplevel, event); |
1015 | break; |
1016 | case PANEL_GRAB_OP_RESIZE_UP: |
1017 | case PANEL_GRAB_OP_RESIZE_DOWN: |
1018 | case PANEL_GRAB_OP_RESIZE_LEFT: |
1019 | case PANEL_GRAB_OP_RESIZE_RIGHT: |
1020 | #ifdef HAVE_X111 |
1021 | if (CDK_IS_X11_DISPLAY (ctk_widget_get_display (CTK_WIDGET (toplevel)))(((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) ( (ctk_widget_get_display (((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance*) ((toplevel)), ((ctk_widget_get_type ())))) ))))); GType __t = ((cdk_x11_display_get_type())); gboolean __r ; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; }))))) |
1022 | retval = panel_toplevel_warp_pointer_increment (toplevel, event->keyval, 1); |
1023 | #endif // HAVE_X11 |
1024 | break; |
1025 | default: |
1026 | g_assert_not_reached ()do { g_assertion_message_expr (((gchar*) 0), "panel-toplevel.c" , 1026, ((const char*) (__func__)), ((void*)0)); } while (0); |
1027 | break; |
1028 | } |
1029 | break; |
1030 | case CDK_KEY_Escape0xff1b: |
1031 | panel_toplevel_cancel_grab_op (toplevel, event->time); |
1032 | case CDK_KEY_Return0xff0d: /* drop through*/ |
1033 | case CDK_KEY_KP_Enter0xff8d: |
1034 | case CDK_KEY_space0x020: |
1035 | case CDK_KEY_KP_Space0xff80: |
1036 | panel_toplevel_end_grab_op (toplevel, event->time); |
1037 | retval = TRUE(!(0)); |
1038 | default: /* drop through*/ |
1039 | break; |
1040 | } |
1041 | |
1042 | return retval; |
1043 | } |
1044 | |
1045 | static gboolean panel_toplevel_handle_grab_op_motion_event(PanelToplevel* toplevel, CdkEventMotion* event) |
1046 | { |
1047 | switch (toplevel->priv->grab_op) { |
1048 | case PANEL_GRAB_OP_MOVE: |
1049 | if (toplevel->priv->expand) |
1050 | panel_toplevel_calc_new_orientation ( |
1051 | toplevel, event->x_root, event->y_root); |
1052 | |
1053 | else if ((event->state & ctk_accelerator_get_default_mod_mask ()) == CDK_CONTROL_MASK) |
1054 | panel_toplevel_rotate_to_pointer ( |
1055 | toplevel, event->x_root, event->y_root); |
1056 | |
1057 | else |
1058 | panel_toplevel_move_to_pointer ( |
1059 | toplevel, event->x_root, event->y_root); |
1060 | return TRUE(!(0)); |
1061 | case PANEL_GRAB_OP_RESIZE_UP: |
1062 | case PANEL_GRAB_OP_RESIZE_DOWN: |
1063 | case PANEL_GRAB_OP_RESIZE_LEFT: |
1064 | case PANEL_GRAB_OP_RESIZE_RIGHT: |
1065 | panel_toplevel_resize_to_pointer (toplevel, event->x_root, event->y_root); |
1066 | return TRUE(!(0)); |
1067 | default: |
1068 | break; |
1069 | } |
1070 | |
1071 | return FALSE(0); |
1072 | } |
1073 | |
1074 | static void panel_toplevel_calc_floating(PanelToplevel* toplevel) |
1075 | { |
1076 | CdkRectangle monitor_geom; |
1077 | CdkPoint position_on_monitor; |
1078 | int snap_tolerance; |
1079 | |
1080 | if (toplevel->priv->expand) { |
1081 | toplevel->priv->floating = FALSE(0); |
1082 | return; |
1083 | } |
1084 | |
1085 | panel_toplevel_get_monitor_geometry (toplevel, &monitor_geom); |
1086 | |
1087 | if (toplevel->priv->x_right == -1) |
1088 | position_on_monitor.x = toplevel->priv->x; |
1089 | else |
1090 | position_on_monitor.x = monitor_geom.width - (toplevel->priv->x_right + toplevel->priv->geometry.width); |
1091 | if (toplevel->priv->y_bottom == -1) |
1092 | position_on_monitor.y = toplevel->priv->y; |
1093 | else |
1094 | position_on_monitor.y = monitor_geom.height - (toplevel->priv->y_bottom + toplevel->priv->geometry.height); |
1095 | |
1096 | snap_tolerance = toplevel->priv->snap_tolerance; |
1097 | |
1098 | if (toplevel->priv->orientation & PANEL_HORIZONTAL_MASK(PANEL_ORIENTATION_TOP | PANEL_ORIENTATION_BOTTOM)) |
1099 | toplevel->priv->floating = |
1100 | (position_on_monitor.y > snap_tolerance) && |
1101 | (position_on_monitor.y < (monitor_geom.height - toplevel->priv->geometry.height - snap_tolerance)); |
1102 | else |
1103 | toplevel->priv->floating = |
1104 | (position_on_monitor.x > snap_tolerance) && |
1105 | (position_on_monitor.x < (monitor_geom.width - toplevel->priv->geometry.width - snap_tolerance)); |
1106 | } |
1107 | |
1108 | void panel_toplevel_push_autohide_disabler(PanelToplevel* toplevel) |
1109 | { |
1110 | g_return_if_fail (toplevel != NULL)do { if ((toplevel != ((void*)0))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char*) (__func__)), "toplevel != NULL" ); return; } } while (0); |
1111 | |
1112 | if (!toplevel->priv->n_autohide_disablers++) |
1113 | panel_toplevel_queue_auto_hide (toplevel); |
1114 | } |
1115 | |
1116 | void panel_toplevel_pop_autohide_disabler(PanelToplevel* toplevel) |
1117 | { |
1118 | g_return_if_fail (toplevel != NULL)do { if ((toplevel != ((void*)0))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char*) (__func__)), "toplevel != NULL" ); return; } } while (0); |
1119 | g_return_if_fail (toplevel->priv->n_autohide_disablers > 0)do { if ((toplevel->priv->n_autohide_disablers > 0)) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char *) (__func__)), "toplevel->priv->n_autohide_disablers > 0" ); return; } } while (0); |
1120 | |
1121 | if (!--toplevel->priv->n_autohide_disablers) |
1122 | panel_toplevel_queue_auto_hide (toplevel); |
1123 | } |
1124 | |
1125 | static gboolean panel_toplevel_get_autohide_disabled(PanelToplevel* toplevel) |
1126 | { |
1127 | return toplevel->priv->n_autohide_disablers > 0 ? TRUE(!(0)) : FALSE(0); |
1128 | } |
1129 | |
1130 | static gboolean panel_toplevel_hide_button_event (PanelToplevel *toplevel, |
1131 | CdkEventButton *event, |
1132 | CtkButton *button G_GNUC_UNUSED__attribute__ ((__unused__))) |
1133 | { |
1134 | if (event->button == 1) |
1135 | return FALSE(0); |
1136 | |
1137 | return ctk_widget_event (CTK_WIDGET (toplevel)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), ((ctk_widget_get_type ())))))), (CdkEvent *) event); |
1138 | } |
1139 | |
1140 | static void panel_toplevel_hide_button_clicked(PanelToplevel* toplevel, CtkButton* button) |
1141 | { |
1142 | CtkArrowType arrow_type; |
1143 | gboolean ltr; |
1144 | |
1145 | if (toplevel->priv->animating || |
1146 | toplevel->priv->state == PANEL_STATE_AUTO_HIDDEN) |
1147 | return; |
1148 | |
1149 | ltr = ctk_widget_get_direction (CTK_WIDGET (toplevel)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), ((ctk_widget_get_type ()))))))) == CTK_TEXT_DIR_LTR; |
1150 | arrow_type = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (button), "arrow-type"))((gint) (glong) (g_object_get_data (((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance*) ((button)), (((GType) ((20) << (2))) ))))), "arrow-type"))); |
1151 | |
1152 | if (toplevel->priv->state == PANEL_STATE_NORMAL) { |
1153 | CtkDirectionType direction = -1; |
1154 | |
1155 | switch (arrow_type) { |
1156 | case CTK_ARROW_UP: |
1157 | direction = CTK_DIR_UP; |
1158 | break; |
1159 | case CTK_ARROW_DOWN: |
1160 | direction = CTK_DIR_DOWN; |
1161 | break; |
1162 | case CTK_ARROW_LEFT: |
1163 | direction = ltr ? CTK_DIR_LEFT : CTK_DIR_RIGHT; |
1164 | break; |
1165 | case CTK_ARROW_RIGHT: |
1166 | direction = ltr ? CTK_DIR_RIGHT : CTK_DIR_LEFT; |
1167 | break; |
1168 | default: |
1169 | g_assert_not_reached ()do { g_assertion_message_expr (((gchar*) 0), "panel-toplevel.c" , 1169, ((const char*) (__func__)), ((void*)0)); } while (0); |
1170 | break; |
1171 | } |
1172 | |
1173 | panel_toplevel_hide (toplevel, FALSE(0), direction); |
1174 | } else |
1175 | panel_toplevel_unhide (toplevel); |
1176 | } |
1177 | |
1178 | static void |
1179 | set_arrow_type (CtkImage *image, |
1180 | CtkArrowType arrow_type) |
1181 | { |
1182 | switch (arrow_type) |
1183 | { |
1184 | case CTK_ARROW_NONE: |
1185 | case CTK_ARROW_DOWN: |
1186 | ctk_image_set_from_icon_name (image, "pan-down-symbolic", CTK_ICON_SIZE_BUTTON); |
1187 | break; |
1188 | case CTK_ARROW_UP: |
1189 | ctk_image_set_from_icon_name (image, "pan-up-symbolic", CTK_ICON_SIZE_BUTTON); |
1190 | break; |
1191 | case CTK_ARROW_LEFT: |
1192 | ctk_image_set_from_icon_name (image, "pan-start-symbolic", CTK_ICON_SIZE_BUTTON); |
1193 | break; |
1194 | case CTK_ARROW_RIGHT: |
1195 | ctk_image_set_from_icon_name (image, "pan-end-symbolic", CTK_ICON_SIZE_BUTTON); |
1196 | break; |
1197 | } |
1198 | } |
1199 | |
1200 | static CtkWidget * |
1201 | panel_toplevel_add_hide_button (PanelToplevel *toplevel, |
1202 | CtkArrowType arrow_type, |
1203 | int left, |
1204 | int top) |
1205 | { |
1206 | |
1207 | CtkWidget *button; |
1208 | AtkObject *obj; |
1209 | CtkWidget *arrow; |
1210 | |
1211 | button = ctk_button_new (); |
1212 | obj = ctk_widget_get_accessible (button); |
1213 | atk_object_set_name (obj, _("Hide Panel")gettext ("Hide Panel")); |
1214 | ctk_widget_set_can_default (button, FALSE(0)); |
1215 | |
1216 | arrow = ctk_image_new (); |
1217 | set_arrow_type (CTK_IMAGE (arrow)((((CtkImage*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((arrow)), ((ctk_image_get_type ())))))), arrow_type); |
1218 | ctk_container_add (CTK_CONTAINER (button)((((CtkContainer*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((button)), ((ctk_container_get_type ())))))), arrow); |
1219 | ctk_widget_show (arrow); |
1220 | |
1221 | g_object_set_data (G_OBJECT (button)((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((button)), (((GType) ((20) << (2)))))))), |
1222 | "arrow-type", |
1223 | GINT_TO_POINTER (arrow_type)((gpointer) (glong) (arrow_type))); |
1224 | |
1225 | g_signal_connect_swapped (button, "clicked",g_signal_connect_data ((button), ("clicked"), (((GCallback) ( panel_toplevel_hide_button_clicked))), (toplevel), ((void*)0) , G_CONNECT_SWAPPED) |
1226 | G_CALLBACK (panel_toplevel_hide_button_clicked), toplevel)g_signal_connect_data ((button), ("clicked"), (((GCallback) ( panel_toplevel_hide_button_clicked))), (toplevel), ((void*)0) , G_CONNECT_SWAPPED); |
1227 | g_signal_connect_swapped (button, "button_press_event",g_signal_connect_data ((button), ("button_press_event"), (((GCallback ) (panel_toplevel_hide_button_event))), (toplevel), ((void*)0 ), G_CONNECT_SWAPPED) |
1228 | G_CALLBACK (panel_toplevel_hide_button_event), toplevel)g_signal_connect_data ((button), ("button_press_event"), (((GCallback ) (panel_toplevel_hide_button_event))), (toplevel), ((void*)0 ), G_CONNECT_SWAPPED); |
1229 | g_signal_connect_swapped (button, "button_release_event",g_signal_connect_data ((button), ("button_release_event"), (( (GCallback) (panel_toplevel_hide_button_event))), (toplevel), ((void*)0), G_CONNECT_SWAPPED) |
1230 | G_CALLBACK (panel_toplevel_hide_button_event), toplevel)g_signal_connect_data ((button), ("button_release_event"), (( (GCallback) (panel_toplevel_hide_button_event))), (toplevel), ((void*)0), G_CONNECT_SWAPPED); |
1231 | |
1232 | ctk_grid_attach (CTK_GRID (toplevel->priv->grid)((((CtkGrid*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel->priv->grid)), ((ctk_grid_get_type ())))) )), button, left, top, 1, 1); |
1233 | |
1234 | return button; |
1235 | } |
1236 | |
1237 | static void panel_toplevel_update_buttons_showing(PanelToplevel* toplevel) |
1238 | { |
1239 | if (toplevel->priv->orientation & PANEL_HORIZONTAL_MASK(PANEL_ORIENTATION_TOP | PANEL_ORIENTATION_BOTTOM)) { |
1240 | ctk_widget_hide (toplevel->priv->hide_button_top); |
1241 | ctk_widget_hide (toplevel->priv->hide_button_bottom); |
1242 | ctk_widget_show (toplevel->priv->hide_button_left); |
1243 | ctk_widget_show (toplevel->priv->hide_button_right); |
1244 | } else { |
1245 | ctk_widget_show (toplevel->priv->hide_button_top); |
1246 | ctk_widget_show (toplevel->priv->hide_button_bottom); |
1247 | ctk_widget_hide (toplevel->priv->hide_button_left); |
1248 | ctk_widget_hide (toplevel->priv->hide_button_right); |
1249 | } |
1250 | |
1251 | if (toplevel->priv->attached) { |
1252 | switch (panel_toplevel_get_orientation (toplevel->priv->attach_toplevel)) { |
1253 | case PANEL_ORIENTATION_TOP: |
1254 | ctk_widget_hide (toplevel->priv->hide_button_top); |
1255 | break; |
1256 | case PANEL_ORIENTATION_BOTTOM: |
1257 | ctk_widget_hide (toplevel->priv->hide_button_bottom); |
1258 | break; |
1259 | case PANEL_ORIENTATION_LEFT: |
1260 | ctk_widget_hide (toplevel->priv->hide_button_left); |
1261 | break; |
1262 | case PANEL_ORIENTATION_RIGHT: |
1263 | ctk_widget_hide (toplevel->priv->hide_button_right); |
1264 | break; |
1265 | default: |
1266 | g_assert_not_reached ()do { g_assertion_message_expr (((gchar*) 0), "panel-toplevel.c" , 1266, ((const char*) (__func__)), ((void*)0)); } while (0); |
1267 | break; |
1268 | } |
1269 | } |
1270 | } |
1271 | |
1272 | /* force set hide button size on panel size < 30px */ |
1273 | static void panel_toplevel_update_hide_buttons_size (CtkWidget *button, int panel_size) |
1274 | { |
1275 | CtkCssProvider *css_provider; |
1276 | CtkStyleContext *context; |
1277 | CtkWidget *arrow; |
1278 | CtkSettings *settings; |
1279 | gchar *ctk_theme_name = NULL((void*)0); |
1280 | |
1281 | context = ctk_widget_get_style_context (button); |
1282 | ctk_style_context_add_class (context, "panel-button"); |
1283 | |
1284 | /* get defaults from theme */ |
1285 | settings = ctk_settings_get_default (); |
1286 | g_object_get (settings, "ctk-theme-name", &ctk_theme_name, NULL((void*)0)); |
1287 | css_provider = ctk_css_provider_get_named (ctk_theme_name, NULL((void*)0)); |
1288 | g_free (ctk_theme_name); |
1289 | |
1290 | /* set custom css by adding our custom code to the default theme css |
1291 | * |
1292 | * NOTE that contriary to the documentation: |
1293 | * https://developer.gnome.org/ctk3/stable/CtkCssProvider.html#ctk-css-provider-load-from-data |
1294 | * the previously loaded theme is NOT cleared from the css_provider. (reason unknown) |
1295 | * In other words, this works exactly, how we need it here. |
1296 | * ALSO NOTE that using ctk_css_provider_to_string () to convert the theme css data into a string |
1297 | * and then adding the custom css, then adding this updated css to a css_provider |
1298 | * with the ctk_css_provider_load_from_data () also works, |
1299 | * however some themes can't be easily converted to strings, beacuse of the binary data |
1300 | * they contain. This causes a delay of minutes in loading the cafe-panel, |
1301 | * and so this approach is not viable. */ |
1302 | if (panel_size < 30) { |
1303 | ctk_css_provider_load_from_data (css_provider, ".panel-button {min-height: 13px; min-width: 13px; padding: 0px;}", -1, NULL((void*)0)); |
1304 | } |
1305 | |
1306 | ctk_style_context_add_provider (context, CTK_STYLE_PROVIDER (css_provider)((((CtkStyleProvider*) (void *) g_type_check_instance_cast (( GTypeInstance*) ((css_provider)), ((ctk_style_provider_get_type ())))))), CTK_STYLE_PROVIDER_PRIORITY_APPLICATION600); |
1307 | |
1308 | /* get arrow image */ |
1309 | arrow = ctk_bin_get_child (CTK_BIN (button)((((CtkBin*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((button)), ((ctk_bin_get_type ()))))))); |
1310 | |
1311 | /* set image size */ |
1312 | if (panel_size < 20) { |
1313 | ctk_image_set_pixel_size (CTK_IMAGE (arrow)((((CtkImage*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((arrow)), ((ctk_image_get_type ())))))), 12); |
1314 | } else if (panel_size < 40) { |
1315 | ctk_image_set_pixel_size (CTK_IMAGE (arrow)((((CtkImage*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((arrow)), ((ctk_image_get_type ())))))), 16); |
1316 | } else if (panel_size < 60) { |
1317 | ctk_image_set_pixel_size (CTK_IMAGE (arrow)((((CtkImage*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((arrow)), ((ctk_image_get_type ())))))), 22); |
1318 | } else { |
1319 | ctk_image_set_pixel_size (CTK_IMAGE (arrow)((((CtkImage*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((arrow)), ((ctk_image_get_type ())))))), 24); |
1320 | } |
1321 | } |
1322 | |
1323 | static void panel_toplevel_update_hide_buttons(PanelToplevel* toplevel) |
1324 | { |
1325 | |
1326 | int panel_size = toplevel->priv->size; |
1327 | int hb_size = 0; |
1328 | |
1329 | if (toplevel->priv->buttons_enabled) { |
1330 | panel_toplevel_update_buttons_showing (toplevel); |
1331 | |
1332 | panel_toplevel_update_hide_buttons_size (toplevel->priv->hide_button_top, panel_size); |
1333 | panel_toplevel_update_hide_buttons_size (toplevel->priv->hide_button_bottom, panel_size); |
1334 | panel_toplevel_update_hide_buttons_size (toplevel->priv->hide_button_left, panel_size); |
1335 | panel_toplevel_update_hide_buttons_size (toplevel->priv->hide_button_right, panel_size); |
1336 | |
1337 | } else { |
1338 | g_object_set ( |
1339 | G_OBJECT (toplevel->priv->hide_button_top)((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel->priv->hide_button_top)), (((GType) ((20) << (2)))))))), |
1340 | "visible", toplevel->priv->state == PANEL_STATE_HIDDEN_DOWN, |
1341 | NULL((void*)0)); |
1342 | g_object_set ( |
1343 | G_OBJECT (toplevel->priv->hide_button_bottom)((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel->priv->hide_button_bottom)), (((GType) (( 20) << (2)))))))), |
1344 | "visible", toplevel->priv->state == PANEL_STATE_HIDDEN_UP, |
1345 | NULL((void*)0)); |
1346 | g_object_set ( |
1347 | G_OBJECT (toplevel->priv->hide_button_left)((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel->priv->hide_button_left)), (((GType) ((20 ) << (2)))))))), |
1348 | "visible", toplevel->priv->state == PANEL_STATE_HIDDEN_RIGHT, |
1349 | NULL((void*)0)); |
1350 | g_object_set ( |
1351 | G_OBJECT (toplevel->priv->hide_button_right)((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel->priv->hide_button_right)), (((GType) ((20 ) << (2)))))))), |
1352 | "visible", toplevel->priv->state == PANEL_STATE_HIDDEN_LEFT, |
1353 | NULL((void*)0)); |
1354 | } |
1355 | |
1356 | if (toplevel->priv->arrows_enabled) { |
1357 | |
1358 | ctk_widget_show (ctk_bin_get_child (CTK_BIN (toplevel->priv->hide_button_top)((((CtkBin*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel->priv->hide_button_top)), ((ctk_bin_get_type ())))))))); |
1359 | ctk_widget_show (ctk_bin_get_child (CTK_BIN (toplevel->priv->hide_button_bottom)((((CtkBin*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel->priv->hide_button_bottom)), ((ctk_bin_get_type ())))))))); |
1360 | ctk_widget_show (ctk_bin_get_child (CTK_BIN (toplevel->priv->hide_button_left)((((CtkBin*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel->priv->hide_button_left)), ((ctk_bin_get_type ())))))))); |
1361 | ctk_widget_show (ctk_bin_get_child (CTK_BIN (toplevel->priv->hide_button_right)((((CtkBin*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel->priv->hide_button_right)), ((ctk_bin_get_type ())))))))); |
1362 | |
1363 | } else { |
1364 | |
1365 | ctk_widget_hide (ctk_bin_get_child (CTK_BIN (toplevel->priv->hide_button_top)((((CtkBin*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel->priv->hide_button_top)), ((ctk_bin_get_type ())))))))); |
1366 | ctk_widget_hide (ctk_bin_get_child (CTK_BIN (toplevel->priv->hide_button_bottom)((((CtkBin*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel->priv->hide_button_bottom)), ((ctk_bin_get_type ())))))))); |
1367 | ctk_widget_hide (ctk_bin_get_child (CTK_BIN (toplevel->priv->hide_button_left)((((CtkBin*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel->priv->hide_button_left)), ((ctk_bin_get_type ())))))))); |
1368 | ctk_widget_hide (ctk_bin_get_child (CTK_BIN (toplevel->priv->hide_button_right)((((CtkBin*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel->priv->hide_button_right)), ((ctk_bin_get_type ())))))))); |
1369 | } |
1370 | |
1371 | /* set size after setting the arrow */ |
1372 | if (toplevel->priv->buttons_enabled) { |
1373 | |
1374 | if ( panel_size < 20) { hb_size = 16; } |
1375 | else if ( panel_size < 40) { hb_size = 20; } |
1376 | else if ( panel_size < 60) { hb_size = 26; } |
1377 | else { hb_size = 30; } |
1378 | |
1379 | ctk_widget_set_size_request (toplevel->priv->hide_button_top, panel_size, hb_size); |
1380 | ctk_widget_set_size_request (toplevel->priv->hide_button_bottom, panel_size, hb_size); |
1381 | ctk_widget_set_size_request (toplevel->priv->hide_button_left, hb_size, panel_size); |
1382 | ctk_widget_set_size_request (toplevel->priv->hide_button_right, hb_size, panel_size); |
1383 | } |
1384 | } |
1385 | |
1386 | static gboolean panel_toplevel_contains_pointer(PanelToplevel* toplevel) |
1387 | { |
1388 | CdkDisplay *display; |
1389 | CdkScreen *screen; |
1390 | CtkWidget *widget; |
1391 | CdkSeat *seat; |
1392 | CdkDevice *pointer; |
1393 | int x, y; |
1394 | |
1395 | display = cdk_display_get_default (); |
1396 | seat = cdk_display_get_default_seat (display); |
1397 | pointer = cdk_seat_get_pointer (seat); |
1398 | widget = CTK_WIDGET (toplevel)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), ((ctk_widget_get_type ())))))); |
1399 | |
1400 | if (!ctk_widget_get_realized (widget)) |
1401 | return FALSE(0); |
1402 | |
1403 | screen = NULL((void*)0); |
1404 | x = y = -1; |
1405 | cdk_device_get_position (pointer, &screen, &x, &y); |
1406 | |
1407 | if (screen != ctk_window_get_screen (CTK_WINDOW (toplevel)((((CtkWindow*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), ((ctk_window_get_type ())))))))) |
1408 | return FALSE(0); |
1409 | |
1410 | if (x == -1 || y == -1) |
1411 | return FALSE(0); |
1412 | |
1413 | if (x < toplevel->priv->geometry.x || x >= (toplevel->priv->geometry.x + toplevel->priv->geometry.width) || |
1414 | y < toplevel->priv->geometry.y || y >= (toplevel->priv->geometry.y + toplevel->priv->geometry.height)) |
1415 | return FALSE(0); |
1416 | |
1417 | return TRUE(!(0)); |
1418 | } |
1419 | |
1420 | static inline int panel_toplevel_get_effective_auto_hide_size(PanelToplevel* toplevel) |
1421 | { |
1422 | int size; |
1423 | |
1424 | if (toplevel->priv->orientation & PANEL_HORIZONTAL_MASK(PANEL_ORIENTATION_TOP | PANEL_ORIENTATION_BOTTOM)) |
1425 | size = CLAMP (toplevel->priv->auto_hide_size,(((toplevel->priv->auto_hide_size) > (toplevel->priv ->original_height / 2)) ? (toplevel->priv->original_height / 2) : (((toplevel->priv->auto_hide_size) < (1)) ? ( 1) : (toplevel->priv->auto_hide_size))) |
1426 | 1, toplevel->priv->original_height / 2)(((toplevel->priv->auto_hide_size) > (toplevel->priv ->original_height / 2)) ? (toplevel->priv->original_height / 2) : (((toplevel->priv->auto_hide_size) < (1)) ? ( 1) : (toplevel->priv->auto_hide_size))); |
1427 | else |
1428 | size = CLAMP (toplevel->priv->auto_hide_size,(((toplevel->priv->auto_hide_size) > (toplevel->priv ->original_width / 2)) ? (toplevel->priv->original_width / 2) : (((toplevel->priv->auto_hide_size) < (1)) ? ( 1) : (toplevel->priv->auto_hide_size))) |
1429 | 1, toplevel->priv->original_width / 2)(((toplevel->priv->auto_hide_size) > (toplevel->priv ->original_width / 2)) ? (toplevel->priv->original_width / 2) : (((toplevel->priv->auto_hide_size) < (1)) ? ( 1) : (toplevel->priv->auto_hide_size))); |
1430 | |
1431 | /* paranoia */ |
1432 | return (size <= 0) ? DEFAULT_AUTO_HIDE_SIZE1 : size; |
1433 | } |
1434 | |
1435 | static gboolean panel_toplevel_update_struts(PanelToplevel* toplevel, gboolean end_of_animation) |
1436 | { |
1437 | PanelOrientation orientation; |
1438 | gboolean geometry_changed = FALSE(0); |
1439 | int strut, strut_start, strut_end; |
1440 | int x, y, width, height; |
1441 | CdkRectangle monitor_geom; |
1442 | |
1443 | if (!toplevel->priv->updated_geometry_initial) |
1444 | return FALSE(0); |
1445 | |
1446 | #ifdef HAVE_X111 |
1447 | if (CDK_IS_X11_DISPLAY (ctk_widget_get_display (CTK_WIDGET (toplevel)))(((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) ( (ctk_widget_get_display (((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance*) ((toplevel)), ((ctk_widget_get_type ())))) ))))); GType __t = ((cdk_x11_display_get_type())); gboolean __r ; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; })))) && toplevel->priv->attached) { |
1448 | panel_struts_unregister_strut (toplevel); |
1449 | panel_struts_set_window_hint (toplevel); |
1450 | return FALSE(0); |
1451 | } |
1452 | #endif // HAVE_X11 |
1453 | |
1454 | /* In the case of the initial animation, we really want the struts to |
1455 | * represent what is at the end of the animation, to avoid desktop |
1456 | * icons jumping around. */ |
1457 | if (!toplevel->priv->initial_animation_done) { |
1458 | end_of_animation = TRUE(!(0)); |
1459 | |
1460 | /* We've not started the animation yet, so we have to compute |
1461 | * where we want to end. Note that we don't want to compute |
1462 | * this everytime, since the struts conflict resolution will be |
1463 | * overridden if we do so */ |
1464 | if (!toplevel->priv->animating) |
1465 | panel_toplevel_calculate_animation_end_geometry (toplevel); |
1466 | } |
1467 | |
1468 | panel_toplevel_get_monitor_geometry (toplevel, &monitor_geom); |
1469 | |
1470 | if (end_of_animation) { |
1471 | x = toplevel->priv->animation_end_x; |
1472 | y = toplevel->priv->animation_end_y; |
1473 | x += panel_multimonitor_x (toplevel->priv->monitor); |
1474 | y += panel_multimonitor_y (toplevel->priv->monitor); |
1475 | if (toplevel->priv->animation_end_width != -1) |
1476 | width = toplevel->priv->animation_end_width; |
1477 | else |
1478 | width = toplevel->priv->geometry.width; |
1479 | if (toplevel->priv->animation_end_height != -1) |
1480 | height = toplevel->priv->animation_end_height; |
1481 | else |
1482 | height = toplevel->priv->geometry.height; |
1483 | } else { |
1484 | x = toplevel->priv->geometry.x; |
1485 | y = toplevel->priv->geometry.y; |
1486 | width = toplevel->priv->geometry.width; |
1487 | height = toplevel->priv->geometry.height; |
1488 | } |
1489 | |
1490 | orientation = toplevel->priv->orientation; |
1491 | |
1492 | strut = strut_start = strut_end = 0; |
1493 | |
1494 | if (orientation & PANEL_HORIZONTAL_MASK(PANEL_ORIENTATION_TOP | PANEL_ORIENTATION_BOTTOM)) { |
1495 | if (y <= monitor_geom.y) { |
1496 | orientation = PANEL_ORIENTATION_TOP; |
1497 | strut = y + height - monitor_geom.y; |
1498 | } else if (y >= monitor_geom.y + monitor_geom.height - height) { |
1499 | orientation = PANEL_ORIENTATION_BOTTOM; |
1500 | strut = monitor_geom.y + monitor_geom.height - y; |
1501 | } |
1502 | |
1503 | if (strut > 0) { |
1504 | strut_start = MAX (x, monitor_geom.x)(((x) > (monitor_geom.x)) ? (x) : (monitor_geom.x)); |
1505 | strut_end = MIN (x + width, monitor_geom.x + monitor_geom.width)(((x + width) < (monitor_geom.x + monitor_geom.width)) ? ( x + width) : (monitor_geom.x + monitor_geom.width)) - 1; |
1506 | } |
1507 | } else { |
1508 | if (x <= monitor_geom.x) { |
1509 | orientation = PANEL_ORIENTATION_LEFT; |
1510 | strut = x + width - monitor_geom.x; |
1511 | } else if (x >= monitor_geom.x + monitor_geom.width - width) { |
1512 | orientation = PANEL_ORIENTATION_RIGHT; |
1513 | strut = monitor_geom.x + monitor_geom.width - x; |
1514 | } |
1515 | |
1516 | if (strut > 0) { |
1517 | strut_start = MAX (y, monitor_geom.y)(((y) > (monitor_geom.y)) ? (y) : (monitor_geom.y)); |
1518 | strut_end = MIN (y + height, monitor_geom.y + monitor_geom.height)(((y + height) < (monitor_geom.y + monitor_geom.height)) ? (y + height) : (monitor_geom.y + monitor_geom.height)) - 1; |
1519 | } |
1520 | } |
1521 | |
1522 | /* Adjust strut size based on scale factor */ |
1523 | if (strut > 0) |
1524 | strut += toplevel->priv->size * (toplevel->priv->scale - 1); |
1525 | |
1526 | if (orientation != toplevel->priv->orientation) { |
1527 | toplevel->priv->orientation = orientation; |
1528 | g_object_notify (G_OBJECT (toplevel)((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), (((GType) ((20) << (2)))))))), "orientation"); |
1529 | } |
1530 | |
1531 | if (toplevel->priv->auto_hide && strut > 0) |
1532 | strut = panel_toplevel_get_effective_auto_hide_size (toplevel); |
1533 | |
1534 | #ifdef HAVE_X111 |
1535 | if (CDK_IS_X11_DISPLAY (ctk_widget_get_display (CTK_WIDGET (toplevel)))(((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) ( (ctk_widget_get_display (((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance*) ((toplevel)), ((ctk_widget_get_type ())))) ))))); GType __t = ((cdk_x11_display_get_type())); gboolean __r ; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; }))))) { |
1536 | if (strut > 0) { |
1537 | CdkScreen *screen; |
1538 | screen = ctk_widget_get_screen (CTK_WIDGET (toplevel)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), ((ctk_widget_get_type ()))))))); |
1539 | geometry_changed = panel_struts_register_strut (toplevel, |
1540 | screen, |
1541 | toplevel->priv->monitor, |
1542 | orientation, |
1543 | strut, |
1544 | strut_start, |
1545 | strut_end, |
1546 | toplevel->priv->scale); |
1547 | } |
1548 | else { |
1549 | panel_struts_unregister_strut (toplevel); |
1550 | } |
1551 | |
1552 | if (toplevel->priv->state == PANEL_STATE_NORMAL || |
1553 | toplevel->priv->state == PANEL_STATE_AUTO_HIDDEN || |
1554 | toplevel->priv->animating) |
1555 | panel_struts_set_window_hint (toplevel); |
1556 | else |
1557 | panel_struts_unset_window_hint (toplevel); |
1558 | } |
1559 | #endif // HAVE_X11 |
1560 | |
1561 | #ifdef HAVE_WAYLAND |
1562 | if (CDK_IS_WAYLAND_DISPLAY (ctk_widget_get_display (CTK_WIDGET (toplevel)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), ((ctk_widget_get_type ()))))))))) { |
1563 | wayland_panel_toplevel_update_placement (toplevel); |
1564 | } |
1565 | #endif // HAVE_WAYLAND |
1566 | return geometry_changed; |
1567 | } |
1568 | |
1569 | void panel_toplevel_update_edges(PanelToplevel* toplevel) |
1570 | { |
1571 | CtkWidget *widget; |
1572 | PanelFrameEdge edges; |
1573 | PanelFrameEdge inner_edges; |
1574 | PanelFrameEdge outer_edges; |
1575 | CdkRectangle monitor_geom; |
1576 | int width, height; |
1577 | gboolean inner_frame = FALSE(0); |
1578 | |
1579 | widget = CTK_WIDGET (toplevel)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), ((ctk_widget_get_type ())))))); |
1580 | |
1581 | panel_toplevel_get_monitor_geometry (toplevel, &monitor_geom); |
1582 | |
1583 | width = toplevel->priv->geometry.width; |
1584 | height = toplevel->priv->geometry.height; |
1585 | |
1586 | edges = PANEL_EDGE_NONE; |
1587 | |
1588 | /* We don't want any bevels with a color/image background */ |
1589 | if (toplevel->priv->geometry.y > 0) |
1590 | edges |= PANEL_EDGE_TOP; |
1591 | |
1592 | if (toplevel->priv->geometry.x > 0) |
1593 | edges |= PANEL_EDGE_LEFT; |
1594 | |
1595 | if (toplevel->priv->geometry.y < (monitor_geom.height - height)) |
1596 | edges |= PANEL_EDGE_BOTTOM; |
1597 | |
1598 | if (toplevel->priv->geometry.x < (monitor_geom.width - width)) |
1599 | edges |= PANEL_EDGE_RIGHT; |
1600 | |
1601 | /* There is a conflict in the position algorithm when a |
1602 | * non-expanded centered panel is nearly the size of the |
1603 | * screen. This is similar to the one we have in |
1604 | * panel_toplevel_update_position(). A simple solution is |
1605 | * to keep the bevels in this case. */ |
1606 | if (!toplevel->priv->expand && |
1607 | toplevel->priv->orientation & PANEL_HORIZONTAL_MASK(PANEL_ORIENTATION_TOP | PANEL_ORIENTATION_BOTTOM) && |
1608 | toplevel->priv->x_centered) |
1609 | edges |= PANEL_EDGE_LEFT | PANEL_EDGE_RIGHT; |
1610 | |
1611 | if (!toplevel->priv->expand && |
1612 | toplevel->priv->orientation & PANEL_VERTICAL_MASK(PANEL_ORIENTATION_LEFT | PANEL_ORIENTATION_RIGHT) && |
1613 | toplevel->priv->y_centered) |
1614 | edges |= PANEL_EDGE_TOP | PANEL_EDGE_BOTTOM; |
1615 | |
1616 | if (ctk_widget_get_visible (toplevel->priv->hide_button_left) || |
1617 | ctk_widget_get_visible (toplevel->priv->hide_button_right)) { |
1618 | inner_frame = TRUE(!(0)); |
1619 | edges |= PANEL_EDGE_LEFT | PANEL_EDGE_RIGHT; |
1620 | } |
1621 | |
1622 | if (ctk_widget_get_visible (toplevel->priv->hide_button_top) || |
1623 | ctk_widget_get_visible (toplevel->priv->hide_button_bottom)) { |
1624 | inner_frame = TRUE(!(0)); |
1625 | edges |= PANEL_EDGE_TOP | PANEL_EDGE_BOTTOM; |
1626 | } |
1627 | |
1628 | if (!inner_frame) { |
1629 | inner_edges = PANEL_EDGE_NONE; |
1630 | outer_edges = edges; |
1631 | } else { |
1632 | inner_edges = edges; |
1633 | outer_edges = PANEL_EDGE_NONE; |
1634 | } |
1635 | |
1636 | panel_frame_set_edges (toplevel->priv->inner_frame, inner_edges); |
1637 | |
1638 | if (toplevel->priv->edges != outer_edges) { |
1639 | toplevel->priv->edges = outer_edges; |
1640 | ctk_widget_queue_resize (widget); |
1641 | } |
1642 | } |
1643 | |
1644 | static const char* panel_toplevel_construct_description(PanelToplevel *toplevel) |
1645 | { |
1646 | if (toplevel->priv->attached) |
1647 | return _("Drawer")gettext ("Drawer"); |
1648 | |
1649 | switch (toplevel->priv->orientation) { |
1650 | case PANEL_ORIENTATION_TOP: |
1651 | /* translators: these string will be shown in MetaCity's switch window |
1652 | * popup when you pass the focus to a panel */ |
1653 | return _("Top Panel")gettext ("Top Panel"); |
1654 | case PANEL_ORIENTATION_BOTTOM: |
1655 | return _("Bottom Panel")gettext ("Bottom Panel"); |
1656 | case PANEL_ORIENTATION_LEFT: |
1657 | return _("Left Panel")gettext ("Left Panel"); |
1658 | case PANEL_ORIENTATION_RIGHT: |
1659 | return _("Right Panel")gettext ("Right Panel"); |
1660 | } |
1661 | |
1662 | g_assert_not_reached ()do { g_assertion_message_expr (((gchar*) 0), "panel-toplevel.c" , 1662, ((const char*) (__func__)), ((void*)0)); } while (0); |
1663 | return _("Top Panel")gettext ("Top Panel"); |
1664 | } |
1665 | |
1666 | static void panel_toplevel_update_description(PanelToplevel* toplevel) |
1667 | { |
1668 | const char *description; |
1669 | |
1670 | description = panel_toplevel_construct_description (toplevel); |
1671 | |
1672 | if (toplevel->priv->description && |
1673 | !strcmp (toplevel->priv->description, description)) |
1674 | return; |
1675 | |
1676 | if (toplevel->priv->description) |
1677 | g_free (toplevel->priv->description); |
1678 | toplevel->priv->description = g_strdup (description)g_strdup_inline (description); |
1679 | |
1680 | if (!toplevel->priv->name) |
1681 | ctk_window_set_title (CTK_WINDOW (toplevel)((((CtkWindow*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), ((ctk_window_get_type ())))))), |
1682 | toplevel->priv->description); |
1683 | |
1684 | panel_a11y_set_atk_name_desc ( |
1685 | CTK_WIDGET (toplevel)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), ((ctk_widget_get_type ())))))), |
1686 | toplevel->priv->name ? toplevel->priv->name : |
1687 | toplevel->priv->description, |
1688 | toplevel->priv->description); |
1689 | } |
1690 | |
1691 | static void panel_toplevel_update_attached_position(PanelToplevel* toplevel, gboolean hidden, int* x, int* y, int* w, int* h) |
1692 | { |
1693 | CtkAllocation attach_allocation; |
1694 | PanelOrientation attach_orientation; |
1695 | CdkRectangle toplevel_box; |
1696 | CdkRectangle parent_box; |
1697 | CdkRectangle attach_box; |
1698 | int x_origin = 0, y_origin = 0; |
1699 | CdkRectangle monitor_geom; |
1700 | |
1701 | if (!ctk_widget_get_realized (CTK_WIDGET (toplevel->priv->attach_toplevel)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel->priv->attach_toplevel)), ((ctk_widget_get_type ()))))))) || |
1702 | !ctk_widget_get_realized (toplevel->priv->attach_widget)) |
1703 | return; |
1704 | |
1705 | ctk_widget_get_allocation (CTK_WIDGET (toplevel->priv->attach_widget)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel->priv->attach_widget)), ((ctk_widget_get_type ())))))), &attach_allocation); |
1706 | |
1707 | toplevel_box = toplevel->priv->geometry; |
1708 | parent_box = toplevel->priv->attach_toplevel->priv->geometry; |
1709 | attach_box = attach_allocation; |
1710 | |
1711 | if (attach_box.x != -1) { |
1712 | cdk_window_get_origin (ctk_widget_get_window (CTK_WIDGET (toplevel->priv->attach_widget)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel->priv->attach_widget)), ((ctk_widget_get_type ()))))))), |
1713 | &x_origin, &y_origin); |
1714 | |
1715 | attach_box.x += x_origin; |
1716 | attach_box.y += y_origin; |
1717 | } else { |
1718 | /* attach_widget isn't allocated. Put the toplevel |
1719 | * off screen. |
1720 | */ |
1721 | attach_box.x = -toplevel_box.width; |
1722 | attach_box.y = -toplevel_box.height; |
1723 | } |
1724 | |
1725 | attach_orientation = panel_toplevel_get_orientation ( |
1726 | toplevel->priv->attach_toplevel); |
1727 | |
1728 | if (attach_orientation & PANEL_HORIZONTAL_MASK(PANEL_ORIENTATION_TOP | PANEL_ORIENTATION_BOTTOM)) |
1729 | *x = attach_box.x + attach_box.width / 2 - toplevel_box.width / 2; |
1730 | else |
1731 | *y = attach_box.y + attach_box.height / 2 - toplevel_box.height / 2; |
1732 | |
1733 | switch (attach_orientation) { |
1734 | case PANEL_ORIENTATION_TOP: |
1735 | *y = parent_box.y; |
1736 | if (!hidden) |
1737 | *y += parent_box.height; |
1738 | else |
1739 | *h = parent_box.height; |
1740 | break; |
1741 | case PANEL_ORIENTATION_BOTTOM: |
1742 | *y = parent_box.y; |
1743 | if (!hidden) |
1744 | *y -= toplevel_box.height; |
1745 | else |
1746 | *h = parent_box.height; |
1747 | break; |
1748 | case PANEL_ORIENTATION_LEFT: |
1749 | *x = parent_box.x; |
1750 | if (!hidden) |
1751 | *x += parent_box.width; |
1752 | else |
1753 | *w = parent_box.width; |
1754 | break; |
1755 | case PANEL_ORIENTATION_RIGHT: |
1756 | *x = parent_box.x; |
1757 | if (!hidden) |
1758 | *x -= toplevel_box.width; |
1759 | else |
1760 | *w = parent_box.width; |
1761 | break; |
1762 | default: |
1763 | g_assert_not_reached ()do { g_assertion_message_expr (((gchar*) 0), "panel-toplevel.c" , 1763, ((const char*) (__func__)), ((void*)0)); } while (0); |
1764 | break; |
1765 | } |
1766 | |
1767 | panel_toplevel_get_monitor_geometry (toplevel, &monitor_geom); |
1768 | |
1769 | *x -= monitor_geom.x; |
1770 | *y -= monitor_geom.y; |
1771 | |
1772 | if (toplevel->priv->orientation & PANEL_VERTICAL_MASK(PANEL_ORIENTATION_LEFT | PANEL_ORIENTATION_RIGHT)) |
1773 | *x = CLAMP (*x, 0, monitor_geom.width - toplevel->priv->original_width)(((*x) > (monitor_geom.width - toplevel->priv->original_width )) ? (monitor_geom.width - toplevel->priv->original_width ) : (((*x) < (0)) ? (0) : (*x))); |
1774 | else |
1775 | *y = CLAMP (*y, 0, monitor_geom.height - toplevel->priv->original_height)(((*y) > (monitor_geom.height - toplevel->priv->original_height )) ? (monitor_geom.height - toplevel->priv->original_height ) : (((*y) < (0)) ? (0) : (*y))); |
1776 | } |
1777 | |
1778 | static void panel_toplevel_update_normal_position(PanelToplevel* toplevel, int* x, int* y, int* w, int* h) |
1779 | { |
1780 | CdkRectangle monitor_geom; |
1781 | int width, height; |
1782 | int snap_tolerance; |
1783 | |
1784 | g_assert (x != NULL && y != NULL)do { if (x != ((void*)0) && y != ((void*)0)) ; else g_assertion_message_expr (((gchar*) 0), "panel-toplevel.c", 1784, ((const char*) (__func__ )), "x != NULL && y != NULL"); } while (0); |
1785 | |
1786 | if (toplevel->priv->attached) { |
1787 | panel_toplevel_update_attached_position (toplevel, FALSE(0), x, y, w, h); |
1788 | return; |
1789 | } |
1790 | |
1791 | panel_toplevel_get_monitor_geometry (toplevel, &monitor_geom); |
1792 | |
1793 | width = toplevel->priv->original_width; |
1794 | height = toplevel->priv->original_height; |
1795 | snap_tolerance = toplevel->priv->snap_tolerance; |
1796 | |
1797 | *x = CLAMP (*x, 0, monitor_geom.width - width)(((*x) > (monitor_geom.width - width)) ? (monitor_geom.width - width) : (((*x) < (0)) ? (0) : (*x))); |
1798 | *y = CLAMP (*y, 0, monitor_geom.height - height)(((*y) > (monitor_geom.height - height)) ? (monitor_geom.height - height) : (((*y) < (0)) ? (0) : (*y))); |
1799 | |
1800 | if (toplevel->priv->x <= snap_tolerance && |
1801 | toplevel->priv->x_right == -1 && |
1802 | !toplevel->priv->x_centered) |
1803 | *x = 0; |
1804 | else if (toplevel->priv->x_right != -1 && |
1805 | toplevel->priv->x_right <= snap_tolerance && |
1806 | !toplevel->priv->x_centered) |
1807 | *x = monitor_geom.width - width; |
1808 | |
1809 | if (toplevel->priv->y <= snap_tolerance && |
1810 | toplevel->priv->y_bottom == -1 && |
1811 | !toplevel->priv->y_centered) |
1812 | *y = 0; |
1813 | else if (toplevel->priv->y_bottom != -1 && |
1814 | toplevel->priv->y_bottom <= snap_tolerance && |
1815 | !toplevel->priv->y_centered) |
1816 | *y = monitor_geom.height - height; |
1817 | } |
1818 | |
1819 | static void |
1820 | panel_toplevel_update_auto_hide_position (PanelToplevel *toplevel, |
1821 | int *x, |
1822 | int *y, |
1823 | int *w, |
1824 | int *h, |
1825 | gboolean for_end_position) |
1826 | { |
1827 | int width, height; |
1828 | CdkRectangle monitor_geom; |
1829 | int auto_hide_size; |
1830 | int snap_tolerance; |
1831 | |
1832 | g_assert (x != NULL && y != NULL)do { if (x != ((void*)0) && y != ((void*)0)) ; else g_assertion_message_expr (((gchar*) 0), "panel-toplevel.c", 1832, ((const char*) (__func__ )), "x != NULL && y != NULL"); } while (0); |
1833 | |
1834 | if (toplevel->priv->floating) { |
1835 | panel_toplevel_update_normal_position (toplevel, x, y, w, h); |
1836 | return; |
1837 | } |
1838 | |
1839 | panel_toplevel_get_monitor_geometry (toplevel, &monitor_geom); |
1840 | |
1841 | width = toplevel->priv->original_width; |
1842 | height = toplevel->priv->original_height; |
1843 | snap_tolerance = toplevel->priv->snap_tolerance; |
1844 | |
1845 | /* For the initial animation, we animate from outside the screen, and |
1846 | * so we don't want the toplevel to be visible at all. But when the |
1847 | * request is for the end position, then we give the real result (it's |
1848 | * useful for struts) */ |
1849 | if (for_end_position || toplevel->priv->initial_animation_done) { |
1850 | auto_hide_size = panel_toplevel_get_effective_auto_hide_size (toplevel); |
1851 | } else { |
1852 | auto_hide_size = 0; |
1853 | } |
1854 | |
1855 | switch (toplevel->priv->orientation) { |
1856 | case PANEL_ORIENTATION_TOP: |
1857 | *y = - (height - auto_hide_size); |
1858 | break; |
1859 | case PANEL_ORIENTATION_BOTTOM: |
1860 | *y = monitor_geom.height - auto_hide_size; |
1861 | break; |
1862 | case PANEL_ORIENTATION_LEFT: |
1863 | *x = - (width - auto_hide_size); |
1864 | break; |
1865 | case PANEL_ORIENTATION_RIGHT: |
1866 | *x = monitor_geom.width - auto_hide_size; |
1867 | break; |
1868 | default: |
1869 | g_assert_not_reached ()do { g_assertion_message_expr (((gchar*) 0), "panel-toplevel.c" , 1869, ((const char*) (__func__)), ((void*)0)); } while (0); |
1870 | break; |
1871 | } |
1872 | |
1873 | if (toplevel->priv->orientation & PANEL_HORIZONTAL_MASK(PANEL_ORIENTATION_TOP | PANEL_ORIENTATION_BOTTOM)) { |
1874 | if (toplevel->priv->x <= snap_tolerance && |
1875 | toplevel->priv->x_right == -1 && |
1876 | !toplevel->priv->x_centered) |
1877 | *x = 0; |
1878 | else if (toplevel->priv->x_right != -1 && |
1879 | toplevel->priv->x_right <= snap_tolerance && |
1880 | !toplevel->priv->x_centered) |
1881 | *x = monitor_geom.width - width; |
1882 | } else /* if (toplevel->priv->orientation & PANEL_VERTICAL_MASK) */ { |
1883 | if (toplevel->priv->y <= snap_tolerance && |
1884 | toplevel->priv->y_bottom == -1 && |
1885 | !toplevel->priv->y_centered) |
1886 | *y = 0; |
1887 | else if (toplevel->priv->y_bottom != -1 && |
1888 | toplevel->priv->y_bottom <= snap_tolerance && |
1889 | !toplevel->priv->y_centered) |
1890 | *y = monitor_geom.height - height; |
1891 | } |
1892 | } |
1893 | |
1894 | /* FIXME: this is wrong for Xinerama. In the Xinerama case |
1895 | * I think if hiding it requires it to go onto the |
1896 | * next monitor then it should just move it on to |
1897 | * the next monitor and set its state back to normal |
1898 | */ |
1899 | static void |
1900 | panel_toplevel_update_hidden_position (PanelToplevel *toplevel, |
1901 | int *x, |
1902 | int *y, |
1903 | int *w, |
1904 | int *h) |
1905 | { |
1906 | int width, height; |
1907 | int min_hide_size; |
1908 | CdkRectangle monitor_geom; |
1909 | CtkAllocation hide_allocation; |
1910 | |
1911 | g_assert (x != NULL && y != NULL)do { if (x != ((void*)0) && y != ((void*)0)) ; else g_assertion_message_expr (((gchar*) 0), "panel-toplevel.c", 1911, ((const char*) (__func__ )), "x != NULL && y != NULL"); } while (0); |
1912 | |
1913 | g_assert (toplevel->priv->state == PANEL_STATE_HIDDEN_UP ||do { if (toplevel->priv->state == PANEL_STATE_HIDDEN_UP || toplevel->priv->state == PANEL_STATE_HIDDEN_DOWN || toplevel->priv->state == PANEL_STATE_HIDDEN_LEFT || toplevel ->priv->state == PANEL_STATE_HIDDEN_RIGHT) ; else g_assertion_message_expr (((gchar*) 0), "panel-toplevel.c", 1916, ((const char*) (__func__ )), "toplevel->priv->state == PANEL_STATE_HIDDEN_UP || toplevel->priv->state == PANEL_STATE_HIDDEN_DOWN || toplevel->priv->state == PANEL_STATE_HIDDEN_LEFT || toplevel->priv->state == PANEL_STATE_HIDDEN_RIGHT" ); } while (0) |
1914 | toplevel->priv->state == PANEL_STATE_HIDDEN_DOWN ||do { if (toplevel->priv->state == PANEL_STATE_HIDDEN_UP || toplevel->priv->state == PANEL_STATE_HIDDEN_DOWN || toplevel->priv->state == PANEL_STATE_HIDDEN_LEFT || toplevel ->priv->state == PANEL_STATE_HIDDEN_RIGHT) ; else g_assertion_message_expr (((gchar*) 0), "panel-toplevel.c", 1916, ((const char*) (__func__ )), "toplevel->priv->state == PANEL_STATE_HIDDEN_UP || toplevel->priv->state == PANEL_STATE_HIDDEN_DOWN || toplevel->priv->state == PANEL_STATE_HIDDEN_LEFT || toplevel->priv->state == PANEL_STATE_HIDDEN_RIGHT" ); } while (0) |
1915 | toplevel->priv->state == PANEL_STATE_HIDDEN_LEFT ||do { if (toplevel->priv->state == PANEL_STATE_HIDDEN_UP || toplevel->priv->state == PANEL_STATE_HIDDEN_DOWN || toplevel->priv->state == PANEL_STATE_HIDDEN_LEFT || toplevel ->priv->state == PANEL_STATE_HIDDEN_RIGHT) ; else g_assertion_message_expr (((gchar*) 0), "panel-toplevel.c", 1916, ((const char*) (__func__ )), "toplevel->priv->state == PANEL_STATE_HIDDEN_UP || toplevel->priv->state == PANEL_STATE_HIDDEN_DOWN || toplevel->priv->state == PANEL_STATE_HIDDEN_LEFT || toplevel->priv->state == PANEL_STATE_HIDDEN_RIGHT" ); } while (0) |
1916 | toplevel->priv->state == PANEL_STATE_HIDDEN_RIGHT)do { if (toplevel->priv->state == PANEL_STATE_HIDDEN_UP || toplevel->priv->state == PANEL_STATE_HIDDEN_DOWN || toplevel->priv->state == PANEL_STATE_HIDDEN_LEFT || toplevel ->priv->state == PANEL_STATE_HIDDEN_RIGHT) ; else g_assertion_message_expr (((gchar*) 0), "panel-toplevel.c", 1916, ((const char*) (__func__ )), "toplevel->priv->state == PANEL_STATE_HIDDEN_UP || toplevel->priv->state == PANEL_STATE_HIDDEN_DOWN || toplevel->priv->state == PANEL_STATE_HIDDEN_LEFT || toplevel->priv->state == PANEL_STATE_HIDDEN_RIGHT" ); } while (0); |
1917 | |
1918 | if (toplevel->priv->attached) { |
1919 | panel_toplevel_update_attached_position (toplevel, TRUE(!(0)), x, y, w, h); |
1920 | return; |
1921 | } |
1922 | |
1923 | panel_toplevel_get_monitor_geometry (toplevel, &monitor_geom); |
1924 | |
1925 | width = toplevel->priv->original_width; |
1926 | height = toplevel->priv->original_height; |
1927 | |
1928 | //FIXME should find a better default |
1929 | min_hide_size = DEFAULT_AUTO_HIDE_SIZE1; |
1930 | |
1931 | switch (toplevel->priv->state) { |
1932 | case PANEL_STATE_HIDDEN_UP: |
1933 | ctk_widget_get_allocation (toplevel->priv->hide_button_bottom, |
1934 | &hide_allocation); |
1935 | *y = - (height - MAX (hide_allocation.height, min_hide_size)(((hide_allocation.height) > (min_hide_size)) ? (hide_allocation .height) : (min_hide_size))); |
1936 | break; |
1937 | case PANEL_STATE_HIDDEN_DOWN: |
1938 | ctk_widget_get_allocation (toplevel->priv->hide_button_top, |
1939 | &hide_allocation); |
1940 | *y = monitor_geom.height - MAX (hide_allocation.height, min_hide_size)(((hide_allocation.height) > (min_hide_size)) ? (hide_allocation .height) : (min_hide_size)); |
1941 | break; |
1942 | case PANEL_STATE_HIDDEN_LEFT: |
1943 | ctk_widget_get_allocation (toplevel->priv->hide_button_right, |
1944 | &hide_allocation); |
1945 | *x = - (width - MAX (hide_allocation.width, min_hide_size)(((hide_allocation.width) > (min_hide_size)) ? (hide_allocation .width) : (min_hide_size))); |
1946 | break; |
1947 | case PANEL_STATE_HIDDEN_RIGHT: |
1948 | ctk_widget_get_allocation (toplevel->priv->hide_button_left, |
1949 | &hide_allocation); |
1950 | *x = monitor_geom.width - MAX (hide_allocation.width, min_hide_size)(((hide_allocation.width) > (min_hide_size)) ? (hide_allocation .width) : (min_hide_size)); |
1951 | break; |
1952 | default: |
1953 | g_assert_not_reached ()do { g_assertion_message_expr (((gchar*) 0), "panel-toplevel.c" , 1953, ((const char*) (__func__)), ((void*)0)); } while (0); |
1954 | break; |
1955 | } |
1956 | } |
1957 | |
1958 | /* |
1959 | * This is "almost" like the double sine movement |
1960 | * from the original panel except that it uses |
1961 | * a cubic (twice again). I suppose it looks less |
1962 | * mathematical now :) -- _v_ |
1963 | */ |
1964 | static int |
1965 | get_delta (int src, |
1966 | int dest, |
1967 | GDateTime *start_time, |
1968 | GDateTime *end_time, |
1969 | GDateTime *cur_time) |
1970 | { |
1971 | double x, percentage; |
1972 | GTimeSpan n, d; |
1973 | |
1974 | n = g_date_time_difference (cur_time, start_time); |
1975 | d = g_date_time_difference (end_time, start_time); |
1976 | |
1977 | if (abs (dest - src) <= 1 || n >= d) |
1978 | return dest - src; |
1979 | |
1980 | /* The cubic is: p(x) = (-2) x^2 (x-1.5) */ |
1981 | /* running p(p(x)) to make it more "pronounced", |
1982 | * effectively making it a ninth-degree polynomial */ |
1983 | |
1984 | x = (double)n/d; |
1985 | x = -2 * (x*x) * (x-1.5); |
1986 | /* run it again */ |
1987 | percentage = -2 * (x*x) * (x-1.5); |
1988 | |
1989 | percentage = CLAMP (percentage, 0.0, 1.0)(((percentage) > (1.0)) ? (1.0) : (((percentage) < (0.0 )) ? (0.0) : (percentage))); |
1990 | |
1991 | return ((dest - src) * percentage); |
1992 | } |
1993 | |
1994 | static void |
1995 | panel_toplevel_update_animating_position (PanelToplevel *toplevel) |
1996 | { |
1997 | GDateTime *now; |
1998 | int deltax, deltay, deltaw = 0, deltah = 0; |
1999 | int monitor_offset_x, monitor_offset_y; |
2000 | |
2001 | if ((toplevel->priv->animation_start_time == NULL((void*)0)) || |
2002 | (toplevel->priv->animation_end_time == NULL((void*)0))) |
2003 | return; |
2004 | |
2005 | now = g_date_time_new_now_local (); |
2006 | |
2007 | monitor_offset_x = panel_multimonitor_x (toplevel->priv->monitor); |
2008 | monitor_offset_y = panel_multimonitor_y (toplevel->priv->monitor); |
2009 | |
2010 | if (toplevel->priv->animation_end_width != -1) |
2011 | deltaw = get_delta (toplevel->priv->geometry.width, |
2012 | toplevel->priv->animation_end_width, |
2013 | toplevel->priv->animation_start_time, |
2014 | toplevel->priv->animation_end_time, |
2015 | now); |
2016 | |
2017 | if (toplevel->priv->animation_end_height != -1) |
2018 | deltah = get_delta (toplevel->priv->geometry.height, |
2019 | toplevel->priv->animation_end_height, |
2020 | toplevel->priv->animation_start_time, |
2021 | toplevel->priv->animation_end_time, |
2022 | now); |
2023 | |
2024 | deltax = get_delta (toplevel->priv->geometry.x - monitor_offset_x, |
2025 | toplevel->priv->animation_end_x, |
2026 | toplevel->priv->animation_start_time, |
2027 | toplevel->priv->animation_end_time, |
2028 | now); |
2029 | |
2030 | deltay = get_delta (toplevel->priv->geometry.y - monitor_offset_y, |
2031 | toplevel->priv->animation_end_y, |
2032 | toplevel->priv->animation_start_time, |
2033 | toplevel->priv->animation_end_time, |
2034 | now); |
2035 | |
2036 | if (deltaw != 0 && abs (deltaw) > abs (deltax)) |
2037 | deltax = deltaw; |
2038 | if (deltah != 0 && abs (deltah) > abs (deltay)) |
2039 | deltay = deltah; |
2040 | |
2041 | toplevel->priv->geometry.x += deltax; |
2042 | toplevel->priv->geometry.y += deltay; |
2043 | |
2044 | toplevel->priv->geometry.width += deltaw; |
2045 | toplevel->priv->geometry.height += deltah; |
2046 | |
2047 | if (toplevel->priv->geometry.x - monitor_offset_x == toplevel->priv->animation_end_x && |
2048 | toplevel->priv->geometry.y - monitor_offset_y == toplevel->priv->animation_end_y) { |
2049 | toplevel->priv->animating = FALSE(0); |
2050 | /* Note: it's important to set initial_animation_done to TRUE |
2051 | * as soon as possible (hence, here) since we don't want to |
2052 | * have a wrong value in a size request event */ |
2053 | toplevel->priv->initial_animation_done = TRUE(!(0)); |
2054 | |
2055 | if (toplevel->priv->attached && panel_toplevel_get_is_hidden (toplevel)) |
2056 | ctk_widget_unmap (CTK_WIDGET (toplevel)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), ((ctk_widget_get_type ()))))))); |
2057 | else |
2058 | ctk_widget_queue_resize (CTK_WIDGET (toplevel)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), ((ctk_widget_get_type ()))))))); |
2059 | |
2060 | if (toplevel->priv->state == PANEL_STATE_NORMAL) |
2061 | g_signal_emit (toplevel, toplevel_signals [UNHIDE_SIGNAL], 0); |
2062 | } |
2063 | |
2064 | g_date_time_unref (now); |
2065 | } |
2066 | |
2067 | static void |
2068 | panel_toplevel_update_expanded_position (PanelToplevel *toplevel) |
2069 | { |
2070 | CdkRectangle monitor_geom; |
2071 | int x, y; |
2072 | int x_right, y_bottom; |
2073 | int monitor; |
2074 | |
2075 | if (!toplevel->priv->expand) |
2076 | return; |
2077 | |
2078 | panel_toplevel_get_monitor_geometry (toplevel, &monitor_geom); |
2079 | |
2080 | x = -1; |
2081 | y = -1; |
2082 | x_right = -1; |
2083 | y_bottom = -1; |
2084 | |
2085 | switch (toplevel->priv->orientation) { |
2086 | case PANEL_ORIENTATION_TOP: |
2087 | x = monitor_geom.x; |
2088 | y = monitor_geom.y; |
2089 | break; |
2090 | case PANEL_ORIENTATION_LEFT: |
2091 | x = monitor_geom.x; |
2092 | y = monitor_geom.y; |
2093 | break; |
2094 | case PANEL_ORIENTATION_BOTTOM: |
2095 | x = monitor_geom.x; |
2096 | y = monitor_geom.y + monitor_geom.height - toplevel->priv->geometry.height; |
2097 | y_bottom = 0; |
2098 | break; |
2099 | case PANEL_ORIENTATION_RIGHT: |
2100 | x = monitor_geom.x + monitor_geom.width - toplevel->priv->geometry.width; |
2101 | y = monitor_geom.y; |
2102 | x_right = 0; |
2103 | break; |
2104 | default: |
2105 | g_assert_not_reached ()do { g_assertion_message_expr (((gchar*) 0), "panel-toplevel.c" , 2105, ((const char*) (__func__)), ((void*)0)); } while (0); |
2106 | break; |
2107 | } |
2108 | |
2109 | monitor = panel_multimonitor_get_monitor_at_point (x, y); |
2110 | |
2111 | panel_toplevel_set_monitor_internal (toplevel, monitor, TRUE(!(0))); |
2112 | |
2113 | x -= panel_multimonitor_x (monitor); |
2114 | y -= panel_multimonitor_y (monitor); |
2115 | |
2116 | g_object_freeze_notify (G_OBJECT (toplevel)((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), (((GType) ((20) << (2))))))))); |
2117 | |
2118 | if (toplevel->priv->x != x) { |
2119 | toplevel->priv->x = x; |
2120 | g_object_notify (G_OBJECT (toplevel)((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), (((GType) ((20) << (2)))))))), "x"); |
2121 | } |
2122 | |
2123 | if (toplevel->priv->y != y) { |
2124 | toplevel->priv->y = y; |
2125 | g_object_notify (G_OBJECT (toplevel)((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), (((GType) ((20) << (2)))))))), "y"); |
2126 | } |
2127 | |
2128 | if (toplevel->priv->x_right != x_right) { |
2129 | toplevel->priv->x_right = x_right; |
2130 | g_object_notify (G_OBJECT (toplevel)((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), (((GType) ((20) << (2)))))))), "x_right"); |
2131 | } |
2132 | |
2133 | if (toplevel->priv->y_bottom != y_bottom) { |
2134 | toplevel->priv->y_bottom = y_bottom; |
2135 | g_object_notify (G_OBJECT (toplevel)((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), (((GType) ((20) << (2)))))))), "y_bottom"); |
2136 | } |
2137 | |
2138 | g_object_thaw_notify (G_OBJECT (toplevel)((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), (((GType) ((20) << (2))))))))); |
2139 | } |
2140 | |
2141 | static void |
2142 | panel_toplevel_update_position (PanelToplevel *toplevel) |
2143 | { |
2144 | PanelBackground *background; |
2145 | int x, y; |
2146 | int w, h; |
2147 | CdkRectangle monitor_geom; |
2148 | |
2149 | panel_toplevel_get_monitor_geometry (toplevel, &monitor_geom); |
2150 | |
2151 | if (toplevel->priv->animating) { |
2152 | panel_toplevel_update_animating_position (toplevel); |
2153 | return; |
2154 | } |
2155 | |
2156 | if (toplevel->priv->position_centered) { |
2157 | toplevel->priv->position_centered = FALSE(0); |
2158 | |
2159 | g_object_freeze_notify (G_OBJECT (toplevel)((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), (((GType) ((20) << (2))))))))); |
2160 | |
2161 | if (!toplevel->priv->x_centered) { |
2162 | int x_right; |
2163 | |
2164 | toplevel->priv->x -= toplevel->priv->geometry.width / 2; |
2165 | g_object_notify (G_OBJECT (toplevel)((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), (((GType) ((20) << (2)))))))), "x"); |
2166 | |
2167 | if ((toplevel->priv->x + toplevel->priv->geometry.width / 2) > monitor_geom.width / 2) |
2168 | x_right = monitor_geom.width - (toplevel->priv->x + toplevel->priv->geometry.width); |
2169 | else |
2170 | x_right = -1; |
2171 | if (toplevel->priv->x_right != x_right) { |
2172 | toplevel->priv->x_right = x_right; |
2173 | g_object_notify (G_OBJECT (toplevel)((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), (((GType) ((20) << (2)))))))), |
2174 | "x-right"); |
2175 | } |
2176 | } |
2177 | |
2178 | if (!toplevel->priv->y_centered) { |
2179 | int y_bottom; |
2180 | |
2181 | toplevel->priv->y -= toplevel->priv->geometry.height / 2; |
2182 | g_object_notify (G_OBJECT (toplevel)((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), (((GType) ((20) << (2)))))))), "y"); |
2183 | |
2184 | if ((toplevel->priv->y + toplevel->priv->geometry.height / 2) > monitor_geom.height / 2) |
2185 | y_bottom = monitor_geom.height - (toplevel->priv->y + toplevel->priv->geometry.height); |
2186 | else |
2187 | y_bottom = -1; |
2188 | if (toplevel->priv->y_bottom != y_bottom) { |
2189 | toplevel->priv->y_bottom = y_bottom; |
2190 | g_object_notify (G_OBJECT (toplevel)((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), (((GType) ((20) << (2)))))))), |
2191 | "y-bottom"); |
2192 | } |
2193 | } |
2194 | |
2195 | g_object_thaw_notify (G_OBJECT (toplevel)((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), (((GType) ((20) << (2))))))))); |
2196 | } |
2197 | |
2198 | panel_toplevel_update_expanded_position (toplevel); |
2199 | panel_toplevel_calc_floating (toplevel); //FIXME should probably be done after panel_toplevel_update_normal_position() too |
2200 | |
2201 | if (toplevel->priv->x_right == -1) |
2202 | x = toplevel->priv->x; |
2203 | else |
2204 | x = monitor_geom.width - (toplevel->priv->x_right + toplevel->priv->geometry.width); |
2205 | if (toplevel->priv->y_bottom == -1) |
2206 | y = toplevel->priv->y; |
2207 | else |
2208 | y = monitor_geom.height - (toplevel->priv->y_bottom + toplevel->priv->geometry.height); |
2209 | |
2210 | if (!toplevel->priv->expand) { |
2211 | if (toplevel->priv->x_centered) |
2212 | x = (monitor_geom.width - toplevel->priv->geometry.width) / 2; |
2213 | if (toplevel->priv->y_centered) |
2214 | y = (monitor_geom.height - toplevel->priv->geometry.height) / 2; |
2215 | } |
2216 | |
2217 | w = h = -1; |
2218 | |
2219 | if (toplevel->priv->state == PANEL_STATE_NORMAL) |
2220 | panel_toplevel_update_normal_position (toplevel, &x, &y, &w, &h); |
2221 | |
2222 | else if (toplevel->priv->state == PANEL_STATE_AUTO_HIDDEN) |
2223 | panel_toplevel_update_auto_hide_position (toplevel, &x, &y, &w, &h, FALSE(0)); |
2224 | |
2225 | else |
2226 | panel_toplevel_update_hidden_position (toplevel, &x, &y, &w, &h); |
2227 | |
2228 | if (w != -1) |
2229 | toplevel->priv->geometry.width = w; |
2230 | if (h != -1) |
2231 | toplevel->priv->geometry.height = h; |
2232 | |
2233 | /* This is some kind of snap: there's a possibility of an infinite loop |
2234 | * because of the bevels of the frame that are set in |
2235 | * panel_toplevel_update_edges(). The bevels change the width/height of |
2236 | * the toplevel. The typical loop is: |
2237 | * x = 1 => outer bevel => x = 0 => no outer bevel = > x = 1 => ... |
2238 | * FIXME: maybe the real bug is that we enter into this loop (see bug |
2239 | * #160748 to learn how to reproduce.) */ |
2240 | background = &toplevel->background; |
2241 | |
2242 | /* There's no bevels with a color/image background */ |
2243 | if (panel_background_effective_type (background) == PANEL_BACK_NONE) { |
2244 | CtkStyleContext *context; |
2245 | CtkStateFlags state; |
2246 | CdkRectangle *geometry; |
2247 | CtkBorder padding; |
2248 | int max_size; |
2249 | |
2250 | state = ctk_widget_get_state_flags (CTK_WIDGET (toplevel->priv->inner_frame)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel->priv->inner_frame)), ((ctk_widget_get_type ()))))))); |
2251 | context = ctk_widget_get_style_context (CTK_WIDGET (toplevel->priv->inner_frame)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel->priv->inner_frame)), ((ctk_widget_get_type ()))))))); |
2252 | ctk_style_context_get_padding (context, state, &padding); |
2253 | geometry = &toplevel->priv->geometry; |
2254 | |
2255 | if (x <= padding.left && x > 0 && |
2256 | !toplevel->priv->x_centered) |
2257 | x = 0; |
2258 | |
2259 | if (y <= padding.top && y > 0 && |
2260 | !toplevel->priv->y_centered) |
2261 | y = 0; |
2262 | |
2263 | max_size = monitor_geom.width - geometry->width - padding.right; |
2264 | if (x + padding.left >= max_size && x < max_size && |
2265 | !toplevel->priv->x_centered) |
2266 | x = max_size; |
2267 | |
2268 | max_size = monitor_geom.height - geometry->height - padding.bottom; |
2269 | if (y + padding.top >= max_size && y < max_size && |
2270 | !toplevel->priv->y_centered) |
2271 | y = max_size; |
2272 | } |
2273 | |
2274 | x += panel_multimonitor_x (toplevel->priv->monitor); |
2275 | y += panel_multimonitor_y (toplevel->priv->monitor); |
2276 | |
2277 | toplevel->priv->geometry.x = x; |
2278 | toplevel->priv->geometry.y = y; |
2279 | } |
2280 | |
2281 | static int |
2282 | calculate_minimum_height (CtkWidget *widget, |
2283 | PanelOrientation orientation) |
2284 | { |
2285 | CtkStateFlags state; |
2286 | CtkStyleContext *style_context; |
2287 | PangoFontDescription *font_desc; |
2288 | CtkBorder padding; |
2289 | PangoContext *pango_context; |
2290 | PangoFontMetrics *metrics; |
2291 | int ascent; |
2292 | int descent; |
2293 | int thickness; |
2294 | |
2295 | state = ctk_widget_get_state_flags (widget); |
2296 | style_context = ctk_widget_get_style_context (widget); |
2297 | ctk_style_context_get(style_context, state, CTK_STYLE_PROPERTY_FONT"font", &font_desc, NULL((void*)0)); |
2298 | |
2299 | pango_context = ctk_widget_get_pango_context (widget); |
2300 | metrics = pango_context_get_metrics (pango_context, |
2301 | font_desc, |
2302 | pango_context_get_language (pango_context)); |
2303 | ctk_style_context_get_padding (style_context, state, &padding); |
2304 | |
2305 | ascent = pango_font_metrics_get_ascent (metrics); |
2306 | descent = pango_font_metrics_get_descent (metrics); |
2307 | |
2308 | pango_font_description_free (font_desc); |
2309 | pango_font_metrics_unref (metrics); |
2310 | |
2311 | thickness = (orientation & PANEL_HORIZONTAL_MASK(PANEL_ORIENTATION_TOP | PANEL_ORIENTATION_BOTTOM)) ? |
2312 | padding.top + padding.bottom : |
2313 | padding.left + padding.right; |
2314 | |
2315 | return PANGO_PIXELS (ascent + descent)(((int)(ascent + descent) + 512) >> 10) + thickness; |
2316 | } |
2317 | |
2318 | static int |
2319 | panel_toplevel_update_size_from_hints (PanelToplevel *toplevel, |
2320 | int requisition_size, |
2321 | int monitor_size, |
2322 | int non_panel_widget_size) |
2323 | { |
2324 | int nb_size_hints; |
2325 | AppletSizeHints *applets_hints; |
2326 | AppletSizeHintsAlloc *using_hint; |
2327 | |
2328 | int i; |
2329 | int total_size; |
2330 | int full_hints; |
2331 | |
2332 | /* Scale down the size so that the panel only takes what it needs for the applets it has. */ |
2333 | total_size = non_panel_widget_size + (requisition_size / toplevel->priv->scale); |
2334 | |
2335 | nb_size_hints = toplevel->priv->panel_widget->nb_applets_size_hints; |
2336 | if (nb_size_hints <= 0) |
2337 | return total_size; |
2338 | |
2339 | applets_hints = toplevel->priv->panel_widget->applets_hints; |
2340 | using_hint = toplevel->priv->panel_widget->applets_using_hint; |
2341 | |
2342 | for (i = 0; i < nb_size_hints; i++) { |
2343 | using_hint[i].index = applets_hints[i].len - 2; |
2344 | using_hint[i].size = applets_hints[i].hints[applets_hints[i].len - 1]; |
2345 | total_size += using_hint[i].size; |
2346 | } |
2347 | |
2348 | if (total_size > monitor_size) |
2349 | return monitor_size; |
2350 | |
2351 | full_hints = 0; |
2352 | while (full_hints != nb_size_hints && total_size < monitor_size) { |
2353 | int bonus; |
2354 | int extra_bonus; |
2355 | |
2356 | bonus = (monitor_size - total_size) |
2357 | / (nb_size_hints - full_hints); |
2358 | extra_bonus = (monitor_size - total_size) |
2359 | % (nb_size_hints - full_hints); |
2360 | full_hints = 0; |
2361 | |
2362 | for (i = 0; i < nb_size_hints; i++) { |
2363 | int new_size; |
2364 | int current_bonus; |
2365 | |
2366 | current_bonus = bonus; |
2367 | |
2368 | while (using_hint[i].index > 0 && applets_hints[i].hints[using_hint[i].index - 1] < using_hint[i].size + current_bonus) { |
2369 | new_size = applets_hints[i].hints[using_hint[i].index - 1]; |
2370 | current_bonus = using_hint[i].size |
2371 | + current_bonus - new_size; |
2372 | total_size = total_size - using_hint[i].size |
2373 | + new_size; |
2374 | |
2375 | using_hint[i].index -= 2; |
2376 | using_hint[i].size = new_size; |
2377 | } |
2378 | |
2379 | new_size = MIN (applets_hints[i].hints[using_hint[i].index],(((applets_hints[i].hints[using_hint[i].index]) < (using_hint [i].size + current_bonus)) ? (applets_hints[i].hints[using_hint [i].index]) : (using_hint[i].size + current_bonus)) |
2380 | using_hint[i].size + current_bonus)(((applets_hints[i].hints[using_hint[i].index]) < (using_hint [i].size + current_bonus)) ? (applets_hints[i].hints[using_hint [i].index]) : (using_hint[i].size + current_bonus)); |
2381 | if (new_size > using_hint[i].size) { |
2382 | total_size += (new_size - using_hint[i].size); |
2383 | using_hint[i].size = new_size; |
2384 | } |
2385 | |
2386 | if (extra_bonus > 0) { |
2387 | new_size = MIN (applets_hints[i].hints[using_hint[i].index],(((applets_hints[i].hints[using_hint[i].index]) < (using_hint [i].size + extra_bonus)) ? (applets_hints[i].hints[using_hint [i].index]) : (using_hint[i].size + extra_bonus)) |
2388 | using_hint[i].size + extra_bonus)(((applets_hints[i].hints[using_hint[i].index]) < (using_hint [i].size + extra_bonus)) ? (applets_hints[i].hints[using_hint [i].index]) : (using_hint[i].size + extra_bonus)); |
2389 | if (new_size > using_hint[i].size) { |
2390 | total_size += (new_size |
2391 | - using_hint[i].size); |
2392 | extra_bonus -= (new_size |
2393 | - using_hint[i].size); |
2394 | using_hint[i].size = new_size; |
2395 | } |
2396 | } |
2397 | |
2398 | if (using_hint[i].size == applets_hints[i].hints[using_hint[i].index]) |
2399 | full_hints++; |
2400 | } |
2401 | } |
2402 | |
2403 | return total_size; |
2404 | } |
2405 | |
2406 | static void |
2407 | panel_toplevel_update_size (PanelToplevel *toplevel, |
2408 | CtkRequisition *requisition) |
2409 | { |
2410 | CtkWidget *widget; |
2411 | CtkStyleContext *context; |
2412 | CtkStateFlags state; |
2413 | CtkBorder padding; |
2414 | CdkRectangle monitor_geom; |
2415 | int width, height; |
2416 | int minimum_height; |
2417 | int non_panel_widget_size; |
2418 | |
2419 | if (toplevel->priv->animating) |
2420 | return; |
2421 | |
2422 | widget = CTK_WIDGET (toplevel)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), ((ctk_widget_get_type ())))))); |
2423 | context = ctk_widget_get_style_context (widget); |
2424 | state = ctk_widget_get_state_flags (widget); |
2425 | ctk_style_context_get_padding (context, state, &padding); |
2426 | |
2427 | panel_toplevel_get_monitor_geometry (toplevel, &monitor_geom); |
2428 | |
2429 | width = requisition->width; |
2430 | height = requisition->height; |
2431 | |
2432 | if (!toplevel->priv->expand && |
2433 | !toplevel->priv->buttons_enabled && !toplevel->priv->attached) |
2434 | non_panel_widget_size = 2 * HANDLE_SIZE10; |
2435 | else |
2436 | non_panel_widget_size = 0; |
2437 | |
2438 | minimum_height = calculate_minimum_height (CTK_WIDGET (toplevel)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), ((ctk_widget_get_type ())))))), |
2439 | toplevel->priv->orientation); |
2440 | |
2441 | if (toplevel->priv->orientation & PANEL_HORIZONTAL_MASK(PANEL_ORIENTATION_TOP | PANEL_ORIENTATION_BOTTOM)) { |
2442 | |
2443 | height = MAX (MIN (MAX (height, toplevel->priv->size),(((((((((height) > (toplevel->priv->size)) ? (height ) : (toplevel->priv->size))) < (panel_toplevel_get_maximum_size (toplevel))) ? ((((height) > (toplevel->priv->size) ) ? (height) : (toplevel->priv->size))) : (panel_toplevel_get_maximum_size (toplevel)))) > (minimum_height)) ? (((((((height) > ( toplevel->priv->size)) ? (height) : (toplevel->priv-> size))) < (panel_toplevel_get_maximum_size (toplevel))) ? ( (((height) > (toplevel->priv->size)) ? (height) : (toplevel ->priv->size))) : (panel_toplevel_get_maximum_size (toplevel )))) : (minimum_height)) |
2444 | panel_toplevel_get_maximum_size (toplevel)),(((((((((height) > (toplevel->priv->size)) ? (height ) : (toplevel->priv->size))) < (panel_toplevel_get_maximum_size (toplevel))) ? ((((height) > (toplevel->priv->size) ) ? (height) : (toplevel->priv->size))) : (panel_toplevel_get_maximum_size (toplevel)))) > (minimum_height)) ? (((((((height) > ( toplevel->priv->size)) ? (height) : (toplevel->priv-> size))) < (panel_toplevel_get_maximum_size (toplevel))) ? ( (((height) > (toplevel->priv->size)) ? (height) : (toplevel ->priv->size))) : (panel_toplevel_get_maximum_size (toplevel )))) : (minimum_height)) |
2445 | minimum_height)(((((((((height) > (toplevel->priv->size)) ? (height ) : (toplevel->priv->size))) < (panel_toplevel_get_maximum_size (toplevel))) ? ((((height) > (toplevel->priv->size) ) ? (height) : (toplevel->priv->size))) : (panel_toplevel_get_maximum_size (toplevel)))) > (minimum_height)) ? (((((((height) > ( toplevel->priv->size)) ? (height) : (toplevel->priv-> size))) < (panel_toplevel_get_maximum_size (toplevel))) ? ( (((height) > (toplevel->priv->size)) ? (height) : (toplevel ->priv->size))) : (panel_toplevel_get_maximum_size (toplevel )))) : (minimum_height)); |
2446 | |
2447 | if (toplevel->priv->expand) |
2448 | width = monitor_geom.width; |
2449 | else { |
2450 | int max_width; |
2451 | |
2452 | if (!toplevel->priv->attached) |
2453 | max_width = monitor_geom.width; |
2454 | else { |
2455 | if (panel_toplevel_get_orientation (toplevel->priv->attach_toplevel) == PANEL_ORIENTATION_LEFT) |
2456 | max_width = monitor_geom.width |
2457 | - toplevel->priv->geometry.x; |
2458 | else |
2459 | max_width = toplevel->priv->geometry.x + |
2460 | toplevel->priv->geometry.width; |
2461 | } |
2462 | |
2463 | width = panel_toplevel_update_size_from_hints ( |
2464 | toplevel, |
2465 | requisition->width, |
2466 | max_width, |
2467 | non_panel_widget_size); |
2468 | } |
2469 | |
2470 | width = MAX (MINIMUM_WIDTH, width)(((100) > (width)) ? (100) : (width)); |
2471 | } else { |
2472 | width = MAX (MIN (MAX (width, toplevel->priv->size),(((((((((width) > (toplevel->priv->size)) ? (width) : (toplevel->priv->size))) < (panel_toplevel_get_maximum_size (toplevel))) ? ((((width) > (toplevel->priv->size)) ? (width) : (toplevel->priv->size))) : (panel_toplevel_get_maximum_size (toplevel)))) > (minimum_height)) ? (((((((width) > (toplevel ->priv->size)) ? (width) : (toplevel->priv->size) )) < (panel_toplevel_get_maximum_size (toplevel))) ? ((((width ) > (toplevel->priv->size)) ? (width) : (toplevel-> priv->size))) : (panel_toplevel_get_maximum_size (toplevel )))) : (minimum_height)) |
2473 | panel_toplevel_get_maximum_size (toplevel)),(((((((((width) > (toplevel->priv->size)) ? (width) : (toplevel->priv->size))) < (panel_toplevel_get_maximum_size (toplevel))) ? ((((width) > (toplevel->priv->size)) ? (width) : (toplevel->priv->size))) : (panel_toplevel_get_maximum_size (toplevel)))) > (minimum_height)) ? (((((((width) > (toplevel ->priv->size)) ? (width) : (toplevel->priv->size) )) < (panel_toplevel_get_maximum_size (toplevel))) ? ((((width ) > (toplevel->priv->size)) ? (width) : (toplevel-> priv->size))) : (panel_toplevel_get_maximum_size (toplevel )))) : (minimum_height)) |
2474 | minimum_height)(((((((((width) > (toplevel->priv->size)) ? (width) : (toplevel->priv->size))) < (panel_toplevel_get_maximum_size (toplevel))) ? ((((width) > (toplevel->priv->size)) ? (width) : (toplevel->priv->size))) : (panel_toplevel_get_maximum_size (toplevel)))) > (minimum_height)) ? (((((((width) > (toplevel ->priv->size)) ? (width) : (toplevel->priv->size) )) < (panel_toplevel_get_maximum_size (toplevel))) ? ((((width ) > (toplevel->priv->size)) ? (width) : (toplevel-> priv->size))) : (panel_toplevel_get_maximum_size (toplevel )))) : (minimum_height)); |
2475 | |
2476 | if (toplevel->priv->expand) |
2477 | height = monitor_geom.height; |
2478 | else { |
2479 | int max_height; |
2480 | |
2481 | if (!toplevel->priv->attached) |
2482 | max_height = monitor_geom.height; |
2483 | else { |
2484 | if (panel_toplevel_get_orientation (toplevel->priv->attach_toplevel) == PANEL_ORIENTATION_TOP) |
2485 | max_height = monitor_geom.height |
2486 | - toplevel->priv->geometry.y; |
2487 | else |
2488 | max_height = toplevel->priv->geometry.y + |
2489 | toplevel->priv->geometry.height; |
2490 | } |
2491 | |
2492 | height = panel_toplevel_update_size_from_hints ( |
2493 | toplevel, |
2494 | requisition->height, |
2495 | max_height, |
2496 | non_panel_widget_size); |
2497 | } |
2498 | |
2499 | height = MAX (MINIMUM_WIDTH, height)(((100) > (height)) ? (100) : (height)); |
2500 | } |
2501 | |
2502 | if (toplevel->priv->edges & PANEL_EDGE_TOP) |
2503 | height += padding.top; |
2504 | if (toplevel->priv->edges & PANEL_EDGE_BOTTOM) |
2505 | height += padding.bottom; |
2506 | if (toplevel->priv->edges & PANEL_EDGE_LEFT) |
2507 | width += padding.left; |
2508 | if (toplevel->priv->edges & PANEL_EDGE_RIGHT) |
2509 | width += padding.right; |
2510 | |
2511 | toplevel->priv->geometry.width = CLAMP (width, 0, monitor_geom.width)(((width) > (monitor_geom.width)) ? (monitor_geom.width) : (((width) < (0)) ? (0) : (width))); |
2512 | toplevel->priv->geometry.height = CLAMP (height, 0, monitor_geom.height)(((height) > (monitor_geom.height)) ? (monitor_geom.height ) : (((height) < (0)) ? (0) : (height))); |
2513 | toplevel->priv->original_width = toplevel->priv->geometry.width; |
2514 | toplevel->priv->original_height = toplevel->priv->geometry.height; |
2515 | } |
2516 | |
2517 | static void |
2518 | panel_toplevel_update_geometry (PanelToplevel *toplevel, |
2519 | CtkRequisition *requisition) |
2520 | { |
2521 | toplevel->priv->updated_geometry_initial = TRUE(!(0)); |
2522 | panel_toplevel_update_size (toplevel, requisition); |
2523 | panel_toplevel_update_position (toplevel); |
2524 | |
2525 | panel_toplevel_update_struts (toplevel, FALSE(0)); |
2526 | |
2527 | #ifdef HAVE_X111 |
2528 | if (CDK_IS_X11_DISPLAY (ctk_widget_get_display (CTK_WIDGET (toplevel)))(((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) ( (ctk_widget_get_display (((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance*) ((toplevel)), ((ctk_widget_get_type ())))) ))))); GType __t = ((cdk_x11_display_get_type())); gboolean __r ; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; }))))) { |
2529 | if (toplevel->priv->state == PANEL_STATE_NORMAL || |
2530 | toplevel->priv->state == PANEL_STATE_AUTO_HIDDEN) { |
2531 | panel_struts_update_toplevel_geometry (toplevel, |
2532 | &toplevel->priv->geometry.x, |
2533 | &toplevel->priv->geometry.y, |
2534 | &toplevel->priv->geometry.width, |
2535 | &toplevel->priv->geometry.height); |
2536 | } else { |
2537 | panel_struts_update_toplevel_geometry (toplevel, |
2538 | &toplevel->priv->geometry.x, |
2539 | &toplevel->priv->geometry.y, |
2540 | NULL((void*)0), NULL((void*)0)); |
2541 | } |
2542 | } |
2543 | #endif // HAVE_X11 |
2544 | |
2545 | panel_toplevel_update_edges (toplevel); |
2546 | panel_toplevel_update_description (toplevel); |
2547 | } |
2548 | |
2549 | static void |
2550 | panel_toplevel_attach_widget_destroyed (PanelToplevel *toplevel) |
2551 | { |
2552 | panel_toplevel_detach (toplevel); |
2553 | } |
2554 | |
2555 | static gboolean |
2556 | panel_toplevel_attach_widget_configure (PanelToplevel *toplevel) |
2557 | { |
2558 | ctk_widget_queue_resize (CTK_WIDGET (toplevel)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), ((ctk_widget_get_type ()))))))); |
2559 | |
2560 | return FALSE(0); |
2561 | } |
2562 | |
2563 | static void |
2564 | panel_toplevel_update_attach_orientation (PanelToplevel *toplevel) |
2565 | { |
2566 | PanelOrientation attach_orientation; |
2567 | PanelOrientation orientation; |
2568 | |
2569 | attach_orientation = |
2570 | panel_toplevel_get_orientation (toplevel->priv->attach_toplevel); |
2571 | |
2572 | orientation = toplevel->priv->orientation; |
Value stored to 'orientation' is never read | |
2573 | |
2574 | switch (attach_orientation) { |
2575 | case PANEL_ORIENTATION_TOP: |
2576 | orientation = PANEL_ORIENTATION_LEFT; |
2577 | break; |
2578 | case PANEL_ORIENTATION_BOTTOM: |
2579 | orientation = PANEL_ORIENTATION_RIGHT; |
2580 | break; |
2581 | case PANEL_ORIENTATION_LEFT: |
2582 | orientation = PANEL_ORIENTATION_TOP; |
2583 | break; |
2584 | case PANEL_ORIENTATION_RIGHT: |
2585 | orientation = PANEL_ORIENTATION_BOTTOM; |
2586 | break; |
2587 | default: |
2588 | g_assert_not_reached ()do { g_assertion_message_expr (((gchar*) 0), "panel-toplevel.c" , 2588, ((const char*) (__func__)), ((void*)0)); } while (0); |
2589 | break; |
2590 | } |
2591 | |
2592 | panel_toplevel_set_orientation (toplevel, orientation); |
2593 | } |
2594 | |
2595 | static void |
2596 | panel_toplevel_attach_widget_parent_set (PanelToplevel *toplevel, |
2597 | CtkWidget *previous_parent G_GNUC_UNUSED__attribute__ ((__unused__)), |
2598 | CtkWidget *attach_widget) |
2599 | { |
2600 | CtkWidget *panel_widget; |
2601 | |
2602 | panel_widget = ctk_widget_get_parent (CTK_WIDGET (attach_widget)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((attach_widget)), ((ctk_widget_get_type ()))))))); |
2603 | if (!panel_widget) |
2604 | return; |
2605 | |
2606 | g_assert (PANEL_IS_WIDGET (panel_widget))do { if ((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((panel_widget)); GType __t = ((panel_widget_get_type())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0) ); else __r = g_type_check_instance_is_a (__inst, __t); __r; } ))))) ; else g_assertion_message_expr (((gchar*) 0), "panel-toplevel.c" , 2606, ((const char*) (__func__)), "PANEL_IS_WIDGET (panel_widget)" ); } while (0); |
2607 | |
2608 | toplevel->priv->attach_toplevel = PANEL_WIDGET (panel_widget)((((PanelWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((panel_widget)), ((panel_widget_get_type()))))))->toplevel; |
2609 | panel_toplevel_update_attach_orientation (toplevel); |
2610 | ctk_widget_queue_resize (CTK_WIDGET (toplevel)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), ((ctk_widget_get_type ()))))))); |
2611 | } |
2612 | |
2613 | static void |
2614 | panel_toplevel_attach_toplevel_hiding (PanelToplevel *toplevel) |
2615 | { |
2616 | if (!panel_toplevel_get_is_hidden (toplevel)) { |
2617 | panel_toplevel_hide (toplevel, FALSE(0), -1); |
2618 | |
2619 | toplevel->priv->attach_hidden = TRUE(!(0)); |
2620 | } |
2621 | } |
2622 | |
2623 | static void |
2624 | panel_toplevel_attach_toplevel_unhiding (PanelToplevel *toplevel) |
2625 | { |
2626 | if (!toplevel->priv->attach_hidden) |
2627 | return; |
2628 | |
2629 | toplevel->priv->attach_hidden = FALSE(0); |
2630 | |
2631 | panel_toplevel_unhide (toplevel); |
2632 | } |
2633 | |
2634 | static void |
2635 | panel_toplevel_reverse_arrow (PanelToplevel *toplevel G_GNUC_UNUSED__attribute__ ((__unused__)), |
2636 | CtkWidget *button) |
2637 | { |
2638 | CtkArrowType arrow_type; |
2639 | |
2640 | arrow_type = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (button), "arrow-type"))((gint) (glong) (g_object_get_data (((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance*) ((button)), (((GType) ((20) << (2))) ))))), "arrow-type"))); |
2641 | |
2642 | switch (arrow_type) { |
2643 | case CTK_ARROW_UP: |
2644 | arrow_type = CTK_ARROW_DOWN; |
2645 | break; |
2646 | case CTK_ARROW_DOWN: |
2647 | arrow_type = CTK_ARROW_UP; |
2648 | break; |
2649 | case CTK_ARROW_LEFT: |
2650 | arrow_type = CTK_ARROW_RIGHT; |
2651 | break; |
2652 | case CTK_ARROW_RIGHT: |
2653 | arrow_type = CTK_ARROW_LEFT; |
2654 | break; |
2655 | default: |
2656 | g_assert_not_reached ()do { g_assertion_message_expr (((gchar*) 0), "panel-toplevel.c" , 2656, ((const char*) (__func__)), ((void*)0)); } while (0); |
2657 | break; |
2658 | } |
2659 | |
2660 | g_object_set_data (G_OBJECT (button)((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((button)), (((GType) ((20) << (2)))))))), "arrow-type", GINT_TO_POINTER (arrow_type)((gpointer) (glong) (arrow_type))); |
2661 | |
2662 | set_arrow_type (CTK_IMAGE (ctk_bin_get_child (CTK_BIN (button)))((((CtkImage*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((ctk_bin_get_child (((((CtkBin*) (void *) g_type_check_instance_cast ((GTypeInstance*) ((button)), ((ctk_bin_get_type ()))))))))) , ((ctk_image_get_type ())))))), arrow_type); |
2663 | } |
2664 | |
2665 | static void |
2666 | panel_toplevel_reverse_arrows (PanelToplevel *toplevel) |
2667 | { |
2668 | panel_toplevel_reverse_arrow (toplevel, toplevel->priv->hide_button_top); |
2669 | panel_toplevel_reverse_arrow (toplevel, toplevel->priv->hide_button_bottom); |
2670 | panel_toplevel_reverse_arrow (toplevel, toplevel->priv->hide_button_left); |
2671 | panel_toplevel_reverse_arrow (toplevel, toplevel->priv->hide_button_right); |
2672 | } |
2673 | |
2674 | static void |
2675 | panel_toplevel_disconnect_attached (PanelToplevel *toplevel) |
2676 | { |
2677 | int i; |
2678 | |
2679 | for (i = 0; i < N_ATTACH_TOPLEVEL_SIGNALS5; i++) { |
2680 | if (!toplevel->priv->attach_toplevel_signals [i]) |
2681 | continue; |
2682 | |
2683 | g_signal_handler_disconnect ( |
2684 | toplevel->priv->attach_toplevel, |
2685 | toplevel->priv->attach_toplevel_signals [i]); |
2686 | toplevel->priv->attach_toplevel_signals [i] = 0; |
2687 | } |
2688 | |
2689 | for (i = 0; i < N_ATTACH_WIDGET_SIGNALS5; i++) { |
2690 | if (!toplevel->priv->attach_widget_signals [i]) |
2691 | continue; |
2692 | |
2693 | g_signal_handler_disconnect ( |
2694 | toplevel->priv->attach_widget, |
2695 | toplevel->priv->attach_widget_signals [i]); |
2696 | toplevel->priv->attach_widget_signals [i] = 0; |
2697 | } |
2698 | } |
2699 | |
2700 | static void |
2701 | panel_toplevel_connect_attached (PanelToplevel *toplevel) |
2702 | { |
2703 | gulong *signals; |
2704 | int i = 0; |
2705 | |
2706 | signals = toplevel->priv->attach_toplevel_signals; |
2707 | |
2708 | signals [i++] = g_signal_connect_swapped (g_signal_connect_data ((toplevel->priv->attach_toplevel ), ("destroy"), (((GCallback) (panel_toplevel_attach_widget_destroyed ))), (toplevel), ((void*)0), G_CONNECT_SWAPPED) |
2709 | toplevel->priv->attach_toplevel, "destroy",g_signal_connect_data ((toplevel->priv->attach_toplevel ), ("destroy"), (((GCallback) (panel_toplevel_attach_widget_destroyed ))), (toplevel), ((void*)0), G_CONNECT_SWAPPED) |
2710 | G_CALLBACK (panel_toplevel_attach_widget_destroyed), toplevel)g_signal_connect_data ((toplevel->priv->attach_toplevel ), ("destroy"), (((GCallback) (panel_toplevel_attach_widget_destroyed ))), (toplevel), ((void*)0), G_CONNECT_SWAPPED); |
2711 | signals [i++] = g_signal_connect_swapped (g_signal_connect_data ((toplevel->priv->attach_toplevel ), ("notify::orientation"), (((GCallback) (panel_toplevel_update_attach_orientation ))), (toplevel), ((void*)0), G_CONNECT_SWAPPED) |
2712 | toplevel->priv->attach_toplevel, "notify::orientation",g_signal_connect_data ((toplevel->priv->attach_toplevel ), ("notify::orientation"), (((GCallback) (panel_toplevel_update_attach_orientation ))), (toplevel), ((void*)0), G_CONNECT_SWAPPED) |
2713 | G_CALLBACK (panel_toplevel_update_attach_orientation), toplevel)g_signal_connect_data ((toplevel->priv->attach_toplevel ), ("notify::orientation"), (((GCallback) (panel_toplevel_update_attach_orientation ))), (toplevel), ((void*)0), G_CONNECT_SWAPPED); |
2714 | signals [i++] = g_signal_connect_swapped (g_signal_connect_data ((toplevel->priv->attach_toplevel ), ("configure-event"), (((GCallback) (panel_toplevel_attach_widget_configure ))), (toplevel), ((void*)0), G_CONNECT_SWAPPED) |
2715 | toplevel->priv->attach_toplevel, "configure-event",g_signal_connect_data ((toplevel->priv->attach_toplevel ), ("configure-event"), (((GCallback) (panel_toplevel_attach_widget_configure ))), (toplevel), ((void*)0), G_CONNECT_SWAPPED) |
2716 | G_CALLBACK (panel_toplevel_attach_widget_configure), toplevel)g_signal_connect_data ((toplevel->priv->attach_toplevel ), ("configure-event"), (((GCallback) (panel_toplevel_attach_widget_configure ))), (toplevel), ((void*)0), G_CONNECT_SWAPPED); |
2717 | signals [i++] = g_signal_connect_swapped (g_signal_connect_data ((toplevel->priv->attach_toplevel ), ("hiding"), (((GCallback) (panel_toplevel_attach_toplevel_hiding ))), (toplevel), ((void*)0), G_CONNECT_SWAPPED) |
2718 | toplevel->priv->attach_toplevel, "hiding",g_signal_connect_data ((toplevel->priv->attach_toplevel ), ("hiding"), (((GCallback) (panel_toplevel_attach_toplevel_hiding ))), (toplevel), ((void*)0), G_CONNECT_SWAPPED) |
2719 | G_CALLBACK (panel_toplevel_attach_toplevel_hiding), toplevel)g_signal_connect_data ((toplevel->priv->attach_toplevel ), ("hiding"), (((GCallback) (panel_toplevel_attach_toplevel_hiding ))), (toplevel), ((void*)0), G_CONNECT_SWAPPED); |
2720 | signals [i++] = g_signal_connect_swapped (g_signal_connect_data ((toplevel->priv->attach_toplevel ), ("unhiding"), (((GCallback) (panel_toplevel_attach_toplevel_unhiding ))), (toplevel), ((void*)0), G_CONNECT_SWAPPED) |
2721 | toplevel->priv->attach_toplevel, "unhiding",g_signal_connect_data ((toplevel->priv->attach_toplevel ), ("unhiding"), (((GCallback) (panel_toplevel_attach_toplevel_unhiding ))), (toplevel), ((void*)0), G_CONNECT_SWAPPED) |
2722 | G_CALLBACK (panel_toplevel_attach_toplevel_unhiding), toplevel)g_signal_connect_data ((toplevel->priv->attach_toplevel ), ("unhiding"), (((GCallback) (panel_toplevel_attach_toplevel_unhiding ))), (toplevel), ((void*)0), G_CONNECT_SWAPPED); |
2723 | |
2724 | g_assert (i == N_ATTACH_TOPLEVEL_SIGNALS)do { if (i == 5) ; else g_assertion_message_expr (((gchar*) 0 ), "panel-toplevel.c", 2724, ((const char*) (__func__)), "i == N_ATTACH_TOPLEVEL_SIGNALS" ); } while (0); |
2725 | |
2726 | signals = toplevel->priv->attach_widget_signals; |
2727 | i = 0; |
2728 | |
2729 | signals [i++] = g_signal_connect_swapped (g_signal_connect_data ((toplevel->priv->attach_widget), ("destroy"), (((GCallback) (panel_toplevel_attach_widget_destroyed ))), (toplevel), ((void*)0), G_CONNECT_SWAPPED) |
2730 | toplevel->priv->attach_widget, "destroy",g_signal_connect_data ((toplevel->priv->attach_widget), ("destroy"), (((GCallback) (panel_toplevel_attach_widget_destroyed ))), (toplevel), ((void*)0), G_CONNECT_SWAPPED) |
2731 | G_CALLBACK (panel_toplevel_attach_widget_destroyed), toplevel)g_signal_connect_data ((toplevel->priv->attach_widget), ("destroy"), (((GCallback) (panel_toplevel_attach_widget_destroyed ))), (toplevel), ((void*)0), G_CONNECT_SWAPPED); |
2732 | signals [i++] = g_signal_connect_swapped (g_signal_connect_data ((toplevel->priv->attach_widget), ("configure-event"), (((GCallback) (panel_toplevel_attach_widget_configure ))), (toplevel), ((void*)0), G_CONNECT_SWAPPED) |
2733 | toplevel->priv->attach_widget, "configure-event",g_signal_connect_data ((toplevel->priv->attach_widget), ("configure-event"), (((GCallback) (panel_toplevel_attach_widget_configure ))), (toplevel), ((void*)0), G_CONNECT_SWAPPED) |
2734 | G_CALLBACK (panel_toplevel_attach_widget_configure), toplevel)g_signal_connect_data ((toplevel->priv->attach_widget), ("configure-event"), (((GCallback) (panel_toplevel_attach_widget_configure ))), (toplevel), ((void*)0), G_CONNECT_SWAPPED); |
2735 | signals [i++] = g_signal_connect_swapped (g_signal_connect_data ((toplevel->priv->attach_widget), ("parent-set"), (((GCallback) (panel_toplevel_attach_widget_parent_set ))), (toplevel), ((void*)0), G_CONNECT_SWAPPED) |
2736 | toplevel->priv->attach_widget, "parent-set",g_signal_connect_data ((toplevel->priv->attach_widget), ("parent-set"), (((GCallback) (panel_toplevel_attach_widget_parent_set ))), (toplevel), ((void*)0), G_CONNECT_SWAPPED) |
2737 | G_CALLBACK (panel_toplevel_attach_widget_parent_set), toplevel)g_signal_connect_data ((toplevel->priv->attach_widget), ("parent-set"), (((GCallback) (panel_toplevel_attach_widget_parent_set ))), (toplevel), ((void*)0), G_CONNECT_SWAPPED); |
2738 | signals [i++] = g_signal_connect_swapped (g_signal_connect_data ((toplevel->priv->attach_widget), ("show"), (((GCallback) (ctk_widget_show))), (toplevel), ((void *)0), G_CONNECT_SWAPPED) |
2739 | toplevel->priv->attach_widget, "show",g_signal_connect_data ((toplevel->priv->attach_widget), ("show"), (((GCallback) (ctk_widget_show))), (toplevel), ((void *)0), G_CONNECT_SWAPPED) |
2740 | G_CALLBACK (ctk_widget_show), toplevel)g_signal_connect_data ((toplevel->priv->attach_widget), ("show"), (((GCallback) (ctk_widget_show))), (toplevel), ((void *)0), G_CONNECT_SWAPPED); |
2741 | signals [i++] = g_signal_connect_swapped (g_signal_connect_data ((toplevel->priv->attach_widget), ("hide"), (((GCallback) (ctk_widget_hide))), (toplevel), ((void *)0), G_CONNECT_SWAPPED) |
2742 | toplevel->priv->attach_widget, "hide",g_signal_connect_data ((toplevel->priv->attach_widget), ("hide"), (((GCallback) (ctk_widget_hide))), (toplevel), ((void *)0), G_CONNECT_SWAPPED) |
2743 | G_CALLBACK (ctk_widget_hide), toplevel)g_signal_connect_data ((toplevel->priv->attach_widget), ("hide"), (((GCallback) (ctk_widget_hide))), (toplevel), ((void *)0), G_CONNECT_SWAPPED); |
2744 | |
2745 | g_assert (i == N_ATTACH_WIDGET_SIGNALS)do { if (i == 5) ; else g_assertion_message_expr (((gchar*) 0 ), "panel-toplevel.c", 2745, ((const char*) (__func__)), "i == N_ATTACH_WIDGET_SIGNALS" ); } while (0); |
2746 | } |
2747 | |
2748 | void |
2749 | panel_toplevel_attach_to_widget (PanelToplevel *toplevel, |
2750 | PanelToplevel *attach_toplevel, |
2751 | CtkWidget *attach_widget) |
2752 | { |
2753 | g_return_if_fail (PANEL_IS_TOPLEVEL (toplevel))do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((toplevel)); GType __t = ((panel_toplevel_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; })))))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char* ) (__func__)), "PANEL_IS_TOPLEVEL (toplevel)"); return; } } while (0); |
2754 | g_return_if_fail (PANEL_IS_TOPLEVEL (attach_toplevel))do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((attach_toplevel)); GType __t = ((panel_toplevel_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst-> g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; })))))) { } else { g_return_if_fail_warning (((gchar*) 0 ), ((const char*) (__func__)), "PANEL_IS_TOPLEVEL (attach_toplevel)" ); return; } } while (0); |
2755 | g_return_if_fail (CTK_IS_WIDGET (attach_widget))do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((attach_widget)); GType __t = ((ctk_widget_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0) ); else __r = g_type_check_instance_is_a (__inst, __t); __r; } )))))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char*) (__func__)), "CTK_IS_WIDGET (attach_widget)"); return ; } } while (0); |
2756 | |
2757 | if (toplevel->priv->attached) |
2758 | panel_toplevel_disconnect_attached (toplevel); |
2759 | |
2760 | toplevel->priv->attached = TRUE(!(0)); |
2761 | |
2762 | /* Cancelling the initial animation for drawers in |
2763 | * panel_toplevel_initially_hide() is not enough, since this will |
2764 | * happen only when the toplevel is realized, which might be too late |
2765 | * for drawers (since it's realized when the drawer is clicked) */ |
2766 | toplevel->priv->initial_animation_done = TRUE(!(0)); |
2767 | |
2768 | toplevel->priv->attach_toplevel = attach_toplevel; |
2769 | toplevel->priv->attach_widget = attach_widget; |
2770 | |
2771 | panel_toplevel_connect_attached (toplevel); |
2772 | |
2773 | panel_toplevel_reverse_arrows (toplevel); |
2774 | panel_toplevel_set_expand (toplevel, FALSE(0)); |
2775 | panel_toplevel_update_attach_orientation (toplevel); |
2776 | panel_toplevel_update_hide_buttons (toplevel); |
2777 | |
2778 | ctk_window_set_screen (CTK_WINDOW (toplevel)((((CtkWindow*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), ((ctk_window_get_type ())))))), |
2779 | ctk_widget_get_screen (CTK_WIDGET (attach_toplevel)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((attach_toplevel)), ((ctk_widget_get_type ())))))))); |
2780 | panel_toplevel_set_monitor (toplevel, |
2781 | panel_toplevel_get_monitor (attach_toplevel)); |
2782 | if (toplevel->priv->state == PANEL_STATE_NORMAL) |
2783 | panel_toplevel_push_autohide_disabler (toplevel->priv->attach_toplevel); |
2784 | |
2785 | ctk_widget_queue_resize (CTK_WIDGET (toplevel)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), ((ctk_widget_get_type ()))))))); |
2786 | } |
2787 | |
2788 | void |
2789 | panel_toplevel_detach (PanelToplevel *toplevel) |
2790 | { |
2791 | g_return_if_fail (PANEL_IS_TOPLEVEL (toplevel))do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((toplevel)); GType __t = ((panel_toplevel_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; })))))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char* ) (__func__)), "PANEL_IS_TOPLEVEL (toplevel)"); return; } } while (0); |
2792 | |
2793 | if (!toplevel->priv->attached) |
2794 | return; |
2795 | |
2796 | if (toplevel->priv->state == PANEL_STATE_NORMAL) |
2797 | panel_toplevel_pop_autohide_disabler (toplevel->priv->attach_toplevel); |
2798 | |
2799 | panel_toplevel_disconnect_attached (toplevel); |
2800 | |
2801 | panel_toplevel_reverse_arrows (toplevel); |
2802 | |
2803 | toplevel->priv->attached = FALSE(0); |
2804 | |
2805 | toplevel->priv->attach_toplevel = NULL((void*)0); |
2806 | toplevel->priv->attach_widget = NULL((void*)0); |
2807 | |
2808 | ctk_widget_queue_resize (CTK_WIDGET (toplevel)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), ((ctk_widget_get_type ()))))))); |
2809 | } |
2810 | |
2811 | gboolean |
2812 | panel_toplevel_get_is_attached (PanelToplevel *toplevel) |
2813 | { |
2814 | g_return_val_if_fail (PANEL_IS_TOPLEVEL (toplevel), FALSE)do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((toplevel)); GType __t = ((panel_toplevel_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; })))))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char* ) (__func__)), "PANEL_IS_TOPLEVEL (toplevel)"); return ((0)); } } while (0); |
2815 | |
2816 | return toplevel->priv->attached; |
2817 | } |
2818 | |
2819 | PanelToplevel * |
2820 | panel_toplevel_get_attach_toplevel (PanelToplevel *toplevel) |
2821 | { |
2822 | g_return_val_if_fail (PANEL_IS_TOPLEVEL (toplevel), NULL)do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((toplevel)); GType __t = ((panel_toplevel_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; })))))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char* ) (__func__)), "PANEL_IS_TOPLEVEL (toplevel)"); return (((void *)0)); } } while (0); |
2823 | |
2824 | return toplevel->priv->attach_toplevel; |
2825 | } |
2826 | |
2827 | CtkWidget * |
2828 | panel_toplevel_get_attach_widget (PanelToplevel *toplevel) |
2829 | { |
2830 | g_return_val_if_fail (PANEL_IS_TOPLEVEL (toplevel), NULL)do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((toplevel)); GType __t = ((panel_toplevel_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; })))))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char* ) (__func__)), "PANEL_IS_TOPLEVEL (toplevel)"); return (((void *)0)); } } while (0); |
2831 | |
2832 | return toplevel->priv->attach_widget; |
2833 | } |
2834 | |
2835 | static gboolean |
2836 | panel_toplevel_popup_panel_menu (PanelToplevel *toplevel) |
2837 | { |
2838 | gboolean retval = FALSE(0); |
2839 | |
2840 | g_signal_emit_by_name (toplevel, "popup_menu", &retval); |
2841 | |
2842 | return retval; |
2843 | } |
2844 | |
2845 | static gboolean |
2846 | panel_toplevel_toggle_expand (PanelToplevel *toplevel) |
2847 | { |
2848 | panel_toplevel_set_expand (toplevel, !toplevel->priv->expand); |
2849 | |
2850 | return TRUE(!(0)); |
2851 | } |
2852 | |
2853 | static gboolean |
2854 | panel_toplevel_expand (PanelToplevel *toplevel) |
2855 | { |
2856 | panel_toplevel_set_expand (toplevel, TRUE(!(0))); |
2857 | |
2858 | return TRUE(!(0)); |
2859 | } |
2860 | |
2861 | static gboolean |
2862 | panel_toplevel_unexpand (PanelToplevel *toplevel) |
2863 | { |
2864 | panel_toplevel_set_expand (toplevel, FALSE(0)); |
2865 | |
2866 | return TRUE(!(0)); |
2867 | } |
2868 | |
2869 | static gboolean |
2870 | panel_toplevel_toggle_hidden (PanelToplevel *toplevel) |
2871 | { |
2872 | if (toplevel->priv->state == PANEL_STATE_NORMAL) |
2873 | panel_toplevel_hide (toplevel, toplevel->priv->auto_hide, -1); |
2874 | else |
2875 | panel_toplevel_unhide (toplevel); |
2876 | |
2877 | return FALSE(0); |
2878 | } |
2879 | |
2880 | static gboolean |
2881 | panel_toplevel_begin_move (PanelToplevel *toplevel) |
2882 | { |
2883 | if (toplevel->priv->grab_op != PANEL_GRAB_OP_NONE) |
2884 | return FALSE(0); |
2885 | |
2886 | panel_toplevel_begin_grab_op ( |
2887 | toplevel, PANEL_GRAB_OP_MOVE, TRUE(!(0)), CDK_CURRENT_TIME0L); |
2888 | |
2889 | return TRUE(!(0)); |
2890 | } |
2891 | |
2892 | static gboolean |
2893 | panel_toplevel_begin_resize (PanelToplevel *toplevel) |
2894 | { |
2895 | if (toplevel->priv->grab_op != PANEL_GRAB_OP_NONE) |
2896 | return FALSE(0); |
2897 | |
2898 | panel_toplevel_begin_grab_op ( |
2899 | toplevel, PANEL_GRAB_OP_RESIZE, TRUE(!(0)), CDK_CURRENT_TIME0L); |
2900 | |
2901 | return TRUE(!(0)); |
2902 | } |
2903 | |
2904 | static void |
2905 | panel_toplevel_move_resize_window (PanelToplevel *toplevel, |
2906 | gboolean move, |
2907 | gboolean resize) |
2908 | { |
2909 | CtkWidget *widget; |
2910 | |
2911 | GList *list; |
2912 | const char *id; |
2913 | int position; |
2914 | gboolean stick; |
2915 | |
2916 | widget = CTK_WIDGET (toplevel)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), ((ctk_widget_get_type ())))))); |
2917 | |
2918 | g_assert (ctk_widget_get_realized (widget))do { if (ctk_widget_get_realized (widget)) ; else g_assertion_message_expr (((gchar*) 0), "panel-toplevel.c", 2918, ((const char*) (__func__ )), "ctk_widget_get_realized (widget)"); } while (0); |
2919 | |
2920 | if (move && resize) |
2921 | cdk_window_move_resize (ctk_widget_get_window (widget), |
2922 | toplevel->priv->geometry.x, |
2923 | toplevel->priv->geometry.y, |
2924 | toplevel->priv->geometry.width, |
2925 | toplevel->priv->geometry.height); |
2926 | else if (move) |
2927 | cdk_window_move (ctk_widget_get_window (widget), |
2928 | toplevel->priv->geometry.x, |
2929 | toplevel->priv->geometry.y); |
2930 | else if (resize) |
2931 | cdk_window_resize (ctk_widget_get_window (widget), |
2932 | toplevel->priv->geometry.width, |
2933 | toplevel->priv->geometry.height); |
2934 | |
2935 | if (resize || move) { |
2936 | for (list = toplevel->priv->panel_widget->applet_list; list != NULL((void*)0); list = g_list_next (list)((list) ? (((GList *)(list))->next) : ((void*)0))) { |
2937 | AppletData *ad = list->data; |
2938 | id = cafe_panel_applet_get_id_by_widget (ad->applet); |
2939 | |
2940 | if (!id) |
2941 | return; |
2942 | |
2943 | AppletInfo *info; |
2944 | info = cafe_panel_applet_get_by_id (id); |
2945 | |
2946 | stick = g_settings_get_boolean (info->settings, PANEL_OBJECT_PANEL_RIGHT_STICK_KEY"panel-right-stick"); |
2947 | |
2948 | if (stick) { |
2949 | position = g_settings_get_int (info->settings, PANEL_OBJECT_POSITION_KEY"position"); |
2950 | if (toplevel->priv->orientation & PANEL_HORIZONTAL_MASK(PANEL_ORIENTATION_TOP | PANEL_ORIENTATION_BOTTOM)) { |
2951 | ad->pos = toplevel->priv->geometry.width - position; |
2952 | } else { |
2953 | ad->pos = toplevel->priv->geometry.height - position; |
2954 | } |
2955 | } |
2956 | } |
2957 | } |
2958 | } |
2959 | |
2960 | static void |
2961 | panel_toplevel_initially_hide (PanelToplevel *toplevel) |
2962 | { |
2963 | if (!toplevel->priv->attached) { |
2964 | toplevel->priv->initial_animation_done = FALSE(0); |
2965 | |
2966 | /* We start the panel off hidden until all the applets are |
2967 | * loaded, and then finally slide it down when it's ready to be |
2968 | * used */ |
2969 | toplevel->priv->state = PANEL_STATE_AUTO_HIDDEN; |
2970 | ctk_widget_queue_resize (CTK_WIDGET (toplevel)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), ((ctk_widget_get_type ()))))))); |
2971 | } else |
2972 | toplevel->priv->initial_animation_done = TRUE(!(0)); |
2973 | } |
2974 | |
2975 | static void |
2976 | set_background_default_style (CtkWidget *widget) |
2977 | { |
2978 | PanelToplevel *toplevel; |
2979 | CtkStyleContext *context; |
2980 | CtkStateFlags state; |
2981 | CdkRGBA *bg_color; |
2982 | cairo_pattern_t *bg_image; |
2983 | |
2984 | if (!ctk_widget_get_realized (widget)) |
2985 | return; |
2986 | |
2987 | toplevel = PANEL_TOPLEVEL (widget)((((PanelToplevel*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((widget)), ((panel_toplevel_get_type ())))))); |
2988 | |
2989 | context = ctk_widget_get_style_context (widget); |
2990 | state = ctk_style_context_get_state (context); |
2991 | |
2992 | ctk_style_context_get (context, state, |
2993 | "background-color", &bg_color, |
2994 | "background-image", &bg_image, |
2995 | NULL((void*)0)); |
2996 | |
2997 | panel_background_set_default_style (&toplevel->background, |
2998 | bg_color, bg_image); |
2999 | |
3000 | if (bg_color) |
3001 | cdk_rgba_free (bg_color); |
3002 | |
3003 | if (bg_image) |
3004 | cairo_pattern_destroy (bg_image); |
3005 | } |
3006 | |
3007 | static void |
3008 | panel_toplevel_realize (CtkWidget *widget) |
3009 | { |
3010 | PanelToplevel *toplevel; |
3011 | CdkScreen *screen; |
3012 | CdkVisual *visual; |
3013 | CdkWindow *window; |
3014 | |
3015 | toplevel = PANEL_TOPLEVEL (widget)((((PanelToplevel*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((widget)), ((panel_toplevel_get_type ())))))); |
3016 | |
3017 | screen = ctk_widget_get_screen (widget); |
3018 | visual = cdk_screen_get_rgba_visual (screen); |
3019 | |
3020 | if (visual == NULL((void*)0)) |
3021 | visual = cdk_screen_get_system_visual (screen); |
3022 | |
3023 | ctk_widget_set_visual (widget, visual); |
3024 | ctk_window_stick (CTK_WINDOW (widget)((((CtkWindow*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((widget)), ((ctk_window_get_type ()))))))); |
3025 | ctk_window_set_decorated (CTK_WINDOW (widget)((((CtkWindow*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((widget)), ((ctk_window_get_type ())))))), FALSE(0)); |
3026 | ctk_window_stick (CTK_WINDOW (widget)((((CtkWindow*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((widget)), ((ctk_window_get_type ()))))))); |
3027 | ctk_window_set_type_hint (CTK_WINDOW (widget)((((CtkWindow*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((widget)), ((ctk_window_get_type ())))))), CDK_WINDOW_TYPE_HINT_DOCK); |
3028 | |
3029 | CTK_WIDGET_CLASS (panel_toplevel_parent_class)((((CtkWidgetClass*) (void *) g_type_check_class_cast ((GTypeClass *) ((panel_toplevel_parent_class)), ((ctk_widget_get_type ()) )))))->realize (widget); |
3030 | |
3031 | window = ctk_widget_get_window (widget); |
3032 | set_background_default_style (widget); |
3033 | panel_background_realized (&toplevel->background, window); |
3034 | |
3035 | #ifdef HAVE_X111 |
3036 | if (CDK_IS_X11_WINDOW (window)(((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) ( (window)); GType __t = ((cdk_x11_window_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; }))))) { |
3037 | panel_struts_set_window_hint (toplevel); |
3038 | cdk_window_set_geometry_hints (window, NULL((void*)0), 0); |
3039 | } |
3040 | #endif // HAVE_X11 |
3041 | |
3042 | cdk_window_set_group (window, window); |
3043 | panel_toplevel_initially_hide (toplevel); |
3044 | |
3045 | panel_toplevel_move_resize_window (toplevel, TRUE(!(0)), TRUE(!(0))); |
3046 | } |
3047 | |
3048 | static void |
3049 | panel_toplevel_disconnect_timeouts (PanelToplevel *toplevel) |
3050 | { |
3051 | if (toplevel->priv->hide_timeout) |
3052 | g_source_remove (toplevel->priv->hide_timeout); |
3053 | toplevel->priv->hide_timeout = 0; |
3054 | |
3055 | if (toplevel->priv->unhide_timeout) |
3056 | g_source_remove (toplevel->priv->unhide_timeout); |
3057 | toplevel->priv->unhide_timeout = 0; |
3058 | |
3059 | if (toplevel->priv->animation_timeout) |
3060 | g_source_remove (toplevel->priv->animation_timeout); |
3061 | toplevel->priv->animation_timeout = 0; |
3062 | } |
3063 | |
3064 | static void |
3065 | panel_toplevel_unrealize (CtkWidget *widget) |
3066 | { |
3067 | PanelToplevel *toplevel; |
3068 | toplevel = PANEL_TOPLEVEL (widget)((((PanelToplevel*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((widget)), ((panel_toplevel_get_type ())))))); |
3069 | panel_toplevel_disconnect_timeouts (toplevel); |
3070 | panel_background_unrealized (&toplevel->background); |
3071 | CTK_WIDGET_CLASS (panel_toplevel_parent_class)((((CtkWidgetClass*) (void *) g_type_check_class_cast ((GTypeClass *) ((panel_toplevel_parent_class)), ((ctk_widget_get_type ()) )))))->unrealize (widget); |
3072 | } |
3073 | |
3074 | static void |
3075 | panel_toplevel_dispose (GObject *widget) |
3076 | { |
3077 | PanelToplevel *toplevel = (PanelToplevel *) widget; |
3078 | |
3079 | if (toplevel->priv->settings_path) { |
3080 | g_free (toplevel->priv->settings_path); |
3081 | toplevel->priv->settings_path = NULL((void*)0); |
3082 | } |
3083 | |
3084 | if (toplevel->settings) { |
3085 | g_signal_handlers_disconnect_by_data (toplevel->settings, toplevel)g_signal_handlers_disconnect_matched ((toplevel->settings) , G_SIGNAL_MATCH_DATA, 0, 0, ((void*)0), ((void*)0), (toplevel )); |
3086 | g_object_unref (toplevel->settings); |
3087 | toplevel->settings = NULL((void*)0); |
3088 | } |
3089 | |
3090 | if (toplevel->queued_settings) { |
3091 | g_object_unref (toplevel->queued_settings); |
3092 | toplevel->queued_settings = NULL((void*)0); |
3093 | } |
3094 | |
3095 | if (toplevel->background_settings) { |
3096 | g_signal_handlers_disconnect_by_data (toplevel->background_settings, toplevel)g_signal_handlers_disconnect_matched ((toplevel->background_settings ), G_SIGNAL_MATCH_DATA, 0, 0, ((void*)0), ((void*)0), (toplevel )); |
3097 | g_object_unref (toplevel->background_settings); |
3098 | toplevel->background_settings = NULL((void*)0); |
3099 | } |
3100 | |
3101 | if (toplevel->priv->ctk_settings) { |
3102 | g_signal_handlers_disconnect_by_func (toplevel->priv->ctk_settings,g_signal_handlers_disconnect_matched ((toplevel->priv-> ctk_settings), (GSignalMatchType) (G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA ), 0, 0, ((void*)0), (((GCallback) (panel_toplevel_drag_threshold_changed ))), (toplevel)) |
3103 | G_CALLBACK (panel_toplevel_drag_threshold_changed),g_signal_handlers_disconnect_matched ((toplevel->priv-> ctk_settings), (GSignalMatchType) (G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA ), 0, 0, ((void*)0), (((GCallback) (panel_toplevel_drag_threshold_changed ))), (toplevel)) |
3104 | toplevel)g_signal_handlers_disconnect_matched ((toplevel->priv-> ctk_settings), (GSignalMatchType) (G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA ), 0, 0, ((void*)0), (((GCallback) (panel_toplevel_drag_threshold_changed ))), (toplevel)); |
3105 | toplevel->priv->ctk_settings = NULL((void*)0); |
3106 | |
3107 | panel_background_free (&toplevel->background); |
3108 | } |
3109 | |
3110 | if (toplevel->priv->attached) { |
3111 | panel_toplevel_disconnect_attached (toplevel); |
3112 | toplevel->priv->attached = FALSE(0); |
3113 | |
3114 | toplevel->priv->attach_toplevel = NULL((void*)0); |
3115 | toplevel->priv->attach_widget = NULL((void*)0); |
3116 | } |
3117 | |
3118 | if (toplevel->priv->description) { |
3119 | g_free (toplevel->priv->description); |
3120 | toplevel->priv->description = NULL((void*)0); |
3121 | } |
3122 | |
3123 | if (toplevel->priv->name) { |
3124 | g_free (toplevel->priv->name); |
3125 | toplevel->priv->name = NULL((void*)0); |
3126 | } |
3127 | |
3128 | if (toplevel->priv->animation_start_time) { |
3129 | g_date_time_unref (toplevel->priv->animation_start_time); |
3130 | toplevel->priv->animation_start_time = NULL((void*)0); |
3131 | } |
3132 | |
3133 | if (toplevel->priv->animation_end_time) { |
3134 | g_date_time_unref (toplevel->priv->animation_end_time); |
3135 | toplevel->priv->animation_end_time = NULL((void*)0); |
3136 | } |
3137 | |
3138 | panel_toplevel_disconnect_timeouts (toplevel); |
3139 | |
3140 | G_OBJECT_CLASS (panel_toplevel_parent_class)((((GObjectClass*) (void *) g_type_check_class_cast ((GTypeClass *) ((panel_toplevel_parent_class)), (((GType) ((20) << ( 2))))))))->dispose (widget); |
3141 | } |
3142 | |
3143 | static void |
3144 | panel_toplevel_check_resize (CtkContainer *container) |
3145 | { |
3146 | CtkAllocation allocation; |
3147 | CtkRequisition requisition; |
3148 | CtkWidget *widget; |
3149 | |
3150 | widget = CTK_WIDGET (container)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((container)), ((ctk_widget_get_type ())))))); |
3151 | |
3152 | if (!ctk_widget_get_visible (widget)) |
3153 | return; |
3154 | |
3155 | requisition.width = -1; |
3156 | requisition.height = -1; |
3157 | |
3158 | ctk_widget_get_preferred_size (widget, &requisition, NULL((void*)0)); |
3159 | ctk_widget_get_allocation (widget, &allocation); |
3160 | |
3161 | allocation.width = requisition.width; |
3162 | allocation.height = requisition.height; |
3163 | |
3164 | ctk_widget_size_allocate (widget, &allocation); |
3165 | } |
3166 | |
3167 | static void |
3168 | panel_toplevel_size_request (CtkWidget *widget, |
3169 | CtkRequisition *requisition) |
3170 | { |
3171 | PanelToplevel *toplevel; |
3172 | CtkBin *bin; |
3173 | CtkWidget *child; |
3174 | CdkRectangle old_geometry; |
3175 | int position_changed = FALSE(0); |
3176 | int size_changed = FALSE(0); |
3177 | |
3178 | toplevel = PANEL_TOPLEVEL (widget)((((PanelToplevel*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((widget)), ((panel_toplevel_get_type ())))))); |
3179 | bin = CTK_BIN (widget)((((CtkBin*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((widget)), ((ctk_bin_get_type ())))))); |
3180 | |
3181 | /* we get a size request when there are new monitors, so first try to |
3182 | * see if we need to move to a new monitor */ |
3183 | panel_toplevel_update_monitor (toplevel); |
3184 | |
3185 | child = ctk_bin_get_child (bin); |
3186 | if (child && ctk_widget_get_visible (child)) |
3187 | ctk_widget_get_preferred_size (child, requisition, NULL((void*)0)); |
3188 | |
3189 | old_geometry = toplevel->priv->geometry; |
3190 | |
3191 | panel_toplevel_update_geometry (toplevel, requisition); |
3192 | |
3193 | requisition->width = toplevel->priv->geometry.width; |
3194 | requisition->height = toplevel->priv->geometry.height; |
3195 | |
3196 | if (!ctk_widget_get_realized (widget)) |
3197 | return; |
3198 | |
3199 | if (old_geometry.width != toplevel->priv->geometry.width || |
3200 | old_geometry.height != toplevel->priv->geometry.height) |
3201 | size_changed = TRUE(!(0)); |
3202 | |
3203 | if (old_geometry.x != toplevel->priv->geometry.x || |
3204 | old_geometry.y != toplevel->priv->geometry.y) |
3205 | position_changed = TRUE(!(0)); |
3206 | |
3207 | panel_toplevel_move_resize_window (toplevel, position_changed, size_changed); |
3208 | } |
3209 | |
3210 | static void |
3211 | panel_toplevel_get_preferred_width (CtkWidget *widget, |
3212 | gint *minimum_width, |
3213 | gint *natural_width) |
3214 | { |
3215 | CtkRequisition req; |
3216 | panel_toplevel_size_request (widget, &req); |
3217 | *minimum_width = *natural_width = req.width; |
3218 | } |
3219 | |
3220 | static void |
3221 | panel_toplevel_get_preferred_height (CtkWidget *widget, |
3222 | gint *minimum_height, |
3223 | gint *natural_height) |
3224 | { |
3225 | CtkRequisition req; |
3226 | panel_toplevel_size_request (widget, &req); |
3227 | *minimum_height = *natural_height = req.height; |
3228 | } |
3229 | |
3230 | static void |
3231 | set_background_region (PanelToplevel *toplevel) |
3232 | { |
3233 | CtkWidget *widget; |
3234 | CdkWindow *window; |
3235 | gint origin_x; |
3236 | gint origin_y; |
3237 | CtkAllocation allocation; |
3238 | CtkOrientation orientation; |
3239 | |
3240 | widget = CTK_WIDGET (toplevel)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), ((ctk_widget_get_type ())))))); |
3241 | |
3242 | if (!ctk_widget_get_realized (widget)) |
3243 | return; |
3244 | |
3245 | window = ctk_widget_get_window (widget); |
3246 | origin_x = -1; |
3247 | origin_y = -1; |
3248 | |
3249 | cdk_window_get_origin (window, &origin_x, &origin_y); |
3250 | ctk_widget_get_allocation (widget, &allocation); |
3251 | |
3252 | orientation = CTK_ORIENTATION_HORIZONTAL; |
3253 | if (toplevel->priv->orientation & PANEL_VERTICAL_MASK(PANEL_ORIENTATION_LEFT | PANEL_ORIENTATION_RIGHT)) |
3254 | orientation = CTK_ORIENTATION_VERTICAL; |
3255 | |
3256 | panel_background_change_region (&toplevel->background, orientation, |
3257 | origin_x, origin_y, |
3258 | allocation.width, allocation.height); |
3259 | } |
3260 | |
3261 | static void |
3262 | panel_toplevel_size_allocate (CtkWidget *widget, |
3263 | CtkAllocation *allocation) |
3264 | { |
3265 | PanelToplevel *toplevel = (PanelToplevel *) widget; |
3266 | CtkBin *bin = (CtkBin *) widget; |
3267 | CtkStyleContext *context; |
3268 | CtkStateFlags state; |
3269 | CtkBorder padding; |
3270 | CtkWidget *child; |
3271 | CtkAllocation challoc; |
3272 | CtkAllocation child_allocation; |
3273 | |
3274 | ctk_widget_set_allocation (widget, allocation); |
3275 | |
3276 | if (toplevel->priv->expand || |
3277 | toplevel->priv->buttons_enabled || |
3278 | toplevel->priv->attached) |
3279 | challoc = *allocation; |
3280 | else { |
3281 | if (toplevel->priv->orientation & PANEL_HORIZONTAL_MASK(PANEL_ORIENTATION_TOP | PANEL_ORIENTATION_BOTTOM)) { |
3282 | challoc.x = HANDLE_SIZE10; |
3283 | challoc.y = 0; |
3284 | challoc.width = allocation->width - 2 * HANDLE_SIZE10; |
3285 | challoc.height = allocation->height; |
3286 | } else { |
3287 | challoc.x = 0; |
3288 | challoc.y = HANDLE_SIZE10; |
3289 | challoc.width = allocation->width; |
3290 | challoc.height = allocation->height - 2 * HANDLE_SIZE10; |
3291 | } |
3292 | } |
3293 | |
3294 | state = ctk_widget_get_state_flags (widget); |
3295 | context = ctk_widget_get_style_context (widget); |
3296 | ctk_style_context_get_padding (context, state, &padding); |
3297 | |
3298 | if (toplevel->priv->edges & PANEL_EDGE_TOP) { |
3299 | challoc.y += padding.top; |
3300 | challoc.height -= padding.top; |
3301 | } |
3302 | |
3303 | if (toplevel->priv->edges & PANEL_EDGE_LEFT) { |
3304 | challoc.x += padding.left; |
3305 | challoc.width -= padding.left; |
3306 | } |
3307 | |
3308 | if (toplevel->priv->edges & PANEL_EDGE_BOTTOM) |
3309 | challoc.height -= padding.bottom; |
3310 | |
3311 | if (toplevel->priv->edges & PANEL_EDGE_RIGHT) |
3312 | challoc.width -= padding.right; |
3313 | |
3314 | challoc.width = MAX (1, challoc.width)(((1) > (challoc.width)) ? (1) : (challoc.width)); |
3315 | challoc.height = MAX (1, challoc.height)(((1) > (challoc.height)) ? (1) : (challoc.height)); |
3316 | |
3317 | child = ctk_bin_get_child (bin); |
3318 | ctk_widget_get_allocation (child, &child_allocation); |
3319 | |
3320 | if (ctk_widget_get_mapped (widget) && |
3321 | (challoc.x != child_allocation.x || |
3322 | challoc.y != child_allocation.y || |
3323 | challoc.width != child_allocation.width || |
3324 | challoc.height != child_allocation.height)) { |
3325 | CtkAllocation allocation; |
3326 | |
3327 | ctk_widget_get_allocation (widget, &allocation); |
3328 | cdk_window_invalidate_rect (ctk_widget_get_window (widget), &allocation, FALSE(0)); |
3329 | } |
3330 | |
3331 | if (child && ctk_widget_get_visible (child)) |
3332 | ctk_widget_size_allocate (child, &challoc); |
3333 | |
3334 | set_background_region (toplevel); |
3335 | } |
3336 | |
3337 | static gboolean panel_toplevel_draw(CtkWidget* widget, cairo_t* cr) |
3338 | { |
3339 | PanelToplevel* toplevel = (PanelToplevel*) widget; |
3340 | PanelFrameEdge edges; |
3341 | gboolean retval = FALSE(0); |
3342 | int awidth; |
3343 | int aheight; |
3344 | CtkStyleContext *context; |
3345 | CtkStateFlags state; |
3346 | CtkBorder padding; |
3347 | |
3348 | if (!ctk_widget_is_drawable (widget)) |
3349 | return retval; |
3350 | |
3351 | if (CTK_WIDGET_CLASS (panel_toplevel_parent_class)((((CtkWidgetClass*) (void *) g_type_check_class_cast ((GTypeClass *) ((panel_toplevel_parent_class)), ((ctk_widget_get_type ()) )))))->draw) |
3352 | retval = CTK_WIDGET_CLASS (panel_toplevel_parent_class)((((CtkWidgetClass*) (void *) g_type_check_class_cast ((GTypeClass *) ((panel_toplevel_parent_class)), ((ctk_widget_get_type ()) )))))->draw (widget, cr); |
3353 | |
3354 | edges = toplevel->priv->edges; |
3355 | panel_frame_draw (widget, cr, edges); |
3356 | |
3357 | if (toplevel->priv->expand || |
3358 | toplevel->priv->buttons_enabled || |
3359 | toplevel->priv->attached) |
3360 | return retval; |
3361 | |
3362 | state = ctk_widget_get_state_flags (widget); |
3363 | awidth = ctk_widget_get_allocated_width (widget); |
3364 | aheight = ctk_widget_get_allocated_height (widget); |
3365 | |
3366 | context = ctk_widget_get_style_context (widget); |
3367 | ctk_style_context_get_padding (context, state, &padding); |
3368 | |
3369 | ctk_style_context_save (context); |
3370 | ctk_style_context_set_state (context, state); |
3371 | |
3372 | if (toplevel->priv->orientation & PANEL_HORIZONTAL_MASK(PANEL_ORIENTATION_TOP | PANEL_ORIENTATION_BOTTOM)) { |
3373 | int x, y, width, height; |
3374 | |
3375 | x = 0; |
3376 | y = 0; |
3377 | height = aheight; |
3378 | width = HANDLE_SIZE10; |
3379 | |
3380 | if (edges & PANEL_EDGE_TOP) { |
3381 | y += padding.top; |
3382 | height -= padding.top; |
3383 | } |
3384 | if (edges & PANEL_EDGE_BOTTOM) |
3385 | height -= padding.bottom; |
3386 | if (edges & PANEL_EDGE_LEFT) |
3387 | x += padding.left; |
3388 | |
3389 | cairo_save (cr); |
3390 | ctk_render_handle (context, cr, x, y, width, height); |
3391 | cairo_restore (cr); |
3392 | |
3393 | x = awidth - HANDLE_SIZE10; |
3394 | if (edges & PANEL_EDGE_RIGHT) |
3395 | x -= padding.right; |
3396 | |
3397 | cairo_save (cr); |
3398 | ctk_render_handle (context, cr, x, y, width, height); |
3399 | cairo_restore (cr); |
3400 | } else { |
3401 | int x, y, width, height; |
3402 | |
3403 | x = 0; |
3404 | y = 0; |
3405 | width = awidth; |
3406 | height = HANDLE_SIZE10; |
3407 | |
3408 | if (edges & PANEL_EDGE_LEFT) { |
3409 | x += padding.left; |
3410 | width -= padding.left; |
3411 | } |
3412 | if (edges & PANEL_EDGE_RIGHT) |
3413 | width -= padding.right; |
3414 | if (edges & PANEL_EDGE_TOP) |
3415 | y += padding.top; |
3416 | |
3417 | cairo_save (cr); |
3418 | ctk_render_handle (context, cr, x, y, width, height); |
3419 | cairo_restore (cr); |
3420 | |
3421 | y = aheight - HANDLE_SIZE10; |
3422 | if (edges & PANEL_EDGE_BOTTOM) |
3423 | y -= padding.bottom; |
3424 | |
3425 | cairo_save (cr); |
3426 | ctk_render_handle (context, cr, x, y, width, height); |
3427 | cairo_restore (cr); |
3428 | } |
3429 | |
3430 | ctk_style_context_restore (context); |
3431 | |
3432 | return retval; |
3433 | } |
3434 | |
3435 | static gboolean |
3436 | panel_toplevel_button_press_event (CtkWidget *widget, |
3437 | CdkEventButton *event) |
3438 | { |
3439 | PanelToplevel *toplevel; |
3440 | CtkWidget *event_widget; |
3441 | |
3442 | g_return_val_if_fail (PANEL_IS_TOPLEVEL (widget), FALSE)do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((widget)); GType __t = ((panel_toplevel_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; })))))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char* ) (__func__)), "PANEL_IS_TOPLEVEL (widget)"); return ((0)); } } while (0); |
3443 | |
3444 | toplevel = PANEL_TOPLEVEL (widget)((((PanelToplevel*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((widget)), ((panel_toplevel_get_type ())))))); |
3445 | |
3446 | if (event->button != 1 && event->button != 2) |
3447 | return FALSE(0); |
3448 | |
3449 | if (toplevel->priv->animating) |
3450 | return FALSE(0); |
3451 | |
3452 | /* Get the mouse-button modifier from croma so that only intentional |
3453 | * moves are considered. We don't this for non-expanded panels since we |
3454 | * only have the handles that the user can grab. */ |
3455 | if ((toplevel->priv->expand || toplevel->priv->attached) && |
3456 | (event->state & CDK_MODIFIER_MASK) != panel_bindings_get_mouse_button_modifier_keymask ()) |
3457 | return FALSE(0); |
3458 | |
3459 | cdk_window_get_user_data (event->window, (gpointer)&event_widget); |
3460 | g_assert (CTK_IS_WIDGET (event_widget))do { if ((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((event_widget)); GType __t = ((ctk_widget_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; }))))) ; else g_assertion_message_expr (((gchar*) 0), "panel-toplevel.c", 3460 , ((const char*) (__func__)), "CTK_IS_WIDGET (event_widget)") ; } while (0); |
3461 | ctk_widget_translate_coordinates (event_widget, |
3462 | widget, |
3463 | event->x, |
3464 | event->y, |
3465 | &toplevel->priv->drag_offset_x, |
3466 | &toplevel->priv->drag_offset_y); |
3467 | |
3468 | panel_toplevel_begin_grab_op (toplevel, PANEL_GRAB_OP_MOVE, FALSE(0), event->time); |
3469 | |
3470 | return TRUE(!(0)); |
3471 | } |
3472 | |
3473 | static gboolean |
3474 | panel_toplevel_button_release_event (CtkWidget *widget, |
3475 | CdkEventButton *event) |
3476 | { |
3477 | PanelToplevel *toplevel; |
3478 | |
3479 | if (event->button != 1 && event->button != 2) |
3480 | return FALSE(0); |
3481 | |
3482 | toplevel = PANEL_TOPLEVEL (widget)((((PanelToplevel*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((widget)), ((panel_toplevel_get_type ())))))); |
3483 | |
3484 | if (toplevel->priv->grab_op == PANEL_GRAB_OP_NONE) |
3485 | return FALSE(0); |
3486 | |
3487 | if (toplevel->priv->grab_is_keyboard) |
3488 | return FALSE(0); |
3489 | |
3490 | panel_toplevel_end_grab_op (toplevel, event->time); |
3491 | |
3492 | return TRUE(!(0)); |
3493 | } |
3494 | |
3495 | static gboolean |
3496 | panel_toplevel_configure_event (CtkWidget *widget, |
3497 | CdkEventConfigure *event G_GNUC_UNUSED__attribute__ ((__unused__))) |
3498 | { |
3499 | PanelToplevel *toplevel; |
3500 | |
3501 | toplevel = PANEL_TOPLEVEL (widget)((((PanelToplevel*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((widget)), ((panel_toplevel_get_type ())))))); |
3502 | |
3503 | set_background_region (toplevel); |
3504 | |
3505 | return TRUE(!(0)); |
3506 | } |
3507 | |
3508 | static gboolean |
3509 | panel_toplevel_key_press_event (CtkWidget *widget, |
3510 | CdkEventKey *event) |
3511 | { |
3512 | PanelToplevel *toplevel = (PanelToplevel *) widget; |
3513 | |
3514 | if (toplevel->priv->grab_op != PANEL_GRAB_OP_NONE && |
3515 | panel_toplevel_handle_grab_op_key_event (toplevel, event)) |
3516 | return TRUE(!(0)); |
3517 | |
3518 | if (CTK_WIDGET_CLASS (panel_toplevel_parent_class)((((CtkWidgetClass*) (void *) g_type_check_class_cast ((GTypeClass *) ((panel_toplevel_parent_class)), ((ctk_widget_get_type ()) )))))->key_press_event) |
3519 | return CTK_WIDGET_CLASS (panel_toplevel_parent_class)((((CtkWidgetClass*) (void *) g_type_check_class_cast ((GTypeClass *) ((panel_toplevel_parent_class)), ((ctk_widget_get_type ()) )))))->key_press_event (widget, event); |
3520 | |
3521 | return FALSE(0); |
3522 | } |
3523 | |
3524 | static void |
3525 | panel_toplevel_state_flags_changed (CtkWidget *widget, |
3526 | CtkStateFlags previous_state) |
3527 | { |
3528 | CTK_WIDGET_CLASS (panel_toplevel_parent_class)((((CtkWidgetClass*) (void *) g_type_check_class_cast ((GTypeClass *) ((panel_toplevel_parent_class)), ((ctk_widget_get_type ()) )))))->state_flags_changed (widget, |
3529 | previous_state); |
3530 | |
3531 | set_background_default_style (widget); |
3532 | } |
3533 | |
3534 | static gboolean |
3535 | panel_toplevel_motion_notify_event (CtkWidget *widget, |
3536 | CdkEventMotion *event) |
3537 | { |
3538 | if (cdk_event_get_screen ((CdkEvent *)event) == |
3539 | ctk_window_get_screen (CTK_WINDOW (widget)((((CtkWindow*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((widget)), ((ctk_window_get_type ())))))))) |
3540 | return panel_toplevel_handle_grab_op_motion_event ( |
3541 | PANEL_TOPLEVEL (widget)((((PanelToplevel*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((widget)), ((panel_toplevel_get_type ())))))), event); |
3542 | else |
3543 | return FALSE(0); |
3544 | } |
3545 | |
3546 | static gboolean |
3547 | panel_toplevel_animation_timeout (PanelToplevel *toplevel) |
3548 | { |
3549 | ctk_widget_queue_resize (CTK_WIDGET (toplevel)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), ((ctk_widget_get_type ()))))))); |
3550 | |
3551 | if (!toplevel->priv->animating) { |
3552 | toplevel->priv->animation_end_x = 0xdead; |
3553 | toplevel->priv->animation_end_y = 0xdead; |
3554 | toplevel->priv->animation_end_width = 0xdead; |
3555 | toplevel->priv->animation_end_height = 0xdead; |
3556 | if (toplevel->priv->animation_start_time) { |
3557 | g_date_time_unref (toplevel->priv->animation_start_time); |
3558 | toplevel->priv->animation_start_time = NULL((void*)0); |
3559 | } |
3560 | if (toplevel->priv->animation_end_time) { |
3561 | g_date_time_unref (toplevel->priv->animation_end_time); |
3562 | toplevel->priv->animation_end_time = NULL((void*)0); |
3563 | } |
3564 | toplevel->priv->animation_timeout = 0; |
3565 | toplevel->priv->initial_animation_done = TRUE(!(0)); |
3566 | } |
3567 | |
3568 | return toplevel->priv->animating; |
3569 | } |
3570 | |
3571 | static GTimeSpan |
3572 | panel_toplevel_get_animation_time (PanelToplevel *toplevel) |
3573 | { |
3574 | /* The number of milliseconds to complete the animation. |
3575 | */ |
3576 | #define ANIMATION_TIME_FAST 400 |
3577 | #define ANIMATION_TIME_MEDIUM 1200 |
3578 | #define ANIMATION_TIME_SLOW 2000 |
3579 | |
3580 | GTimeSpan t; |
3581 | |
3582 | switch (toplevel->priv->animation_speed) { |
3583 | case PANEL_ANIMATION_SLOW: |
3584 | t = ANIMATION_TIME_SLOW * G_TIME_SPAN_MILLISECOND((1000L)); |
3585 | break; |
3586 | case PANEL_ANIMATION_MEDIUM: |
3587 | t = ANIMATION_TIME_MEDIUM * G_TIME_SPAN_MILLISECOND((1000L)); |
3588 | break; |
3589 | case PANEL_ANIMATION_FAST: |
3590 | t = ANIMATION_TIME_FAST * G_TIME_SPAN_MILLISECOND((1000L)); |
3591 | break; |
3592 | default: |
3593 | g_assert_not_reached ()do { g_assertion_message_expr (((gchar*) 0), "panel-toplevel.c" , 3593, ((const char*) (__func__)), ((void*)0)); } while (0); |
3594 | break; |
3595 | } |
3596 | |
3597 | return t; |
3598 | |
3599 | #undef ANIMATION_TIME_FAST |
3600 | #undef ANIMATION_TIME_MEDIUM |
3601 | #undef ANIMATION_TIME_SLOW |
3602 | } |
3603 | |
3604 | static void |
3605 | panel_toplevel_calculate_animation_end_geometry (PanelToplevel *toplevel) |
3606 | { |
3607 | CdkRectangle monitor_geom; |
3608 | |
3609 | toplevel->priv->animation_end_x = toplevel->priv->x; |
3610 | toplevel->priv->animation_end_y = toplevel->priv->y; |
3611 | toplevel->priv->animation_end_width = -1; |
3612 | toplevel->priv->animation_end_height = -1; |
3613 | |
3614 | panel_toplevel_get_monitor_geometry (toplevel, &monitor_geom); |
3615 | |
3616 | if (!toplevel->priv->expand) { |
3617 | |
3618 | if (toplevel->priv->x_centered) |
3619 | toplevel->priv->animation_end_x = |
3620 | (monitor_geom.width - toplevel->priv->geometry.width) / 2; |
3621 | if (toplevel->priv->y_centered) |
3622 | toplevel->priv->animation_end_y = |
3623 | (monitor_geom.height - toplevel->priv->geometry.height) / 2; |
3624 | } |
3625 | |
3626 | /* we consider the toplevels which are in the initial animation stage |
3627 | * as in a normal state */ |
3628 | if (toplevel->priv->state == PANEL_STATE_NORMAL || |
3629 | (!toplevel->priv->initial_animation_done && |
3630 | !toplevel->priv->auto_hide)) |
3631 | panel_toplevel_update_normal_position (toplevel, |
3632 | &toplevel->priv->animation_end_x, |
3633 | &toplevel->priv->animation_end_y, |
3634 | &toplevel->priv->animation_end_width, |
3635 | &toplevel->priv->animation_end_height); |
3636 | |
3637 | else if (toplevel->priv->state == PANEL_STATE_AUTO_HIDDEN) |
3638 | panel_toplevel_update_auto_hide_position (toplevel, |
3639 | &toplevel->priv->animation_end_x, |
3640 | &toplevel->priv->animation_end_y, |
3641 | &toplevel->priv->animation_end_width, |
3642 | &toplevel->priv->animation_end_height, |
3643 | TRUE(!(0))); |
3644 | else |
3645 | panel_toplevel_update_hidden_position (toplevel, |
3646 | &toplevel->priv->animation_end_x, |
3647 | &toplevel->priv->animation_end_y, |
3648 | &toplevel->priv->animation_end_width, |
3649 | &toplevel->priv->animation_end_height); |
3650 | } |
3651 | |
3652 | static void |
3653 | panel_toplevel_start_animation (PanelToplevel *toplevel) |
3654 | { |
3655 | CtkRequisition requisition; |
3656 | int deltax, deltay, deltaw = 0, deltah = 0; |
3657 | int cur_x = -1, cur_y = -1; |
3658 | |
3659 | panel_toplevel_calculate_animation_end_geometry (toplevel); |
3660 | |
3661 | toplevel->priv->animating = TRUE(!(0)); |
3662 | |
3663 | panel_toplevel_update_struts (toplevel, TRUE(!(0))); |
3664 | #ifdef HAVE_X111 |
3665 | if (CDK_IS_X11_DISPLAY (ctk_widget_get_display (CTK_WIDGET (toplevel)))(((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) ( (ctk_widget_get_display (((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance*) ((toplevel)), ((ctk_widget_get_type ())))) ))))); GType __t = ((cdk_x11_display_get_type())); gboolean __r ; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; }))))) { |
3666 | panel_struts_update_toplevel_geometry (toplevel, |
3667 | &toplevel->priv->animation_end_x, |
3668 | &toplevel->priv->animation_end_y, |
3669 | &toplevel->priv->animation_end_width, |
3670 | &toplevel->priv->animation_end_height); |
3671 | } |
3672 | #endif // HAVE_X11 |
3673 | panel_toplevel_update_struts (toplevel, FALSE(0)); |
3674 | |
3675 | cdk_window_get_origin (ctk_widget_get_window (CTK_WIDGET (toplevel)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), ((ctk_widget_get_type ()))))))), &cur_x, &cur_y); |
3676 | |
3677 | cur_x -= panel_multimonitor_x (toplevel->priv->monitor); |
3678 | cur_y -= panel_multimonitor_y (toplevel->priv->monitor); |
3679 | |
3680 | deltax = toplevel->priv->animation_end_x - cur_x; |
3681 | deltay = toplevel->priv->animation_end_y - cur_y; |
3682 | |
3683 | ctk_widget_get_preferred_size (CTK_WIDGET (toplevel)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), ((ctk_widget_get_type ())))))), &requisition, NULL((void*)0)); |
3684 | |
3685 | if (toplevel->priv->animation_end_width != -1) |
3686 | deltaw = toplevel->priv->animation_end_width - requisition.width; |
3687 | |
3688 | if (toplevel->priv->animation_end_height != -1) |
3689 | deltah = toplevel->priv->animation_end_height - requisition.height; |
3690 | |
3691 | if (deltax == 0 && deltay == 0 && deltaw == 0 && deltah == 0) { |
3692 | toplevel->priv->animation_end_x = -1; |
3693 | toplevel->priv->animation_end_y = -1; |
3694 | toplevel->priv->animation_end_width = -1; |
3695 | toplevel->priv->animation_end_height = -1; |
3696 | toplevel->priv->animating = FALSE(0); |
3697 | return; |
3698 | } |
3699 | |
3700 | if (toplevel->priv->attached) { |
3701 | /* Re-map unmapped attached toplevels */ |
3702 | if (!ctk_widget_get_visible (CTK_WIDGET (toplevel)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), ((ctk_widget_get_type ())))))))) |
3703 | ctk_widget_set_visible (CTK_WIDGET (toplevel)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), ((ctk_widget_get_type ())))))), TRUE(!(0))); |
3704 | |
3705 | if (!ctk_widget_get_mapped (CTK_WIDGET (toplevel)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), ((ctk_widget_get_type ())))))))) |
3706 | ctk_widget_map (CTK_WIDGET (toplevel)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), ((ctk_widget_get_type ()))))))); |
3707 | |
3708 | ctk_window_present (CTK_WINDOW (toplevel->priv->attach_toplevel)((((CtkWindow*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel->priv->attach_toplevel)), ((ctk_window_get_type ()))))))); |
3709 | } |
3710 | |
3711 | if (toplevel->priv->animation_start_time) |
3712 | g_date_time_unref (toplevel->priv->animation_start_time); |
3713 | toplevel->priv->animation_start_time = g_date_time_new_now_local (); |
3714 | |
3715 | if (toplevel->priv->animation_end_time) |
3716 | g_date_time_unref (toplevel->priv->animation_end_time); |
3717 | toplevel->priv->animation_end_time = g_date_time_add (toplevel->priv->animation_start_time, |
3718 | panel_toplevel_get_animation_time (toplevel)); |
3719 | |
3720 | if (!toplevel->priv->animation_timeout) |
3721 | toplevel->priv->animation_timeout = |
3722 | g_timeout_add (20, (GSourceFunc) panel_toplevel_animation_timeout, toplevel); |
3723 | } |
3724 | |
3725 | void |
3726 | panel_toplevel_hide (PanelToplevel *toplevel, |
3727 | gboolean auto_hide, |
3728 | CtkDirectionType direction) |
3729 | { |
3730 | g_return_if_fail (PANEL_IS_TOPLEVEL (toplevel))do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((toplevel)); GType __t = ((panel_toplevel_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; })))))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char* ) (__func__)), "PANEL_IS_TOPLEVEL (toplevel)"); return; } } while (0); |
3731 | |
3732 | if (toplevel->priv->state != PANEL_STATE_NORMAL) |
3733 | return; |
3734 | |
3735 | g_signal_emit (toplevel, toplevel_signals [HIDE_SIGNAL], 0); |
3736 | |
3737 | if (toplevel->priv->attach_toplevel) |
3738 | panel_toplevel_pop_autohide_disabler (toplevel->priv->attach_toplevel); |
3739 | |
3740 | if (auto_hide) |
3741 | toplevel->priv->state = PANEL_STATE_AUTO_HIDDEN; |
3742 | else { |
3743 | if (direction == -1) { |
3744 | if (toplevel->priv->orientation & PANEL_VERTICAL_MASK(PANEL_ORIENTATION_LEFT | PANEL_ORIENTATION_RIGHT)) |
3745 | direction = CTK_DIR_UP; |
3746 | else |
3747 | direction = CTK_DIR_LEFT; |
3748 | } |
3749 | |
3750 | switch (direction) { |
3751 | case CTK_DIR_UP: |
3752 | g_return_if_fail (toplevel->priv->orientation & PANEL_VERTICAL_MASK)do { if ((toplevel->priv->orientation & (PANEL_ORIENTATION_LEFT | PANEL_ORIENTATION_RIGHT))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char*) (__func__)), "toplevel->priv->orientation & PANEL_VERTICAL_MASK" ); return; } } while (0); |
3753 | toplevel->priv->state = PANEL_STATE_HIDDEN_UP; |
3754 | break; |
3755 | case CTK_DIR_DOWN: |
3756 | g_return_if_fail (toplevel->priv->orientation & PANEL_VERTICAL_MASK)do { if ((toplevel->priv->orientation & (PANEL_ORIENTATION_LEFT | PANEL_ORIENTATION_RIGHT))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char*) (__func__)), "toplevel->priv->orientation & PANEL_VERTICAL_MASK" ); return; } } while (0); |
3757 | toplevel->priv->state = PANEL_STATE_HIDDEN_DOWN; |
3758 | break; |
3759 | case CTK_DIR_LEFT: |
3760 | g_return_if_fail (toplevel->priv->orientation & PANEL_HORIZONTAL_MASK)do { if ((toplevel->priv->orientation & (PANEL_ORIENTATION_TOP | PANEL_ORIENTATION_BOTTOM))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char*) (__func__)), "toplevel->priv->orientation & PANEL_HORIZONTAL_MASK" ); return; } } while (0); |
3761 | toplevel->priv->state = PANEL_STATE_HIDDEN_LEFT; |
3762 | break; |
3763 | case CTK_DIR_RIGHT: |
3764 | g_return_if_fail (toplevel->priv->orientation & PANEL_HORIZONTAL_MASK)do { if ((toplevel->priv->orientation & (PANEL_ORIENTATION_TOP | PANEL_ORIENTATION_BOTTOM))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char*) (__func__)), "toplevel->priv->orientation & PANEL_HORIZONTAL_MASK" ); return; } } while (0); |
3765 | toplevel->priv->state = PANEL_STATE_HIDDEN_RIGHT; |
3766 | break; |
3767 | default: |
3768 | g_assert_not_reached ()do { g_assertion_message_expr (((gchar*) 0), "panel-toplevel.c" , 3768, ((const char*) (__func__)), ((void*)0)); } while (0); |
3769 | break; |
3770 | } |
3771 | |
3772 | panel_toplevel_update_hide_buttons (toplevel); |
3773 | } |
3774 | |
3775 | if (toplevel->priv->animate && ctk_widget_get_realized (CTK_WIDGET (toplevel)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), ((ctk_widget_get_type ())))))))) { |
3776 | panel_toplevel_start_animation (toplevel); |
3777 | } |
3778 | |
3779 | /* if the toplevel is attached (-> drawer), hide it after the animation |
3780 | * this hides the hide button properly as well */ |
3781 | if (toplevel->priv->attached) { |
3782 | ctk_widget_hide (CTK_WIDGET (toplevel)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), ((ctk_widget_get_type ()))))))); |
3783 | } |
3784 | |
3785 | ctk_widget_queue_resize (CTK_WIDGET (toplevel)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), ((ctk_widget_get_type ()))))))); |
3786 | } |
3787 | |
3788 | static gboolean |
3789 | panel_toplevel_auto_hide_timeout_handler (PanelToplevel *toplevel) |
3790 | { |
3791 | g_return_val_if_fail (PANEL_IS_TOPLEVEL (toplevel), FALSE)do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((toplevel)); GType __t = ((panel_toplevel_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; })))))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char* ) (__func__)), "PANEL_IS_TOPLEVEL (toplevel)"); return ((0)); } } while (0); |
3792 | |
3793 | if (panel_toplevel_get_autohide_disabled (toplevel)) { |
3794 | toplevel->priv->hide_timeout = 0; |
3795 | return FALSE(0); |
3796 | } |
3797 | |
3798 | /* keep coming back until the animation has finished. |
3799 | * FIXME: we should really remove the timeout/idle |
3800 | * completely and re-instate it when the |
3801 | * animation has finished. |
3802 | */ |
3803 | if (toplevel->priv->animating) |
3804 | return TRUE(!(0)); |
3805 | |
3806 | panel_toplevel_hide (toplevel, TRUE(!(0)), -1); |
3807 | |
3808 | toplevel->priv->hide_timeout = 0; |
3809 | |
3810 | return FALSE(0); |
3811 | } |
3812 | |
3813 | void |
3814 | panel_toplevel_unhide (PanelToplevel *toplevel) |
3815 | { |
3816 | g_return_if_fail (PANEL_IS_TOPLEVEL (toplevel))do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((toplevel)); GType __t = ((panel_toplevel_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; })))))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char* ) (__func__)), "PANEL_IS_TOPLEVEL (toplevel)"); return; } } while (0); |
3817 | |
3818 | if (toplevel->priv->state == PANEL_STATE_NORMAL) |
3819 | return; |
3820 | |
3821 | toplevel->priv->state = PANEL_STATE_NORMAL; |
3822 | |
3823 | panel_toplevel_update_hide_buttons (toplevel); |
3824 | |
3825 | if (toplevel->priv->attach_toplevel) |
3826 | panel_toplevel_push_autohide_disabler (toplevel->priv->attach_toplevel); |
3827 | |
3828 | if (toplevel->priv->animate && ctk_widget_get_realized (CTK_WIDGET (toplevel)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), ((ctk_widget_get_type ())))))))) { |
3829 | panel_toplevel_start_animation (toplevel); |
3830 | } |
3831 | |
3832 | /* if the toplevel is attached (-> drawer), unhide it after the animation |
3833 | * (same as for hide) */ |
3834 | if (toplevel->priv->attached) { |
3835 | ctk_widget_show (CTK_WIDGET (toplevel)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), ((ctk_widget_get_type ()))))))); |
3836 | } |
3837 | |
3838 | ctk_widget_queue_resize (CTK_WIDGET (toplevel)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), ((ctk_widget_get_type ()))))))); |
3839 | |
3840 | if (!toplevel->priv->animate) |
3841 | g_signal_emit (toplevel, toplevel_signals [UNHIDE_SIGNAL], 0); |
3842 | } |
3843 | |
3844 | static gboolean |
3845 | panel_toplevel_auto_unhide_timeout_handler (PanelToplevel *toplevel) |
3846 | { |
3847 | g_return_val_if_fail (PANEL_IS_TOPLEVEL (toplevel), FALSE)do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((toplevel)); GType __t = ((panel_toplevel_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; })))))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char* ) (__func__)), "PANEL_IS_TOPLEVEL (toplevel)"); return ((0)); } } while (0); |
3848 | |
3849 | /* keep coming back until the animation has finished. |
3850 | * FIXME: we should really remove the timeout/idle |
3851 | * completely and re-instate it when the |
3852 | * animation has finished. |
3853 | */ |
3854 | if (toplevel->priv->animating) |
3855 | return TRUE(!(0)); |
3856 | |
3857 | if (!toplevel->priv->animate) |
3858 | toplevel->priv->initial_animation_done = TRUE(!(0)); |
3859 | |
3860 | /* initial animation for auto-hidden panels: we need to unhide and hide |
3861 | * again to get at the right size */ |
3862 | if (!toplevel->priv->initial_animation_done && |
3863 | toplevel->priv->auto_hide) { |
3864 | toplevel->priv->unhide_timeout = 0; |
3865 | panel_toplevel_unhide (toplevel); |
3866 | panel_toplevel_hide (toplevel, TRUE(!(0)), -1); |
3867 | return FALSE(0); |
3868 | } |
3869 | |
3870 | if (!panel_toplevel_contains_pointer (toplevel) && |
3871 | toplevel->priv->auto_hide) { |
3872 | toplevel->priv->unhide_timeout = 0; |
3873 | return FALSE(0); |
3874 | } |
3875 | |
3876 | panel_toplevel_unhide (toplevel); |
3877 | |
3878 | toplevel->priv->unhide_timeout = 0; |
3879 | |
3880 | return FALSE(0); |
3881 | } |
3882 | |
3883 | void |
3884 | panel_toplevel_queue_auto_hide (PanelToplevel *toplevel) |
3885 | { |
3886 | g_return_if_fail (PANEL_IS_TOPLEVEL (toplevel))do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((toplevel)); GType __t = ((panel_toplevel_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; })))))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char* ) (__func__)), "PANEL_IS_TOPLEVEL (toplevel)"); return; } } while (0); |
3887 | |
3888 | if (!toplevel->priv->auto_hide || |
3889 | panel_toplevel_contains_pointer (toplevel) || |
3890 | panel_toplevel_get_autohide_disabled (toplevel)) |
3891 | return; |
3892 | |
3893 | if (toplevel->priv->unhide_timeout) |
3894 | g_source_remove (toplevel->priv->unhide_timeout); |
3895 | toplevel->priv->unhide_timeout = 0; |
3896 | |
3897 | if (toplevel->priv->hide_timeout || |
3898 | toplevel->priv->state != PANEL_STATE_NORMAL) |
3899 | return; |
3900 | |
3901 | if (toplevel->priv->hide_delay > 0) |
3902 | toplevel->priv->hide_timeout = |
3903 | g_timeout_add (toplevel->priv->hide_delay, |
3904 | (GSourceFunc) panel_toplevel_auto_hide_timeout_handler, |
3905 | toplevel); |
3906 | else |
3907 | toplevel->priv->hide_timeout = |
3908 | g_idle_add ((GSourceFunc) panel_toplevel_auto_hide_timeout_handler, |
3909 | toplevel); |
3910 | } |
3911 | |
3912 | void |
3913 | panel_toplevel_queue_auto_unhide (PanelToplevel *toplevel) |
3914 | { |
3915 | g_return_if_fail (PANEL_IS_TOPLEVEL (toplevel))do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((toplevel)); GType __t = ((panel_toplevel_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; })))))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char* ) (__func__)), "PANEL_IS_TOPLEVEL (toplevel)"); return; } } while (0); |
3916 | |
3917 | if (toplevel->priv->unhide_timeout) |
3918 | return; |
3919 | |
3920 | if (toplevel->priv->hide_timeout) |
3921 | g_source_remove (toplevel->priv->hide_timeout); |
3922 | toplevel->priv->hide_timeout = 0; |
3923 | |
3924 | if (toplevel->priv->state != PANEL_STATE_AUTO_HIDDEN) |
3925 | return; |
3926 | |
3927 | if (toplevel->priv->unhide_delay > 0) |
3928 | toplevel->priv->unhide_timeout = |
3929 | g_timeout_add (toplevel->priv->unhide_delay, |
3930 | (GSourceFunc) panel_toplevel_auto_unhide_timeout_handler, |
3931 | toplevel); |
3932 | else |
3933 | toplevel->priv->unhide_timeout = |
3934 | g_idle_add ((GSourceFunc) panel_toplevel_auto_unhide_timeout_handler, |
3935 | toplevel); |
3936 | } |
3937 | |
3938 | void |
3939 | panel_toplevel_queue_initial_unhide (PanelToplevel *toplevel) |
3940 | { |
3941 | g_return_if_fail (PANEL_IS_TOPLEVEL (toplevel))do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((toplevel)); GType __t = ((panel_toplevel_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; })))))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char* ) (__func__)), "PANEL_IS_TOPLEVEL (toplevel)"); return; } } while (0); |
3942 | |
3943 | if (toplevel->priv->initial_animation_done) |
3944 | return; |
3945 | |
3946 | if (toplevel->priv->unhide_timeout) |
3947 | return; |
3948 | |
3949 | toplevel->priv->unhide_timeout = |
3950 | g_idle_add ((GSourceFunc) panel_toplevel_auto_unhide_timeout_handler, |
3951 | toplevel); |
3952 | } |
3953 | |
3954 | static gboolean |
3955 | panel_toplevel_enter_notify_event (CtkWidget *widget, |
3956 | CdkEventCrossing *event) |
3957 | { |
3958 | PanelToplevel *toplevel; |
3959 | |
3960 | g_return_val_if_fail (PANEL_IS_TOPLEVEL (widget), FALSE)do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((widget)); GType __t = ((panel_toplevel_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; })))))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char* ) (__func__)), "PANEL_IS_TOPLEVEL (widget)"); return ((0)); } } while (0); |
3961 | |
3962 | toplevel = PANEL_TOPLEVEL (widget)((((PanelToplevel*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((widget)), ((panel_toplevel_get_type ())))))); |
3963 | |
3964 | if (toplevel->priv->auto_hide && event->detail != CDK_NOTIFY_INFERIOR) |
3965 | panel_toplevel_queue_auto_unhide (toplevel); |
3966 | |
3967 | if (CTK_WIDGET_CLASS (panel_toplevel_parent_class)((((CtkWidgetClass*) (void *) g_type_check_class_cast ((GTypeClass *) ((panel_toplevel_parent_class)), ((ctk_widget_get_type ()) )))))->enter_notify_event) |
3968 | return CTK_WIDGET_CLASS (panel_toplevel_parent_class)((((CtkWidgetClass*) (void *) g_type_check_class_cast ((GTypeClass *) ((panel_toplevel_parent_class)), ((ctk_widget_get_type ()) )))))->enter_notify_event (widget, event); |
3969 | |
3970 | return FALSE(0); |
3971 | } |
3972 | |
3973 | static gboolean |
3974 | panel_toplevel_leave_notify_event (CtkWidget *widget, |
3975 | CdkEventCrossing *event) |
3976 | { |
3977 | PanelToplevel *toplevel; |
3978 | |
3979 | g_return_val_if_fail (PANEL_IS_TOPLEVEL (widget), FALSE)do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((widget)); GType __t = ((panel_toplevel_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; })))))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char* ) (__func__)), "PANEL_IS_TOPLEVEL (widget)"); return ((0)); } } while (0); |
3980 | |
3981 | toplevel = PANEL_TOPLEVEL (widget)((((PanelToplevel*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((widget)), ((panel_toplevel_get_type ())))))); |
3982 | |
3983 | if (toplevel->priv->auto_hide && event->detail != CDK_NOTIFY_INFERIOR) |
3984 | panel_toplevel_queue_auto_hide (toplevel); |
3985 | |
3986 | if (CTK_WIDGET_CLASS (panel_toplevel_parent_class)((((CtkWidgetClass*) (void *) g_type_check_class_cast ((GTypeClass *) ((panel_toplevel_parent_class)), ((ctk_widget_get_type ()) )))))->leave_notify_event) |
3987 | return CTK_WIDGET_CLASS (panel_toplevel_parent_class)((((CtkWidgetClass*) (void *) g_type_check_class_cast ((GTypeClass *) ((panel_toplevel_parent_class)), ((ctk_widget_get_type ()) )))))->leave_notify_event (widget, event); |
3988 | |
3989 | return FALSE(0); |
3990 | } |
3991 | |
3992 | static gboolean |
3993 | panel_toplevel_focus_in_event (CtkWidget *widget, |
3994 | CdkEventFocus *event) |
3995 | { |
3996 | PanelToplevel *toplevel = PANEL_TOPLEVEL (widget)((((PanelToplevel*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((widget)), ((panel_toplevel_get_type ())))))); |
3997 | |
3998 | if (toplevel->priv->state == PANEL_STATE_AUTO_HIDDEN) |
3999 | panel_toplevel_unhide (toplevel); |
4000 | |
4001 | if (CTK_WIDGET_CLASS (panel_toplevel_parent_class)((((CtkWidgetClass*) (void *) g_type_check_class_cast ((GTypeClass *) ((panel_toplevel_parent_class)), ((ctk_widget_get_type ()) )))))->focus_in_event) |
4002 | return CTK_WIDGET_CLASS (panel_toplevel_parent_class)((((CtkWidgetClass*) (void *) g_type_check_class_cast ((GTypeClass *) ((panel_toplevel_parent_class)), ((ctk_widget_get_type ()) )))))->focus_in_event (widget, event); |
4003 | |
4004 | return FALSE(0); |
4005 | } |
4006 | |
4007 | static gboolean |
4008 | panel_toplevel_focus_out_event (CtkWidget *widget, |
4009 | CdkEventFocus *event) |
4010 | { |
4011 | PanelToplevel *toplevel = PANEL_TOPLEVEL (widget)((((PanelToplevel*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((widget)), ((panel_toplevel_get_type ())))))); |
4012 | |
4013 | /* It appears that sometimes we don't get a leave notify event, |
4014 | but just a focus in/out, so queue the autohide in that case. |
4015 | If the pointer is inside the panel then obviously we won't hide */ |
4016 | if (toplevel->priv->auto_hide) |
4017 | panel_toplevel_queue_auto_hide (toplevel); |
4018 | |
4019 | if (CTK_WIDGET_CLASS (panel_toplevel_parent_class)((((CtkWidgetClass*) (void *) g_type_check_class_cast ((GTypeClass *) ((panel_toplevel_parent_class)), ((ctk_widget_get_type ()) )))))->focus_out_event) |
4020 | return CTK_WIDGET_CLASS (panel_toplevel_parent_class)((((CtkWidgetClass*) (void *) g_type_check_class_cast ((GTypeClass *) ((panel_toplevel_parent_class)), ((ctk_widget_get_type ()) )))))->focus_out_event (widget, event); |
4021 | |
4022 | return FALSE(0); |
4023 | } |
4024 | |
4025 | static void |
4026 | panel_toplevel_style_updated (CtkWidget *widget) |
4027 | { |
4028 | panel_toplevel_update_hide_buttons (PANEL_TOPLEVEL (widget)((((PanelToplevel*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((widget)), ((panel_toplevel_get_type ()))))))); |
4029 | |
4030 | if (CTK_WIDGET_CLASS (panel_toplevel_parent_class)((((CtkWidgetClass*) (void *) g_type_check_class_cast ((GTypeClass *) ((panel_toplevel_parent_class)), ((ctk_widget_get_type ()) )))))->style_updated) |
4031 | CTK_WIDGET_CLASS (panel_toplevel_parent_class)((((CtkWidgetClass*) (void *) g_type_check_class_cast ((GTypeClass *) ((panel_toplevel_parent_class)), ((ctk_widget_get_type ()) )))))->style_updated (widget); |
4032 | |
4033 | set_background_default_style (widget); |
4034 | } |
4035 | |
4036 | static void |
4037 | panel_toplevel_drag_threshold_changed (PanelToplevel *toplevel) |
4038 | { |
4039 | int threshold; |
4040 | |
4041 | threshold = 0; |
4042 | g_object_get (G_OBJECT (toplevel->priv->ctk_settings)((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel->priv->ctk_settings)), (((GType) ((20) << (2)))))))), |
4043 | "ctk-dnd-drag-threshold", &threshold, |
4044 | NULL((void*)0)); |
4045 | |
4046 | if (threshold) |
4047 | toplevel->priv->snap_tolerance = threshold * SNAP_TOLERANCE_FACTOR6; |
4048 | } |
4049 | |
4050 | static void |
4051 | panel_toplevel_update_ctk_settings (PanelToplevel *toplevel) |
4052 | { |
4053 | if (toplevel->priv->ctk_settings) |
4054 | g_signal_handlers_disconnect_by_func (toplevel->priv->ctk_settings,g_signal_handlers_disconnect_matched ((toplevel->priv-> ctk_settings), (GSignalMatchType) (G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA ), 0, 0, ((void*)0), (((GCallback) (panel_toplevel_drag_threshold_changed ))), (toplevel)) |
4055 | G_CALLBACK (panel_toplevel_drag_threshold_changed),g_signal_handlers_disconnect_matched ((toplevel->priv-> ctk_settings), (GSignalMatchType) (G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA ), 0, 0, ((void*)0), (((GCallback) (panel_toplevel_drag_threshold_changed ))), (toplevel)) |
4056 | toplevel)g_signal_handlers_disconnect_matched ((toplevel->priv-> ctk_settings), (GSignalMatchType) (G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA ), 0, 0, ((void*)0), (((GCallback) (panel_toplevel_drag_threshold_changed ))), (toplevel)); |
4057 | |
4058 | toplevel->priv->ctk_settings = ctk_widget_get_settings (CTK_WIDGET (toplevel->priv->panel_widget)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel->priv->panel_widget)), ((ctk_widget_get_type ()))))))); |
4059 | |
4060 | g_signal_connect_swapped (G_OBJECT (toplevel->priv->ctk_settings),g_signal_connect_data ((((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance*) ((toplevel->priv->ctk_settings)), (( (GType) ((20) << (2))))))))), ("notify::ctk-dnd-drag-threshold" ), (((GCallback) (panel_toplevel_drag_threshold_changed))), ( toplevel), ((void*)0), G_CONNECT_SWAPPED) |
4061 | "notify::ctk-dnd-drag-threshold",g_signal_connect_data ((((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance*) ((toplevel->priv->ctk_settings)), (( (GType) ((20) << (2))))))))), ("notify::ctk-dnd-drag-threshold" ), (((GCallback) (panel_toplevel_drag_threshold_changed))), ( toplevel), ((void*)0), G_CONNECT_SWAPPED) |
4062 | G_CALLBACK (panel_toplevel_drag_threshold_changed),g_signal_connect_data ((((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance*) ((toplevel->priv->ctk_settings)), (( (GType) ((20) << (2))))))))), ("notify::ctk-dnd-drag-threshold" ), (((GCallback) (panel_toplevel_drag_threshold_changed))), ( toplevel), ((void*)0), G_CONNECT_SWAPPED) |
4063 | toplevel)g_signal_connect_data ((((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance*) ((toplevel->priv->ctk_settings)), (( (GType) ((20) << (2))))))))), ("notify::ctk-dnd-drag-threshold" ), (((GCallback) (panel_toplevel_drag_threshold_changed))), ( toplevel), ((void*)0), G_CONNECT_SWAPPED); |
4064 | |
4065 | panel_toplevel_drag_threshold_changed (toplevel); |
4066 | } |
4067 | |
4068 | static void |
4069 | panel_toplevel_screen_changed (CtkWidget *widget, |
4070 | CdkScreen *previous_screen) |
4071 | { |
4072 | panel_toplevel_update_ctk_settings (PANEL_TOPLEVEL (widget)((((PanelToplevel*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((widget)), ((panel_toplevel_get_type ()))))))); |
4073 | |
4074 | if (CTK_WIDGET_CLASS (panel_toplevel_parent_class)((((CtkWidgetClass*) (void *) g_type_check_class_cast ((GTypeClass *) ((panel_toplevel_parent_class)), ((ctk_widget_get_type ()) )))))->screen_changed) |
4075 | CTK_WIDGET_CLASS (panel_toplevel_parent_class)((((CtkWidgetClass*) (void *) g_type_check_class_cast ((GTypeClass *) ((panel_toplevel_parent_class)), ((ctk_widget_get_type ()) )))))->screen_changed (widget, previous_screen); |
4076 | |
4077 | ctk_widget_queue_resize (widget); |
4078 | } |
4079 | |
4080 | static void |
4081 | panel_toplevel_set_property (GObject *object, |
4082 | guint prop_id, |
4083 | const GValue *value, |
4084 | GParamSpec *pspec) |
4085 | { |
4086 | PanelToplevel *toplevel; |
4087 | |
4088 | g_return_if_fail (PANEL_IS_TOPLEVEL (object))do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((object)); GType __t = ((panel_toplevel_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; })))))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char* ) (__func__)), "PANEL_IS_TOPLEVEL (object)"); return; } } while (0); |
4089 | |
4090 | toplevel = PANEL_TOPLEVEL (object)((((PanelToplevel*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((object)), ((panel_toplevel_get_type ())))))); |
4091 | |
4092 | switch (prop_id) { |
4093 | case PROP_NAME: |
4094 | panel_toplevel_set_name (toplevel, g_value_get_string (value)); |
4095 | break; |
4096 | case PROP_SETTINGS_PATH: |
4097 | panel_toplevel_set_settings_path (toplevel, g_value_get_string (value)); |
4098 | break; |
4099 | case PROP_EXPAND: |
4100 | panel_toplevel_set_expand (toplevel, g_value_get_boolean (value)); |
4101 | break; |
4102 | case PROP_ORIENTATION: |
4103 | panel_toplevel_set_orientation (toplevel, g_value_get_enum (value)); |
4104 | break; |
4105 | case PROP_SIZE: |
4106 | panel_toplevel_set_size (toplevel, g_value_get_int (value)); |
4107 | break; |
4108 | case PROP_X: |
4109 | panel_toplevel_set_x (toplevel, |
4110 | g_value_get_int (value), |
4111 | toplevel->priv->x_right, |
4112 | toplevel->priv->x_centered); |
4113 | break; |
4114 | case PROP_X_RIGHT: |
4115 | panel_toplevel_set_x (toplevel, |
4116 | toplevel->priv->x, |
4117 | g_value_get_int (value), |
4118 | toplevel->priv->x_centered); |
4119 | break; |
4120 | case PROP_X_CENTERED: |
4121 | panel_toplevel_set_x (toplevel, |
4122 | toplevel->priv->x, |
4123 | toplevel->priv->x_right, |
4124 | g_value_get_boolean (value)); |
4125 | break; |
4126 | case PROP_Y: |
4127 | panel_toplevel_set_y (toplevel, |
4128 | g_value_get_int (value), |
4129 | toplevel->priv->y_bottom, |
4130 | toplevel->priv->y_centered); |
4131 | break; |
4132 | case PROP_Y_BOTTOM: |
4133 | panel_toplevel_set_y (toplevel, |
4134 | toplevel->priv->y, |
4135 | g_value_get_int (value), |
4136 | toplevel->priv->y_centered); |
4137 | break; |
4138 | case PROP_Y_CENTERED: |
4139 | panel_toplevel_set_y (toplevel, |
4140 | toplevel->priv->y, |
4141 | toplevel->priv->y_bottom, |
4142 | g_value_get_boolean (value)); |
4143 | break; |
4144 | case PROP_MONITOR: |
4145 | panel_toplevel_set_monitor (toplevel, g_value_get_int (value)); |
4146 | break; |
4147 | case PROP_AUTOHIDE: |
4148 | panel_toplevel_set_auto_hide (toplevel, g_value_get_boolean (value)); |
4149 | break; |
4150 | case PROP_HIDE_DELAY: |
4151 | panel_toplevel_set_hide_delay (toplevel, g_value_get_int (value)); |
4152 | break; |
4153 | case PROP_UNHIDE_DELAY: |
4154 | panel_toplevel_set_unhide_delay (toplevel, g_value_get_int (value)); |
4155 | break; |
4156 | case PROP_AUTOHIDE_SIZE: |
4157 | panel_toplevel_set_auto_hide_size (toplevel, g_value_get_int (value)); |
4158 | break; |
4159 | case PROP_ANIMATE: |
4160 | panel_toplevel_set_animate (toplevel, g_value_get_boolean (value)); |
4161 | break; |
4162 | case PROP_ANIMATION_SPEED: |
4163 | panel_toplevel_set_animation_speed (toplevel, g_value_get_enum (value)); |
4164 | break; |
4165 | case PROP_BUTTONS_ENABLED: |
4166 | panel_toplevel_set_enable_buttons (toplevel, g_value_get_boolean (value)); |
4167 | break; |
4168 | case PROP_ARROWS_ENABLED: |
4169 | panel_toplevel_set_enable_arrows (toplevel, g_value_get_boolean (value)); |
4170 | break; |
4171 | default: |
4172 | G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec)do { GObject *_glib__object = (GObject*) ((object)); GParamSpec *_glib__pspec = (GParamSpec*) ((pspec)); guint _glib__property_id = ((prop_id)); g_warning ("%s:%d: invalid %s id %u for \"%s\" of type '%s' in '%s'" , "panel-toplevel.c", 4172, ("property"), _glib__property_id, _glib__pspec->name, g_type_name ((((((GTypeClass*) (((GTypeInstance *) (_glib__pspec))->g_class))->g_type)))), (g_type_name ((((((GTypeClass*) (((GTypeInstance*) (_glib__object))->g_class ))->g_type)))))); } while (0); |
4173 | break; |
4174 | } |
4175 | } |
4176 | |
4177 | static void |
4178 | panel_toplevel_get_property (GObject *object, |
4179 | guint prop_id, |
4180 | GValue *value, |
4181 | GParamSpec *pspec) |
4182 | { |
4183 | PanelToplevel *toplevel; |
4184 | |
4185 | g_return_if_fail (PANEL_IS_TOPLEVEL (object))do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((object)); GType __t = ((panel_toplevel_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; })))))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char* ) (__func__)), "PANEL_IS_TOPLEVEL (object)"); return; } } while (0); |
4186 | |
4187 | toplevel = PANEL_TOPLEVEL (object)((((PanelToplevel*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((object)), ((panel_toplevel_get_type ())))))); |
4188 | |
4189 | switch (prop_id) { |
4190 | case PROP_NAME: |
4191 | g_value_set_string (value, panel_toplevel_get_name (toplevel)); |
4192 | break; |
4193 | case PROP_SETTINGS_PATH: |
4194 | g_value_set_string (value, toplevel->priv->settings_path); |
4195 | break; |
4196 | case PROP_EXPAND: |
4197 | g_value_set_boolean (value, toplevel->priv->expand); |
4198 | break; |
4199 | case PROP_ORIENTATION: |
4200 | g_value_set_enum (value, toplevel->priv->orientation); |
4201 | break; |
4202 | case PROP_SIZE: |
4203 | g_value_set_int (value, toplevel->priv->size); |
4204 | break; |
4205 | case PROP_X: |
4206 | g_value_set_int (value, toplevel->priv->x); |
4207 | break; |
4208 | case PROP_X_RIGHT: |
4209 | g_value_set_int (value, toplevel->priv->x_right); |
4210 | break; |
4211 | case PROP_X_CENTERED: |
4212 | g_value_set_boolean (value, toplevel->priv->x_centered); |
4213 | break; |
4214 | case PROP_Y: |
4215 | g_value_set_int (value, toplevel->priv->y); |
4216 | break; |
4217 | case PROP_Y_BOTTOM: |
4218 | g_value_set_int (value, toplevel->priv->y_bottom); |
4219 | break; |
4220 | case PROP_Y_CENTERED: |
4221 | g_value_set_boolean (value, toplevel->priv->y_centered); |
4222 | break; |
4223 | case PROP_MONITOR: |
4224 | g_value_set_int (value, toplevel->priv->monitor); |
4225 | break; |
4226 | case PROP_AUTOHIDE: |
4227 | g_value_set_boolean (value, toplevel->priv->auto_hide); |
4228 | break; |
4229 | case PROP_HIDE_DELAY: |
4230 | g_value_set_int (value, toplevel->priv->hide_delay); |
4231 | break; |
4232 | case PROP_UNHIDE_DELAY: |
4233 | g_value_set_int (value, toplevel->priv->unhide_delay); |
4234 | break; |
4235 | case PROP_AUTOHIDE_SIZE: |
4236 | g_value_set_int (value, toplevel->priv->auto_hide_size); |
4237 | break; |
4238 | case PROP_ANIMATE: |
4239 | g_value_set_boolean (value, toplevel->priv->animate); |
4240 | break; |
4241 | case PROP_ANIMATION_SPEED: |
4242 | g_value_set_enum (value, toplevel->priv->animation_speed); |
4243 | break; |
4244 | case PROP_BUTTONS_ENABLED: |
4245 | g_value_set_boolean (value, toplevel->priv->buttons_enabled); |
4246 | break; |
4247 | case PROP_ARROWS_ENABLED: |
4248 | g_value_set_boolean (value, toplevel->priv->arrows_enabled); |
4249 | break; |
4250 | default: |
4251 | G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec)do { GObject *_glib__object = (GObject*) ((object)); GParamSpec *_glib__pspec = (GParamSpec*) ((pspec)); guint _glib__property_id = ((prop_id)); g_warning ("%s:%d: invalid %s id %u for \"%s\" of type '%s' in '%s'" , "panel-toplevel.c", 4251, ("property"), _glib__property_id, _glib__pspec->name, g_type_name ((((((GTypeClass*) (((GTypeInstance *) (_glib__pspec))->g_class))->g_type)))), (g_type_name ((((((GTypeClass*) (((GTypeInstance*) (_glib__object))->g_class ))->g_type)))))); } while (0); |
4252 | break; |
4253 | } |
4254 | } |
4255 | |
4256 | static GObject* |
4257 | panel_toplevel_constructor (GType type, |
4258 | guint n_construct_properties, |
4259 | GObjectConstructParam *construct_properties) |
4260 | { |
4261 | GObject *object; |
4262 | |
4263 | object = G_OBJECT_CLASS (panel_toplevel_parent_class)((((GObjectClass*) (void *) g_type_check_class_cast ((GTypeClass *) ((panel_toplevel_parent_class)), (((GType) ((20) << ( 2))))))))->constructor (type, |
4264 | n_construct_properties, |
4265 | construct_properties); |
4266 | PanelToplevel *toplevel = PANEL_TOPLEVEL(object)((((PanelToplevel*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((object)), ((panel_toplevel_get_type ())))))); |
4267 | CdkScreen *screen = ctk_widget_get_screen(CTK_WIDGET(toplevel)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), ((ctk_widget_get_type ()))))))); |
4268 | CdkVisual *visual = cdk_screen_get_rgba_visual(screen); |
4269 | ctk_widget_set_visual(CTK_WIDGET(toplevel)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), ((ctk_widget_get_type ())))))), visual); |
4270 | |
4271 | return object; |
4272 | } |
4273 | |
4274 | static void |
4275 | panel_toplevel_finalize (GObject *object) |
4276 | { |
4277 | PanelToplevel *toplevel = (PanelToplevel *) object; |
4278 | |
4279 | #ifdef HAVE_X111 |
4280 | if (CDK_IS_X11_DISPLAY (ctk_widget_get_display (CTK_WIDGET (toplevel)))(((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) ( (ctk_widget_get_display (((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance*) ((toplevel)), ((ctk_widget_get_type ())))) ))))); GType __t = ((cdk_x11_display_get_type())); gboolean __r ; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; }))))) |
4281 | panel_struts_unregister_strut (toplevel); |
4282 | #endif // HAVE_X11 |
4283 | |
4284 | toplevel_list = g_slist_remove (toplevel_list, toplevel); |
4285 | |
4286 | G_OBJECT_CLASS (panel_toplevel_parent_class)((((GObjectClass*) (void *) g_type_check_class_cast ((GTypeClass *) ((panel_toplevel_parent_class)), (((GType) ((20) << ( 2))))))))->finalize (object); |
4287 | } |
4288 | |
4289 | static void |
4290 | panel_toplevel_class_init (PanelToplevelClass *klass) |
4291 | { |
4292 | GObjectClass *gobject_class = (GObjectClass *) klass; |
4293 | CtkWidgetClass *widget_class = (CtkWidgetClass *) klass; |
4294 | CtkContainerClass *container_class = (CtkContainerClass *) klass; |
4295 | CtkBindingSet *binding_set; |
4296 | |
4297 | binding_set = ctk_binding_set_by_class (klass); |
4298 | |
4299 | gobject_class->constructor = panel_toplevel_constructor; |
4300 | gobject_class->set_property = panel_toplevel_set_property; |
4301 | gobject_class->get_property = panel_toplevel_get_property; |
4302 | gobject_class->finalize = panel_toplevel_finalize; |
4303 | |
4304 | gobject_class->dispose = panel_toplevel_dispose; |
4305 | |
4306 | widget_class->realize = panel_toplevel_realize; |
4307 | widget_class->unrealize = panel_toplevel_unrealize; |
4308 | widget_class->state_flags_changed = panel_toplevel_state_flags_changed; |
4309 | widget_class->draw = panel_toplevel_draw; |
4310 | widget_class->get_preferred_width = panel_toplevel_get_preferred_width; |
4311 | widget_class->get_preferred_height = panel_toplevel_get_preferred_height; |
4312 | widget_class->style_updated = panel_toplevel_style_updated; |
4313 | widget_class->size_allocate = panel_toplevel_size_allocate; |
4314 | widget_class->button_press_event = panel_toplevel_button_press_event; |
4315 | widget_class->button_release_event = panel_toplevel_button_release_event; |
4316 | widget_class->configure_event = panel_toplevel_configure_event; |
4317 | widget_class->key_press_event = panel_toplevel_key_press_event; |
4318 | widget_class->motion_notify_event = panel_toplevel_motion_notify_event; |
4319 | widget_class->enter_notify_event = panel_toplevel_enter_notify_event; |
4320 | widget_class->leave_notify_event = panel_toplevel_leave_notify_event; |
4321 | widget_class->screen_changed = panel_toplevel_screen_changed; |
4322 | widget_class->focus_in_event = panel_toplevel_focus_in_event; |
4323 | widget_class->focus_out_event = panel_toplevel_focus_out_event; |
4324 | |
4325 | ctk_widget_class_set_css_name (widget_class, "PanelToplevel"); |
4326 | |
4327 | container_class->check_resize = panel_toplevel_check_resize; |
4328 | |
4329 | klass->hiding = NULL((void*)0); |
4330 | klass->unhiding = NULL((void*)0); |
4331 | klass->popup_panel_menu = panel_toplevel_popup_panel_menu; |
4332 | klass->toggle_expand = panel_toplevel_toggle_expand; |
4333 | klass->expand = panel_toplevel_expand; |
4334 | klass->unexpand = panel_toplevel_unexpand; |
4335 | klass->toggle_hidden = panel_toplevel_toggle_hidden; |
4336 | klass->begin_move = panel_toplevel_begin_move; |
4337 | klass->begin_resize = panel_toplevel_begin_resize; |
4338 | |
4339 | g_object_class_install_property ( |
4340 | gobject_class, |
4341 | PROP_NAME, |
4342 | g_param_spec_string ( |
4343 | "name", |
4344 | "Name", |
4345 | "The name of this panel", |
4346 | NULL((void*)0), |
4347 | G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); |
4348 | |
4349 | g_object_class_install_property ( |
4350 | gobject_class, |
4351 | PROP_SETTINGS_PATH, |
4352 | g_param_spec_string ( |
4353 | "settings-path", |
4354 | "GSettings path", |
4355 | "The GSettings path used for this panel", |
4356 | NULL((void*)0), |
4357 | G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); |
4358 | |
4359 | g_object_class_install_property ( |
4360 | gobject_class, |
4361 | PROP_EXPAND, |
4362 | g_param_spec_boolean ( |
4363 | "expand", |
4364 | "Expand", |
4365 | "Expand to take up the full monitor width/height", |
4366 | TRUE(!(0)), |
4367 | G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); |
4368 | |
4369 | g_object_class_install_property ( |
4370 | gobject_class, |
4371 | PROP_ORIENTATION, |
4372 | g_param_spec_enum ( |
4373 | "orientation", |
4374 | "Orientation", |
4375 | "The orientation of the panel", |
4376 | PANEL_TYPE_ORIENTATIONpanel_orientation_get_type(), |
4377 | PANEL_ORIENTATION_TOP, |
4378 | G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); |
4379 | |
4380 | g_object_class_install_property ( |
4381 | gobject_class, |
4382 | PROP_SIZE, |
4383 | g_param_spec_int ( |
4384 | "size", |
4385 | "Size", |
4386 | "The height (or width when vertical) of the panel", |
4387 | 0, |
4388 | G_MAXINT2147483647, |
4389 | DEFAULT_SIZE48, |
4390 | G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); |
4391 | |
4392 | |
4393 | g_object_class_install_property ( |
4394 | gobject_class, |
4395 | PROP_X, |
4396 | g_param_spec_int ( |
4397 | "x", |
4398 | "X position", |
4399 | "The X position of the panel", |
4400 | 0, |
4401 | G_MAXINT2147483647, |
4402 | 0, |
4403 | G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); |
4404 | |
4405 | g_object_class_install_property ( |
4406 | gobject_class, |
4407 | PROP_X_RIGHT, |
4408 | g_param_spec_int ( |
4409 | "x-right", |
4410 | "X position, from the right", |
4411 | "The X position of the panel, starting from the right of the screen", |
4412 | -1, |
4413 | G_MAXINT2147483647, |
4414 | -1, |
4415 | G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); |
4416 | |
4417 | g_object_class_install_property ( |
4418 | gobject_class, |
4419 | PROP_X_CENTERED, |
4420 | g_param_spec_boolean ( |
4421 | "x-centered", |
4422 | "X centered", |
4423 | "The x co-ordinate is relative to center screen", |
4424 | FALSE(0), |
4425 | G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); |
4426 | |
4427 | g_object_class_install_property ( |
4428 | gobject_class, |
4429 | PROP_Y, |
4430 | g_param_spec_int ( |
4431 | "y", |
4432 | "Y position", |
4433 | "The Y position of the panel", |
4434 | 0, |
4435 | G_MAXINT2147483647, |
4436 | 0, |
4437 | G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); |
4438 | |
4439 | g_object_class_install_property ( |
4440 | gobject_class, |
4441 | PROP_Y_BOTTOM, |
4442 | g_param_spec_int ( |
4443 | "y_bottom", |
4444 | "Y position, from the bottom", |
4445 | "The Y position of the panel, starting from the bottom of the screen", |
4446 | -1, |
4447 | G_MAXINT2147483647, |
4448 | -1, |
4449 | G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); |
4450 | |
4451 | g_object_class_install_property ( |
4452 | gobject_class, |
4453 | PROP_Y_CENTERED, |
4454 | g_param_spec_boolean ( |
4455 | "y-centered", |
4456 | "Y centered", |
4457 | "The y co-ordinate is relative to center screen", |
4458 | FALSE(0), |
4459 | G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); |
4460 | |
4461 | g_object_class_install_property ( |
4462 | gobject_class, |
4463 | PROP_MONITOR, |
4464 | g_param_spec_int ( |
4465 | "monitor", |
4466 | "Xinerama monitor", |
4467 | "The monitor (in terms of Xinerama) which the panel is on", |
4468 | 0, |
4469 | G_MAXINT2147483647, |
4470 | 0, |
4471 | G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); |
4472 | |
4473 | g_object_class_install_property ( |
4474 | gobject_class, |
4475 | PROP_AUTOHIDE, |
4476 | g_param_spec_boolean ( |
4477 | "auto-hide", |
4478 | "Auto hide", |
4479 | "Automatically hide the panel when the mouse leaves the panel", |
4480 | FALSE(0), |
4481 | G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); |
4482 | |
4483 | g_object_class_install_property ( |
4484 | gobject_class, |
4485 | PROP_HIDE_DELAY, |
4486 | g_param_spec_int ( |
4487 | "hide-delay", |
4488 | "Hide delay", |
4489 | "The number of milliseconds to delay before automatically hiding", |
4490 | 0, |
4491 | G_MAXINT2147483647, |
4492 | DEFAULT_HIDE_DELAY300, |
4493 | G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); |
4494 | |
4495 | g_object_class_install_property ( |
4496 | gobject_class, |
4497 | PROP_UNHIDE_DELAY, |
4498 | g_param_spec_int ( |
4499 | "unhide-delay", |
4500 | "Un-hide delay", |
4501 | "The number of milliseconds to delay before automatically un-hiding", |
4502 | 0, |
4503 | G_MAXINT2147483647, |
4504 | DEFAULT_UNHIDE_DELAY100, |
4505 | G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); |
4506 | |
4507 | g_object_class_install_property ( |
4508 | gobject_class, |
4509 | PROP_AUTOHIDE_SIZE, |
4510 | g_param_spec_int ( |
4511 | "auto-hide-size", |
4512 | "Auto-hide size", |
4513 | "The number of pixels visible when the panel has been automatically hidden", |
4514 | 1, |
4515 | G_MAXINT2147483647, |
4516 | DEFAULT_AUTO_HIDE_SIZE1, |
4517 | G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); |
4518 | |
4519 | g_object_class_install_property ( |
4520 | gobject_class, |
4521 | PROP_ANIMATE, |
4522 | g_param_spec_boolean ( |
4523 | "animate", |
4524 | "Animate", |
4525 | "Enable hiding/showing animations", |
4526 | TRUE(!(0)), |
4527 | G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); |
4528 | |
4529 | g_object_class_install_property ( |
4530 | gobject_class, |
4531 | PROP_ANIMATION_SPEED, |
4532 | g_param_spec_enum ( |
4533 | "animation-speed", |
4534 | "Animation Speed", |
4535 | "The speed at which to animate panel hiding/showing", |
4536 | PANEL_TYPE_ANIMATION_SPEEDpanel_animation_speed_get_type(), |
4537 | PANEL_ANIMATION_MEDIUM, |
4538 | G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); |
4539 | |
4540 | g_object_class_install_property ( |
4541 | gobject_class, |
4542 | PROP_BUTTONS_ENABLED, |
4543 | g_param_spec_boolean ( |
4544 | "buttons-enabled", |
4545 | "Buttons Enabled", |
4546 | "Enable hide/show buttons", |
4547 | TRUE(!(0)), |
4548 | G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); |
4549 | |
4550 | g_object_class_install_property ( |
4551 | gobject_class, |
4552 | PROP_ARROWS_ENABLED, |
4553 | g_param_spec_boolean ( |
4554 | "arrows-enabled", |
4555 | "Arrows Enabled", |
4556 | "Enable arrows on hide/show buttons", |
4557 | TRUE(!(0)), |
4558 | G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); |
4559 | |
4560 | ctk_widget_class_install_style_property ( |
4561 | widget_class, |
4562 | g_param_spec_int ( |
4563 | "arrow-size", |
4564 | "Arrow Size", |
4565 | "The size of the arrows on the hide/show buttons", |
4566 | 0, |
4567 | G_MAXINT2147483647, |
4568 | DEFAULT_ARROW_SIZE20, |
4569 | G_PARAM_READABLE)); |
4570 | |
4571 | toplevel_signals [HIDE_SIGNAL] = |
4572 | g_signal_new ("hiding", |
4573 | G_TYPE_FROM_CLASS (gobject_class)(((GTypeClass*) (gobject_class))->g_type), |
4574 | G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION, |
4575 | G_STRUCT_OFFSET (PanelToplevelClass, hiding)((glong) __builtin_offsetof(PanelToplevelClass, hiding)), |
4576 | NULL((void*)0), |
4577 | NULL((void*)0), |
4578 | g_cclosure_marshal_VOID__VOID, |
4579 | G_TYPE_NONE((GType) ((1) << (2))), |
4580 | 0); |
4581 | |
4582 | toplevel_signals [UNHIDE_SIGNAL] = |
4583 | g_signal_new ("unhiding", |
4584 | G_TYPE_FROM_CLASS (gobject_class)(((GTypeClass*) (gobject_class))->g_type), |
4585 | G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION, |
4586 | G_STRUCT_OFFSET (PanelToplevelClass, unhiding)((glong) __builtin_offsetof(PanelToplevelClass, unhiding)), |
4587 | NULL((void*)0), |
4588 | NULL((void*)0), |
4589 | g_cclosure_marshal_VOID__VOID, |
4590 | G_TYPE_NONE((GType) ((1) << (2))), |
4591 | 0); |
4592 | |
4593 | toplevel_signals [POPUP_PANEL_MENU_SIGNAL] = |
4594 | g_signal_new ("popup-panel-menu", |
4595 | G_TYPE_FROM_CLASS (gobject_class)(((GTypeClass*) (gobject_class))->g_type), |
4596 | G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, |
4597 | G_STRUCT_OFFSET (PanelToplevelClass, popup_panel_menu)((glong) __builtin_offsetof(PanelToplevelClass, popup_panel_menu )), |
4598 | NULL((void*)0), |
4599 | NULL((void*)0), |
4600 | panel_marshal_BOOLEAN__VOID, |
4601 | G_TYPE_BOOLEAN((GType) ((5) << (2))), |
4602 | 0); |
4603 | |
4604 | toplevel_signals [TOGGLE_EXPAND_SIGNAL] = |
4605 | g_signal_new ("toggle-expand", |
4606 | G_TYPE_FROM_CLASS (gobject_class)(((GTypeClass*) (gobject_class))->g_type), |
4607 | G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, |
4608 | G_STRUCT_OFFSET (PanelToplevelClass, toggle_expand)((glong) __builtin_offsetof(PanelToplevelClass, toggle_expand )), |
4609 | NULL((void*)0), |
4610 | NULL((void*)0), |
4611 | panel_marshal_BOOLEAN__VOID, |
4612 | G_TYPE_BOOLEAN((GType) ((5) << (2))), |
4613 | 0); |
4614 | |
4615 | toplevel_signals [EXPAND_SIGNAL] = |
4616 | g_signal_new ("expand", |
4617 | G_TYPE_FROM_CLASS (gobject_class)(((GTypeClass*) (gobject_class))->g_type), |
4618 | G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, |
4619 | G_STRUCT_OFFSET (PanelToplevelClass, expand)((glong) __builtin_offsetof(PanelToplevelClass, expand)), |
4620 | NULL((void*)0), |
4621 | NULL((void*)0), |
4622 | panel_marshal_BOOLEAN__VOID, |
4623 | G_TYPE_BOOLEAN((GType) ((5) << (2))), |
4624 | 0); |
4625 | |
4626 | toplevel_signals [UNEXPAND_SIGNAL] = |
4627 | g_signal_new ("unexpand", |
4628 | G_TYPE_FROM_CLASS (gobject_class)(((GTypeClass*) (gobject_class))->g_type), |
4629 | G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, |
4630 | G_STRUCT_OFFSET (PanelToplevelClass, unexpand)((glong) __builtin_offsetof(PanelToplevelClass, unexpand)), |
4631 | NULL((void*)0), |
4632 | NULL((void*)0), |
4633 | panel_marshal_BOOLEAN__VOID, |
4634 | G_TYPE_BOOLEAN((GType) ((5) << (2))), |
4635 | 0); |
4636 | |
4637 | toplevel_signals [TOGGLE_HIDDEN_SIGNAL] = |
4638 | g_signal_new ("toggle-hidden", |
4639 | G_TYPE_FROM_CLASS (gobject_class)(((GTypeClass*) (gobject_class))->g_type), |
4640 | G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, |
4641 | G_STRUCT_OFFSET (PanelToplevelClass, toggle_hidden)((glong) __builtin_offsetof(PanelToplevelClass, toggle_hidden )), |
4642 | NULL((void*)0), |
4643 | NULL((void*)0), |
4644 | panel_marshal_BOOLEAN__VOID, |
4645 | G_TYPE_BOOLEAN((GType) ((5) << (2))), |
4646 | 0); |
4647 | |
4648 | toplevel_signals [BEGIN_MOVE_SIGNAL] = |
4649 | g_signal_new ("begin-move", |
4650 | G_TYPE_FROM_CLASS (gobject_class)(((GTypeClass*) (gobject_class))->g_type), |
4651 | G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, |
4652 | G_STRUCT_OFFSET (PanelToplevelClass, begin_move)((glong) __builtin_offsetof(PanelToplevelClass, begin_move)), |
4653 | NULL((void*)0), |
4654 | NULL((void*)0), |
4655 | panel_marshal_BOOLEAN__VOID, |
4656 | G_TYPE_BOOLEAN((GType) ((5) << (2))), |
4657 | 0); |
4658 | |
4659 | toplevel_signals [BEGIN_RESIZE_SIGNAL] = |
4660 | g_signal_new ("begin-resize", |
4661 | G_TYPE_FROM_CLASS (gobject_class)(((GTypeClass*) (gobject_class))->g_type), |
4662 | G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, |
4663 | G_STRUCT_OFFSET (PanelToplevelClass, begin_resize)((glong) __builtin_offsetof(PanelToplevelClass, begin_resize) ), |
4664 | NULL((void*)0), |
4665 | NULL((void*)0), |
4666 | panel_marshal_BOOLEAN__VOID, |
4667 | G_TYPE_BOOLEAN((GType) ((5) << (2))), |
4668 | 0); |
4669 | |
4670 | ctk_binding_entry_add_signal (binding_set, CDK_KEY_F100xffc7, CDK_CONTROL_MASK, |
4671 | "popup_panel_menu", 0); |
4672 | |
4673 | panel_bindings_set_entries (binding_set); |
4674 | } |
4675 | |
4676 | static void |
4677 | panel_toplevel_setup_widgets (PanelToplevel *toplevel) |
4678 | { |
4679 | CtkWidget* container; |
4680 | |
4681 | toplevel->priv->grid = ctk_grid_new (); |
4682 | |
4683 | toplevel->priv->hide_button_top = panel_toplevel_add_hide_button (toplevel, CTK_ARROW_UP, 1, 0); |
4684 | toplevel->priv->hide_button_bottom = panel_toplevel_add_hide_button (toplevel, CTK_ARROW_DOWN, 1, 2); |
4685 | toplevel->priv->hide_button_left = panel_toplevel_add_hide_button (toplevel, CTK_ARROW_LEFT, 0, 1); |
4686 | toplevel->priv->hide_button_right = panel_toplevel_add_hide_button (toplevel, CTK_ARROW_RIGHT, 2, 1); |
4687 | |
4688 | if (toplevel->priv->orientation & PANEL_HORIZONTAL_MASK(PANEL_ORIENTATION_TOP | PANEL_ORIENTATION_BOTTOM)) |
4689 | { |
4690 | ctk_widget_show(toplevel->priv->hide_button_left); |
4691 | ctk_widget_show(toplevel->priv->hide_button_right); |
4692 | } |
4693 | else |
4694 | { |
4695 | ctk_widget_show(toplevel->priv->hide_button_top); |
4696 | ctk_widget_show(toplevel->priv->hide_button_bottom); |
4697 | } |
4698 | |
4699 | toplevel->priv->inner_frame = g_object_new(PANEL_TYPE_FRAME(panel_frame_get_type ()), NULL((void*)0)); |
4700 | |
4701 | ctk_widget_set_hexpand (CTK_WIDGET (toplevel->priv->inner_frame)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel->priv->inner_frame)), ((ctk_widget_get_type ())))))), TRUE(!(0))); |
4702 | ctk_widget_set_vexpand (CTK_WIDGET (toplevel->priv->inner_frame)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel->priv->inner_frame)), ((ctk_widget_get_type ())))))), TRUE(!(0))); |
4703 | |
4704 | ctk_grid_attach (CTK_GRID (toplevel->priv->grid)((((CtkGrid*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel->priv->grid)), ((ctk_grid_get_type ())))) )), CTK_WIDGET (toplevel->priv->inner_frame)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel->priv->inner_frame)), ((ctk_widget_get_type ())))))), 1, 1, 1, 1); |
4705 | ctk_widget_show (CTK_WIDGET (toplevel->priv->inner_frame)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel->priv->inner_frame)), ((ctk_widget_get_type ()))))))); |
4706 | |
4707 | container = panel_widget_new (toplevel, |
4708 | !toplevel->priv->expand, |
4709 | (toplevel->priv->orientation & PANEL_HORIZONTAL_MASK(PANEL_ORIENTATION_TOP | PANEL_ORIENTATION_BOTTOM)) ? |
4710 | CTK_ORIENTATION_HORIZONTAL : |
4711 | CTK_ORIENTATION_VERTICAL, |
4712 | toplevel->priv->size); |
4713 | |
4714 | toplevel->priv->panel_widget = PANEL_WIDGET(container)((((PanelWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((container)), ((panel_widget_get_type())))))); |
4715 | |
4716 | ctk_container_add(CTK_CONTAINER(toplevel->priv->inner_frame)((((CtkContainer*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel->priv->inner_frame)), ((ctk_container_get_type ())))))), container); |
4717 | ctk_widget_show(container); |
4718 | |
4719 | ctk_container_add (CTK_CONTAINER (toplevel)((((CtkContainer*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), ((ctk_container_get_type ())))))), toplevel->priv->grid); |
4720 | ctk_widget_show (toplevel->priv->grid); |
4721 | } |
4722 | |
4723 | static void |
4724 | background_changed (PanelBackground *background G_GNUC_UNUSED__attribute__ ((__unused__)), |
4725 | PanelToplevel *toplevel) |
4726 | { |
4727 | panel_toplevel_update_edges (toplevel); |
4728 | panel_widget_emit_background_changed (toplevel->priv->panel_widget); |
4729 | } |
4730 | |
4731 | static void |
4732 | panel_toplevel_init (PanelToplevel *toplevel) |
4733 | { |
4734 | CtkWidget *widget; |
4735 | int i; |
4736 | |
4737 | toplevel->priv = panel_toplevel_get_instance_private (toplevel); |
4738 | |
4739 | toplevel->priv->expand = TRUE(!(0)); |
4740 | toplevel->priv->orientation = PANEL_ORIENTATION_BOTTOM; |
4741 | toplevel->priv->size = DEFAULT_SIZE48; |
4742 | toplevel->priv->scale = ctk_widget_get_scale_factor (CTK_WIDGET (toplevel)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), ((ctk_widget_get_type ()))))))); |
4743 | toplevel->priv->x = 0; |
4744 | toplevel->priv->y = 0; |
4745 | toplevel->priv->x_right = -1; |
4746 | toplevel->priv->y_bottom = -1; |
4747 | toplevel->priv->monitor = 0; |
4748 | toplevel->priv->configured_monitor = -1; |
4749 | toplevel->priv->hide_delay = DEFAULT_HIDE_DELAY300; |
4750 | toplevel->priv->unhide_delay = DEFAULT_UNHIDE_DELAY100; |
4751 | toplevel->priv->auto_hide_size = DEFAULT_AUTO_HIDE_SIZE1; |
4752 | toplevel->priv->animation_speed = PANEL_ANIMATION_FAST; |
4753 | |
4754 | toplevel->priv->snap_tolerance = DEFAULT_DND_THRESHOLD8 * SNAP_TOLERANCE_FACTOR6; |
4755 | toplevel->priv->ctk_settings = NULL((void*)0); |
4756 | |
4757 | toplevel->priv->state = PANEL_STATE_NORMAL; |
4758 | |
4759 | toplevel->priv->name = NULL((void*)0); |
4760 | toplevel->priv->description = NULL((void*)0); |
4761 | |
4762 | toplevel->priv->hide_timeout = 0; |
4763 | toplevel->priv->unhide_timeout = 0; |
4764 | |
4765 | toplevel->priv->geometry.x = -1; |
4766 | toplevel->priv->geometry.y = -1; |
4767 | toplevel->priv->geometry.width = -1; |
4768 | toplevel->priv->geometry.height = -1; |
4769 | |
4770 | toplevel->priv->original_width = -1; |
4771 | toplevel->priv->original_height = -1; |
4772 | |
4773 | toplevel->priv->grab_op = PANEL_GRAB_OP_NONE; |
4774 | |
4775 | toplevel->priv->drag_offset_x = 0; |
4776 | toplevel->priv->drag_offset_y = 0; |
4777 | |
4778 | toplevel->priv->animation_end_x = 0; |
4779 | toplevel->priv->animation_end_y = 0; |
4780 | toplevel->priv->animation_end_width = 0; |
4781 | toplevel->priv->animation_end_height = 0; |
4782 | toplevel->priv->animation_start_time = NULL((void*)0); |
4783 | toplevel->priv->animation_end_time = NULL((void*)0); |
4784 | toplevel->priv->animation_timeout = 0; |
4785 | |
4786 | toplevel->priv->panel_widget = NULL((void*)0); |
4787 | toplevel->priv->inner_frame = NULL((void*)0); |
4788 | toplevel->priv->grid = NULL((void*)0); |
4789 | toplevel->priv->hide_button_top = NULL((void*)0); |
4790 | toplevel->priv->hide_button_bottom = NULL((void*)0); |
4791 | toplevel->priv->hide_button_left = NULL((void*)0); |
4792 | toplevel->priv->hide_button_right = NULL((void*)0); |
4793 | |
4794 | toplevel->priv->attach_toplevel = NULL((void*)0); |
4795 | toplevel->priv->attach_widget = NULL((void*)0); |
4796 | toplevel->priv->n_autohide_disablers = 0; |
4797 | |
4798 | for (i = 0; i < N_ATTACH_TOPLEVEL_SIGNALS5; i++) |
4799 | toplevel->priv->attach_toplevel_signals [i] = 0; |
4800 | for (i = 0; i < N_ATTACH_WIDGET_SIGNALS5; i++) |
4801 | toplevel->priv->attach_widget_signals [i] = 0; |
4802 | |
4803 | toplevel->priv->auto_hide = FALSE(0); |
4804 | toplevel->priv->buttons_enabled = TRUE(!(0)); |
4805 | toplevel->priv->arrows_enabled = TRUE(!(0)); |
4806 | toplevel->priv->x_centered = FALSE(0); |
4807 | toplevel->priv->y_centered = FALSE(0); |
4808 | toplevel->priv->animating = FALSE(0); |
4809 | toplevel->priv->grab_is_keyboard = FALSE(0); |
4810 | toplevel->priv->position_centered = FALSE(0); |
4811 | toplevel->priv->attached = FALSE(0); |
4812 | toplevel->priv->attach_hidden = FALSE(0); |
4813 | toplevel->priv->updated_geometry_initial = FALSE(0); |
4814 | toplevel->priv->initial_animation_done = FALSE(0); |
4815 | |
4816 | widget = CTK_WIDGET (toplevel)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), ((ctk_widget_get_type ())))))); |
4817 | ctk_widget_add_events (widget, |
4818 | CDK_BUTTON_PRESS_MASK | |
4819 | CDK_BUTTON_RELEASE_MASK | |
4820 | CDK_POINTER_MOTION_MASK | |
4821 | CDK_ENTER_NOTIFY_MASK | |
4822 | CDK_LEAVE_NOTIFY_MASK); |
4823 | |
4824 | ctk_widget_set_app_paintable (widget, TRUE(!(0))); |
4825 | |
4826 | panel_toplevel_setup_widgets (toplevel); |
4827 | panel_toplevel_update_description (toplevel); |
4828 | panel_toplevel_update_ctk_settings (toplevel); |
4829 | |
4830 | toplevel_list = g_slist_prepend (toplevel_list, toplevel); |
4831 | |
4832 | /* Prevent the window from being deleted via Alt+F4 by accident. This |
4833 | * happens with "alternative" window managers such as Sawfish or XFWM4. |
4834 | */ |
4835 | g_signal_connect(CTK_WIDGET(toplevel), "delete-event", G_CALLBACK(ctk_true), NULL)g_signal_connect_data ((((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance*) ((toplevel)), ((ctk_widget_get_type ())))) ))), ("delete-event"), (((GCallback) (ctk_true))), (((void*)0 )), ((void*)0), (GConnectFlags) 0); |
4836 | |
4837 | panel_background_init (&toplevel->background, |
4838 | (PanelBackgroundChangedNotify) background_changed, |
4839 | toplevel); |
4840 | |
4841 | update_style_classes (toplevel); |
4842 | |
4843 | #ifdef HAVE_WAYLAND |
4844 | if (CDK_IS_WAYLAND_DISPLAY (cdk_display_get_default ())) { |
4845 | wayland_panel_toplevel_init (toplevel); |
4846 | } |
4847 | #endif // HAVE_WAYLAND |
4848 | } |
4849 | |
4850 | PanelWidget * |
4851 | panel_toplevel_get_panel_widget (PanelToplevel *toplevel) |
4852 | { |
4853 | |
4854 | g_return_val_if_fail (PANEL_IS_TOPLEVEL (toplevel), NULL)do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((toplevel)); GType __t = ((panel_toplevel_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; })))))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char* ) (__func__)), "PANEL_IS_TOPLEVEL (toplevel)"); return (((void *)0)); } } while (0); |
4855 | |
4856 | return toplevel->priv->panel_widget; |
4857 | } |
4858 | |
4859 | static void |
4860 | panel_toplevel_update_name (PanelToplevel *toplevel) |
4861 | { |
4862 | char *title; |
4863 | |
4864 | g_assert (toplevel->priv->description != NULL)do { if (toplevel->priv->description != ((void*)0)) ; else g_assertion_message_expr (((gchar*) 0), "panel-toplevel.c", 4864 , ((const char*) (__func__)), "toplevel->priv->description != NULL" ); } while (0); |
4865 | |
4866 | title = toplevel->priv->name ? toplevel->priv->name : toplevel->priv->description; |
4867 | |
4868 | ctk_window_set_title (CTK_WINDOW (toplevel)((((CtkWindow*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), ((ctk_window_get_type ())))))), title); |
4869 | |
4870 | panel_a11y_set_atk_name_desc ( |
4871 | CTK_WIDGET (toplevel)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), ((ctk_widget_get_type ())))))), |
4872 | title, toplevel->priv->description); |
4873 | } |
4874 | |
4875 | void |
4876 | panel_toplevel_set_name (PanelToplevel *toplevel, |
4877 | const char *name) |
4878 | { |
4879 | g_return_if_fail (PANEL_IS_TOPLEVEL (toplevel))do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((toplevel)); GType __t = ((panel_toplevel_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; })))))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char* ) (__func__)), "PANEL_IS_TOPLEVEL (toplevel)"); return; } } while (0); |
4880 | |
4881 | if (!toplevel->priv->name && (!name || !name [0])) |
4882 | return; |
4883 | |
4884 | if (toplevel->priv->name && name && name [0] && |
4885 | !strcmp (toplevel->priv->name, name)) |
4886 | return; |
4887 | |
4888 | if (toplevel->priv->name) |
4889 | g_free (toplevel->priv->name); |
4890 | toplevel->priv->name = NULL((void*)0); |
4891 | |
4892 | if (name && name [0]) |
4893 | toplevel->priv->name = g_strdup (name)g_strdup_inline (name); |
4894 | |
4895 | panel_toplevel_update_name (toplevel); |
4896 | |
4897 | g_object_notify (G_OBJECT (toplevel)((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), (((GType) ((20) << (2)))))))), "name"); |
4898 | } |
4899 | |
4900 | void |
4901 | panel_toplevel_set_settings_path (PanelToplevel *toplevel, |
4902 | const char *settings_path) |
4903 | { |
4904 | toplevel->priv->settings_path = g_strdup (settings_path)g_strdup_inline (settings_path); |
4905 | } |
4906 | |
4907 | const char* panel_toplevel_get_name(PanelToplevel* toplevel) |
4908 | { |
4909 | g_return_val_if_fail(PANEL_IS_TOPLEVEL(toplevel), NULL)do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((toplevel)); GType __t = ((panel_toplevel_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; })))))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char* ) (__func__)), "PANEL_IS_TOPLEVEL(toplevel)"); return (((void *)0)); } } while (0); |
4910 | |
4911 | return toplevel->priv->name; |
4912 | } |
4913 | |
4914 | const char* panel_toplevel_get_description(PanelToplevel* toplevel) |
4915 | { |
4916 | g_return_val_if_fail(PANEL_IS_TOPLEVEL(toplevel), NULL)do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((toplevel)); GType __t = ((panel_toplevel_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; })))))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char* ) (__func__)), "PANEL_IS_TOPLEVEL(toplevel)"); return (((void *)0)); } } while (0); |
4917 | |
4918 | return toplevel->priv->description; |
4919 | } |
4920 | |
4921 | void |
4922 | panel_toplevel_set_expand (PanelToplevel *toplevel, |
4923 | gboolean expand) |
4924 | { |
4925 | g_return_if_fail (PANEL_IS_TOPLEVEL (toplevel))do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((toplevel)); GType __t = ((panel_toplevel_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; })))))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char* ) (__func__)), "PANEL_IS_TOPLEVEL (toplevel)"); return; } } while (0); |
4926 | |
4927 | if (toplevel->priv->attached && expand) { |
4928 | g_warning ("attempt to expand attached toplevel; ignoring"); |
4929 | return; |
4930 | } |
4931 | |
4932 | expand = expand != FALSE(0); |
4933 | |
4934 | if (toplevel->priv->expand == expand) |
4935 | return; |
4936 | |
4937 | toplevel->priv->expand = expand; |
4938 | |
4939 | if (!toplevel->priv->expand && toplevel->priv->updated_geometry_initial) { |
4940 | switch (toplevel->priv->orientation) { |
4941 | case PANEL_ORIENTATION_TOP: |
4942 | panel_toplevel_set_x (toplevel, 0, -1, TRUE(!(0))); |
4943 | break; |
4944 | case PANEL_ORIENTATION_BOTTOM: |
4945 | panel_toplevel_set_x (toplevel, 0, 0, TRUE(!(0))); |
4946 | break; |
4947 | case PANEL_ORIENTATION_LEFT: |
4948 | panel_toplevel_set_y (toplevel, 0, -1, TRUE(!(0))); |
4949 | break; |
4950 | case PANEL_ORIENTATION_RIGHT: |
4951 | panel_toplevel_set_y (toplevel, 0, 0, TRUE(!(0))); |
4952 | break; |
4953 | default: |
4954 | g_assert_not_reached ()do { g_assertion_message_expr (((gchar*) 0), "panel-toplevel.c" , 4954, ((const char*) (__func__)), ((void*)0)); } while (0); |
4955 | break; |
4956 | } |
4957 | } |
4958 | |
4959 | ctk_widget_queue_resize (CTK_WIDGET (toplevel)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), ((ctk_widget_get_type ()))))))); |
4960 | |
4961 | panel_widget_set_packed (toplevel->priv->panel_widget, !toplevel->priv->expand); |
4962 | |
4963 | g_object_notify (G_OBJECT (toplevel)((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), (((GType) ((20) << (2)))))))), "expand"); |
4964 | } |
4965 | |
4966 | gboolean |
4967 | panel_toplevel_get_expand (PanelToplevel *toplevel) |
4968 | { |
4969 | g_return_val_if_fail (PANEL_IS_TOPLEVEL (toplevel), TRUE)do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((toplevel)); GType __t = ((panel_toplevel_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; })))))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char* ) (__func__)), "PANEL_IS_TOPLEVEL (toplevel)"); return ((!(0) )); } } while (0); |
4970 | |
4971 | return toplevel->priv->expand; |
4972 | } |
4973 | |
4974 | gboolean |
4975 | panel_toplevel_get_is_floating (PanelToplevel *toplevel) |
4976 | { |
4977 | g_return_val_if_fail (PANEL_IS_TOPLEVEL (toplevel), TRUE)do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((toplevel)); GType __t = ((panel_toplevel_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; })))))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char* ) (__func__)), "PANEL_IS_TOPLEVEL (toplevel)"); return ((!(0) )); } } while (0); |
4978 | |
4979 | return toplevel->priv->floating; |
4980 | } |
4981 | |
4982 | void |
4983 | panel_toplevel_set_orientation (PanelToplevel *toplevel, |
4984 | PanelOrientation orientation) |
4985 | { |
4986 | gboolean rotate; |
4987 | CdkRectangle monitor_geom; |
4988 | |
4989 | g_return_if_fail (PANEL_IS_TOPLEVEL (toplevel))do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((toplevel)); GType __t = ((panel_toplevel_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; })))))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char* ) (__func__)), "PANEL_IS_TOPLEVEL (toplevel)"); return; } } while (0); |
4990 | |
4991 | if (toplevel->priv->orientation == orientation) |
4992 | return; |
4993 | |
4994 | g_object_freeze_notify (G_OBJECT (toplevel)((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), (((GType) ((20) << (2))))))))); |
4995 | |
4996 | panel_toplevel_get_monitor_geometry (toplevel, &monitor_geom); |
4997 | |
4998 | /* Un-snap from center if no longer along screen edge */ |
4999 | if (toplevel->priv->x_centered && |
5000 | (orientation & PANEL_VERTICAL_MASK(PANEL_ORIENTATION_LEFT | PANEL_ORIENTATION_RIGHT))) { |
5001 | toplevel->priv->x_centered = FALSE(0); |
5002 | toplevel->priv->x = (monitor_geom.width - toplevel->priv->geometry.width) / 2; |
5003 | g_object_notify (G_OBJECT (toplevel)((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), (((GType) ((20) << (2)))))))), "x"); |
5004 | g_object_notify (G_OBJECT (toplevel)((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), (((GType) ((20) << (2)))))))), "x-centered"); |
5005 | |
5006 | if (toplevel->priv->x_right != -1) { |
5007 | toplevel->priv->x_right = -1; |
5008 | g_object_notify (G_OBJECT (toplevel)((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), (((GType) ((20) << (2)))))))), "x-right"); |
5009 | } |
5010 | } |
5011 | |
5012 | if (toplevel->priv->y_centered && |
5013 | (orientation & PANEL_HORIZONTAL_MASK(PANEL_ORIENTATION_TOP | PANEL_ORIENTATION_BOTTOM))) { |
5014 | toplevel->priv->y_centered = FALSE(0); |
5015 | toplevel->priv->y = (monitor_geom.height - toplevel->priv->geometry.height) / 2; |
5016 | g_object_notify (G_OBJECT (toplevel)((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), (((GType) ((20) << (2)))))))), "y"); |
5017 | g_object_notify (G_OBJECT (toplevel)((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), (((GType) ((20) << (2)))))))), "y-centered"); |
5018 | |
5019 | if (toplevel->priv->y_bottom != -1) { |
5020 | toplevel->priv->y_bottom = -1; |
5021 | g_object_notify (G_OBJECT (toplevel)((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), (((GType) ((20) << (2)))))))), "y-bottom"); |
5022 | } |
5023 | } |
5024 | |
5025 | rotate = FALSE(0); |
5026 | if ((orientation & PANEL_HORIZONTAL_MASK(PANEL_ORIENTATION_TOP | PANEL_ORIENTATION_BOTTOM)) && |
5027 | (toplevel->priv->orientation & PANEL_VERTICAL_MASK(PANEL_ORIENTATION_LEFT | PANEL_ORIENTATION_RIGHT))) |
5028 | rotate = TRUE(!(0)); |
5029 | else if ((orientation & PANEL_VERTICAL_MASK(PANEL_ORIENTATION_LEFT | PANEL_ORIENTATION_RIGHT)) && |
5030 | (toplevel->priv->orientation & PANEL_HORIZONTAL_MASK(PANEL_ORIENTATION_TOP | PANEL_ORIENTATION_BOTTOM))) |
5031 | rotate = TRUE(!(0)); |
5032 | |
5033 | /* rotate around the center */ |
5034 | if (rotate && !toplevel->priv->position_centered && !toplevel->priv->expand && |
5035 | toplevel->priv->updated_geometry_initial) { |
5036 | toplevel->priv->position_centered = TRUE(!(0)); |
5037 | |
5038 | /* x, y temporary refer to the panel center, so we don't care |
5039 | * about x_right, y_bottom. Those will get updated in |
5040 | * panel_toplevel_update_position() accordingly. */ |
5041 | if (!toplevel->priv->x_centered) { |
5042 | toplevel->priv->x += toplevel->priv->geometry.width / 2; |
5043 | g_object_notify (G_OBJECT (toplevel)((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), (((GType) ((20) << (2)))))))), "x"); |
5044 | } |
5045 | |
5046 | if (!toplevel->priv->y_centered) { |
5047 | toplevel->priv->y += toplevel->priv->geometry.height / 2; |
5048 | g_object_notify (G_OBJECT (toplevel)((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), (((GType) ((20) << (2)))))))), "y"); |
5049 | } |
5050 | |
5051 | } |
5052 | |
5053 | toplevel->priv->orientation = orientation; |
5054 | update_style_classes (toplevel); |
5055 | |
5056 | ctk_widget_reset_style (CTK_WIDGET (toplevel)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), ((ctk_widget_get_type ()))))))); |
5057 | |
5058 | panel_toplevel_update_hide_buttons (toplevel); |
5059 | |
5060 | panel_widget_set_orientation ( |
5061 | toplevel->priv->panel_widget, |
5062 | (toplevel->priv->orientation & PANEL_HORIZONTAL_MASK(PANEL_ORIENTATION_TOP | PANEL_ORIENTATION_BOTTOM)) ? |
5063 | CTK_ORIENTATION_HORIZONTAL : |
5064 | CTK_ORIENTATION_VERTICAL); |
5065 | |
5066 | switch (toplevel->priv->state) { |
5067 | case PANEL_STATE_HIDDEN_UP: |
5068 | if (toplevel->priv->orientation & PANEL_HORIZONTAL_MASK(PANEL_ORIENTATION_TOP | PANEL_ORIENTATION_BOTTOM)) |
5069 | toplevel->priv->state = PANEL_STATE_HIDDEN_LEFT; |
5070 | break; |
5071 | case PANEL_STATE_HIDDEN_DOWN: |
5072 | if (toplevel->priv->orientation & PANEL_HORIZONTAL_MASK(PANEL_ORIENTATION_TOP | PANEL_ORIENTATION_BOTTOM)) |
5073 | toplevel->priv->state = PANEL_STATE_HIDDEN_RIGHT; |
5074 | break; |
5075 | case PANEL_STATE_HIDDEN_LEFT: |
5076 | if (toplevel->priv->orientation & PANEL_VERTICAL_MASK(PANEL_ORIENTATION_LEFT | PANEL_ORIENTATION_RIGHT)) |
5077 | toplevel->priv->state = PANEL_STATE_HIDDEN_UP; |
5078 | break; |
5079 | case PANEL_STATE_HIDDEN_RIGHT: |
5080 | if (toplevel->priv->orientation & PANEL_VERTICAL_MASK(PANEL_ORIENTATION_LEFT | PANEL_ORIENTATION_RIGHT)) |
5081 | toplevel->priv->state = PANEL_STATE_HIDDEN_DOWN; |
5082 | break; |
5083 | default: |
5084 | break; |
5085 | } |
5086 | |
5087 | ctk_widget_queue_resize (CTK_WIDGET (toplevel)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), ((ctk_widget_get_type ()))))))); |
5088 | |
5089 | g_object_notify (G_OBJECT (toplevel)((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), (((GType) ((20) << (2)))))))), "orientation"); |
5090 | |
5091 | g_object_thaw_notify (G_OBJECT (toplevel)((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), (((GType) ((20) << (2))))))))); |
5092 | |
5093 | #ifdef HAVE_WAYLAND |
5094 | if (CDK_IS_WAYLAND_DISPLAY (ctk_widget_get_display (CTK_WIDGET (toplevel)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), ((ctk_widget_get_type ()))))))))) { |
5095 | wayland_panel_toplevel_update_placement (toplevel); |
5096 | } |
5097 | #endif // HAVE_WAYLAND |
5098 | } |
5099 | |
5100 | PanelOrientation |
5101 | panel_toplevel_get_orientation (PanelToplevel *toplevel) |
5102 | { |
5103 | g_return_val_if_fail (PANEL_IS_TOPLEVEL (toplevel), CTK_ORIENTATION_HORIZONTAL)do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((toplevel)); GType __t = ((panel_toplevel_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; })))))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char* ) (__func__)), "PANEL_IS_TOPLEVEL (toplevel)"); return (CTK_ORIENTATION_HORIZONTAL ); } } while (0); |
5104 | |
5105 | return toplevel->priv->orientation; |
5106 | } |
5107 | |
5108 | void |
5109 | panel_toplevel_set_size (PanelToplevel *toplevel, |
5110 | int size) |
5111 | { |
5112 | g_return_if_fail (PANEL_IS_TOPLEVEL (toplevel))do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((toplevel)); GType __t = ((panel_toplevel_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; })))))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char* ) (__func__)), "PANEL_IS_TOPLEVEL (toplevel)"); return; } } while (0); |
5113 | g_return_if_fail (size >= 0)do { if ((size >= 0)) { } else { g_return_if_fail_warning ( ((gchar*) 0), ((const char*) (__func__)), "size >= 0"); return ; } } while (0); |
5114 | |
5115 | if (toplevel->priv->size == size) |
5116 | return; |
5117 | |
5118 | toplevel->priv->size = size; |
5119 | |
5120 | panel_widget_set_size (toplevel->priv->panel_widget, toplevel->priv->size); |
5121 | |
5122 | ctk_widget_queue_resize (CTK_WIDGET (toplevel)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), ((ctk_widget_get_type ()))))))); |
5123 | |
5124 | panel_toplevel_update_hide_buttons (toplevel); |
5125 | |
5126 | g_object_notify (G_OBJECT (toplevel)((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), (((GType) ((20) << (2)))))))), "size"); |
5127 | } |
5128 | |
5129 | int |
5130 | panel_toplevel_get_size (PanelToplevel *toplevel) |
5131 | { |
5132 | g_return_val_if_fail (PANEL_IS_TOPLEVEL (toplevel), DEFAULT_SIZE)do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((toplevel)); GType __t = ((panel_toplevel_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; })))))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char* ) (__func__)), "PANEL_IS_TOPLEVEL (toplevel)"); return (48); } } while (0); |
5133 | |
5134 | return toplevel->priv->size; |
5135 | } |
5136 | |
5137 | void |
5138 | panel_toplevel_set_auto_hide_size (PanelToplevel *toplevel, |
5139 | int auto_hide_size) |
5140 | { |
5141 | g_return_if_fail (PANEL_IS_TOPLEVEL (toplevel))do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((toplevel)); GType __t = ((panel_toplevel_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; })))))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char* ) (__func__)), "PANEL_IS_TOPLEVEL (toplevel)"); return; } } while (0); |
5142 | |
5143 | if (toplevel->priv->auto_hide_size == auto_hide_size) |
5144 | return; |
5145 | |
5146 | toplevel->priv->auto_hide_size = auto_hide_size; |
5147 | |
5148 | if (toplevel->priv->state == PANEL_STATE_AUTO_HIDDEN) { |
5149 | if (panel_toplevel_update_struts (toplevel, FALSE(0))) { |
5150 | if (toplevel->priv->animate) { |
5151 | panel_toplevel_unhide (toplevel); |
5152 | panel_toplevel_hide (toplevel, TRUE(!(0)), -1); |
5153 | } else |
5154 | ctk_widget_queue_resize (CTK_WIDGET (toplevel)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), ((ctk_widget_get_type ()))))))); |
5155 | } |
5156 | } |
5157 | |
5158 | g_object_notify (G_OBJECT (toplevel)((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), (((GType) ((20) << (2)))))))), "auto-hide-size"); |
5159 | } |
5160 | |
5161 | int |
5162 | panel_toplevel_get_auto_hide_size (PanelToplevel *toplevel) |
5163 | { |
5164 | g_return_val_if_fail (PANEL_IS_TOPLEVEL (toplevel), DEFAULT_AUTO_HIDE_SIZE)do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((toplevel)); GType __t = ((panel_toplevel_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; })))))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char* ) (__func__)), "PANEL_IS_TOPLEVEL (toplevel)"); return (1); } } while (0); |
5165 | |
5166 | return toplevel->priv->auto_hide_size; |
5167 | } |
5168 | |
5169 | void |
5170 | panel_toplevel_set_x (PanelToplevel *toplevel, |
5171 | int x, |
5172 | int x_right, |
5173 | gboolean x_centered) |
5174 | { |
5175 | gboolean changed = FALSE(0); |
5176 | |
5177 | g_return_if_fail (PANEL_IS_TOPLEVEL (toplevel))do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((toplevel)); GType __t = ((panel_toplevel_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; })))))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char* ) (__func__)), "PANEL_IS_TOPLEVEL (toplevel)"); return; } } while (0); |
5178 | |
5179 | x_centered = x_centered != FALSE(0); |
5180 | |
5181 | g_object_freeze_notify (G_OBJECT (toplevel)((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), (((GType) ((20) << (2))))))))); |
5182 | |
5183 | if (toplevel->priv->x != x) { |
5184 | toplevel->priv->x = x; |
5185 | changed = TRUE(!(0)); |
5186 | g_object_notify (G_OBJECT (toplevel)((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), (((GType) ((20) << (2)))))))), "x"); |
5187 | } |
5188 | |
5189 | if (toplevel->priv->x_right != x_right) { |
5190 | toplevel->priv->x_right = x_right; |
5191 | changed = TRUE(!(0)); |
5192 | g_object_notify (G_OBJECT (toplevel)((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), (((GType) ((20) << (2)))))))), "x-right"); |
5193 | } |
5194 | |
5195 | if (toplevel->priv->x_centered != x_centered) { |
5196 | toplevel->priv->x_centered = x_centered; |
5197 | changed = TRUE(!(0)); |
5198 | g_object_notify (G_OBJECT (toplevel)((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), (((GType) ((20) << (2)))))))), "x-centered"); |
5199 | } |
5200 | |
5201 | if (changed) |
5202 | ctk_widget_queue_resize (CTK_WIDGET (toplevel)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), ((ctk_widget_get_type ()))))))); |
5203 | |
5204 | g_object_thaw_notify (G_OBJECT (toplevel)((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), (((GType) ((20) << (2))))))))); |
5205 | } |
5206 | |
5207 | void |
5208 | panel_toplevel_set_y (PanelToplevel *toplevel, |
5209 | int y, |
5210 | int y_bottom, |
5211 | gboolean y_centered) |
5212 | { |
5213 | gboolean changed = FALSE(0); |
5214 | |
5215 | g_return_if_fail (PANEL_IS_TOPLEVEL (toplevel))do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((toplevel)); GType __t = ((panel_toplevel_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; })))))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char* ) (__func__)), "PANEL_IS_TOPLEVEL (toplevel)"); return; } } while (0); |
5216 | |
5217 | y_centered = y_centered != FALSE(0); |
5218 | |
5219 | g_object_freeze_notify (G_OBJECT (toplevel)((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), (((GType) ((20) << (2))))))))); |
5220 | |
5221 | if (toplevel->priv->y != y) { |
5222 | toplevel->priv->y = y; |
5223 | changed = TRUE(!(0)); |
5224 | g_object_notify (G_OBJECT (toplevel)((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), (((GType) ((20) << (2)))))))), "y"); |
5225 | } |
5226 | |
5227 | if (toplevel->priv->y_bottom != y_bottom) { |
5228 | toplevel->priv->y_bottom = y_bottom; |
5229 | changed = TRUE(!(0)); |
5230 | g_object_notify (G_OBJECT (toplevel)((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), (((GType) ((20) << (2)))))))), "y-bottom"); |
5231 | } |
5232 | |
5233 | if (toplevel->priv->y_centered != y_centered) { |
5234 | toplevel->priv->y_centered = y_centered; |
5235 | changed = TRUE(!(0)); |
5236 | g_object_notify (G_OBJECT (toplevel)((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), (((GType) ((20) << (2)))))))), "y-centered"); |
5237 | } |
5238 | |
5239 | if (changed) |
5240 | ctk_widget_queue_resize (CTK_WIDGET (toplevel)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), ((ctk_widget_get_type ()))))))); |
5241 | |
5242 | g_object_thaw_notify (G_OBJECT (toplevel)((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), (((GType) ((20) << (2))))))))); |
5243 | } |
5244 | |
5245 | void |
5246 | panel_toplevel_get_position (PanelToplevel *toplevel, |
5247 | int *x, |
5248 | int *x_right, |
5249 | int *y, |
5250 | int *y_bottom) |
5251 | { |
5252 | g_return_if_fail (PANEL_IS_TOPLEVEL (toplevel))do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((toplevel)); GType __t = ((panel_toplevel_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; })))))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char* ) (__func__)), "PANEL_IS_TOPLEVEL (toplevel)"); return; } } while (0); |
5253 | |
5254 | if (x) |
5255 | *x = toplevel->priv->x; |
5256 | |
5257 | if (y) |
5258 | *y = toplevel->priv->y; |
5259 | |
5260 | if (x_right) |
5261 | *x_right = toplevel->priv->x_right; |
5262 | |
5263 | if (y_bottom) |
5264 | *y_bottom = toplevel->priv->y_bottom; |
5265 | } |
5266 | |
5267 | gboolean |
5268 | panel_toplevel_get_x_centered (PanelToplevel *toplevel) |
5269 | { |
5270 | g_return_val_if_fail (PANEL_IS_TOPLEVEL (toplevel), FALSE)do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((toplevel)); GType __t = ((panel_toplevel_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; })))))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char* ) (__func__)), "PANEL_IS_TOPLEVEL (toplevel)"); return ((0)); } } while (0); |
5271 | |
5272 | return toplevel->priv->x_centered; |
5273 | } |
5274 | |
5275 | gboolean |
5276 | panel_toplevel_get_y_centered (PanelToplevel *toplevel) |
5277 | { |
5278 | g_return_val_if_fail (PANEL_IS_TOPLEVEL (toplevel), FALSE)do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((toplevel)); GType __t = ((panel_toplevel_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; })))))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char* ) (__func__)), "PANEL_IS_TOPLEVEL (toplevel)"); return ((0)); } } while (0); |
5279 | |
5280 | return toplevel->priv->y_centered; |
5281 | } |
5282 | |
5283 | /** |
5284 | * panel_toplevel_set_monitor_internal: |
5285 | * |
5286 | * Sets the monitor of the toplevel, but only the internal state. We need to |
5287 | * make the difference between the internal state and the configuration of the |
5288 | * user because internal constraints might affect the monitor of the toplevel. |
5289 | * |
5290 | * panel_toplevel_set_monitor_internal() won't update the configuration of the |
5291 | * user. |
5292 | **/ |
5293 | static void |
5294 | panel_toplevel_set_monitor_internal (PanelToplevel *toplevel, |
5295 | int monitor, |
5296 | gboolean force_resize) |
5297 | { |
5298 | if (toplevel->priv->monitor == monitor) |
5299 | return; |
5300 | |
5301 | toplevel->priv->monitor = monitor; |
5302 | |
5303 | if (force_resize) |
5304 | ctk_widget_queue_resize (CTK_WIDGET (toplevel)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), ((ctk_widget_get_type ()))))))); |
5305 | } |
5306 | |
5307 | /** |
5308 | * panel_toplevel_update_monitor: |
5309 | * |
5310 | * Moves the toplevel to its configured monitor or the first one, if needed. |
5311 | * This generally happens when the configured monitor was non-existing before, |
5312 | * and it appeared at runtime, or if it was existing and disappeared. |
5313 | * |
5314 | * This must only be called at the beginning of the size request of the |
5315 | * toplevel because it doesn't queue a size request. |
5316 | **/ |
5317 | static void |
5318 | panel_toplevel_update_monitor (PanelToplevel *toplevel) |
5319 | { |
5320 | /* If we were not using the configured monitor, can we use it now? */ |
5321 | if ((toplevel->priv->configured_monitor != -1) && |
5322 | (toplevel->priv->configured_monitor != toplevel->priv->monitor) && |
5323 | toplevel->priv->configured_monitor < panel_multimonitor_monitors ()) { |
5324 | panel_toplevel_set_monitor_internal (toplevel, |
5325 | toplevel->priv->configured_monitor, |
5326 | FALSE(0)); |
5327 | |
5328 | /* else, can we still use the monitor we were using? */ |
5329 | } else if (toplevel->priv->monitor >= panel_multimonitor_monitors ()) { |
5330 | panel_toplevel_set_monitor_internal (toplevel, |
5331 | 0, |
5332 | FALSE(0)); |
5333 | } |
5334 | } |
5335 | |
5336 | void |
5337 | panel_toplevel_set_monitor (PanelToplevel *toplevel, |
5338 | int monitor) |
5339 | { |
5340 | g_return_if_fail (PANEL_IS_TOPLEVEL (toplevel))do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((toplevel)); GType __t = ((panel_toplevel_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; })))))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char* ) (__func__)), "PANEL_IS_TOPLEVEL (toplevel)"); return; } } while (0); |
5341 | |
5342 | if (toplevel->priv->configured_monitor == monitor) |
5343 | return; |
5344 | |
5345 | toplevel->priv->configured_monitor = monitor; |
5346 | |
5347 | /* Only use the configured monitor if it's existing. Else, we ignore |
5348 | * the non-existing monitor, and keep the old one. The main use case is |
5349 | * when logging in after having used a multimonitor environment. |
5350 | * We will put the panel on the monitor 0 for this session, and it will |
5351 | * move back to the right monitor next time. */ |
5352 | if (monitor < panel_multimonitor_monitors ()) |
5353 | panel_toplevel_set_monitor_internal (toplevel, monitor, TRUE(!(0))); |
5354 | |
5355 | g_object_notify (G_OBJECT (toplevel)((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), (((GType) ((20) << (2)))))))), "monitor"); |
5356 | } |
5357 | |
5358 | int |
5359 | panel_toplevel_get_monitor (PanelToplevel *toplevel) |
5360 | { |
5361 | g_return_val_if_fail (PANEL_IS_TOPLEVEL (toplevel), -1)do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((toplevel)); GType __t = ((panel_toplevel_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; })))))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char* ) (__func__)), "PANEL_IS_TOPLEVEL (toplevel)"); return (-1); } } while (0); |
5362 | |
5363 | return toplevel->priv->monitor; |
5364 | } |
5365 | |
5366 | void |
5367 | panel_toplevel_set_auto_hide (PanelToplevel *toplevel, |
5368 | gboolean auto_hide) |
5369 | { |
5370 | g_return_if_fail (PANEL_IS_TOPLEVEL (toplevel))do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((toplevel)); GType __t = ((panel_toplevel_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; })))))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char* ) (__func__)), "PANEL_IS_TOPLEVEL (toplevel)"); return; } } while (0); |
5371 | |
5372 | auto_hide = auto_hide != FALSE(0); |
5373 | |
5374 | if (toplevel->priv->auto_hide == auto_hide) |
5375 | return; |
5376 | |
5377 | toplevel->priv->auto_hide = auto_hide; |
5378 | |
5379 | if (toplevel->priv->auto_hide) |
5380 | panel_toplevel_queue_auto_hide (toplevel); |
5381 | else |
5382 | panel_toplevel_queue_auto_unhide (toplevel); |
5383 | |
5384 | if (panel_toplevel_update_struts (toplevel, FALSE(0))) |
5385 | ctk_widget_queue_resize (CTK_WIDGET (toplevel)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), ((ctk_widget_get_type ()))))))); |
5386 | |
5387 | g_object_notify (G_OBJECT (toplevel)((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), (((GType) ((20) << (2)))))))), "auto-hide"); |
5388 | } |
5389 | |
5390 | gboolean |
5391 | panel_toplevel_get_auto_hide (PanelToplevel *toplevel) |
5392 | { |
5393 | g_return_val_if_fail (PANEL_IS_TOPLEVEL (toplevel), FALSE)do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((toplevel)); GType __t = ((panel_toplevel_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; })))))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char* ) (__func__)), "PANEL_IS_TOPLEVEL (toplevel)"); return ((0)); } } while (0); |
5394 | |
5395 | return toplevel->priv->auto_hide; |
5396 | } |
5397 | |
5398 | void |
5399 | panel_toplevel_set_hide_delay (PanelToplevel *toplevel, |
5400 | int hide_delay) |
5401 | { |
5402 | g_return_if_fail (PANEL_IS_TOPLEVEL (toplevel))do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((toplevel)); GType __t = ((panel_toplevel_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; })))))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char* ) (__func__)), "PANEL_IS_TOPLEVEL (toplevel)"); return; } } while (0); |
5403 | |
5404 | if (toplevel->priv->hide_delay == hide_delay) |
5405 | return; |
5406 | |
5407 | toplevel->priv->hide_delay = hide_delay; |
5408 | |
5409 | g_object_notify (G_OBJECT (toplevel)((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), (((GType) ((20) << (2)))))))), "hide-delay"); |
5410 | } |
5411 | |
5412 | int |
5413 | panel_toplevel_get_hide_delay (PanelToplevel *toplevel) |
5414 | { |
5415 | g_return_val_if_fail (PANEL_IS_TOPLEVEL (toplevel), -1)do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((toplevel)); GType __t = ((panel_toplevel_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; })))))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char* ) (__func__)), "PANEL_IS_TOPLEVEL (toplevel)"); return (-1); } } while (0); |
5416 | |
5417 | return toplevel->priv->hide_delay; |
5418 | } |
5419 | |
5420 | void |
5421 | panel_toplevel_set_unhide_delay (PanelToplevel *toplevel, |
5422 | int unhide_delay) |
5423 | { |
5424 | g_return_if_fail (PANEL_IS_TOPLEVEL (toplevel))do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((toplevel)); GType __t = ((panel_toplevel_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; })))))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char* ) (__func__)), "PANEL_IS_TOPLEVEL (toplevel)"); return; } } while (0); |
5425 | |
5426 | if (toplevel->priv->unhide_delay == unhide_delay) |
5427 | return; |
5428 | |
5429 | toplevel->priv->unhide_delay = unhide_delay; |
5430 | |
5431 | g_object_notify (G_OBJECT (toplevel)((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), (((GType) ((20) << (2)))))))), "unhide-delay"); |
5432 | } |
5433 | |
5434 | int |
5435 | panel_toplevel_get_unhide_delay (PanelToplevel *toplevel) |
5436 | { |
5437 | g_return_val_if_fail (PANEL_IS_TOPLEVEL (toplevel), -1)do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((toplevel)); GType __t = ((panel_toplevel_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; })))))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char* ) (__func__)), "PANEL_IS_TOPLEVEL (toplevel)"); return (-1); } } while (0); |
5438 | |
5439 | return toplevel->priv->unhide_delay; |
5440 | } |
5441 | |
5442 | void |
5443 | panel_toplevel_set_animate (PanelToplevel *toplevel, |
5444 | gboolean animate) |
5445 | { |
5446 | g_return_if_fail (PANEL_IS_TOPLEVEL (toplevel))do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((toplevel)); GType __t = ((panel_toplevel_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; })))))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char* ) (__func__)), "PANEL_IS_TOPLEVEL (toplevel)"); return; } } while (0); |
5447 | |
5448 | animate = animate != FALSE(0); |
5449 | |
5450 | if (toplevel->priv->animate == animate) |
5451 | return; |
5452 | |
5453 | toplevel->priv->animate = animate; |
5454 | |
5455 | g_object_notify (G_OBJECT (toplevel)((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), (((GType) ((20) << (2)))))))), "animate"); |
5456 | } |
5457 | |
5458 | gboolean |
5459 | panel_toplevel_get_animate (PanelToplevel *toplevel) |
5460 | { |
5461 | g_return_val_if_fail (PANEL_IS_TOPLEVEL (toplevel), FALSE)do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((toplevel)); GType __t = ((panel_toplevel_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; })))))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char* ) (__func__)), "PANEL_IS_TOPLEVEL (toplevel)"); return ((0)); } } while (0); |
5462 | |
5463 | return toplevel->priv->animate; |
5464 | } |
5465 | |
5466 | void |
5467 | panel_toplevel_set_animation_speed (PanelToplevel *toplevel, |
5468 | PanelAnimationSpeed animation_speed) |
5469 | { |
5470 | g_return_if_fail (PANEL_IS_TOPLEVEL (toplevel))do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((toplevel)); GType __t = ((panel_toplevel_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; })))))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char* ) (__func__)), "PANEL_IS_TOPLEVEL (toplevel)"); return; } } while (0); |
5471 | |
5472 | if (toplevel->priv->animation_speed == animation_speed) |
5473 | return; |
5474 | |
5475 | toplevel->priv->animation_speed = animation_speed; |
5476 | |
5477 | g_object_notify (G_OBJECT (toplevel)((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), (((GType) ((20) << (2)))))))), "animation-speed"); |
5478 | } |
5479 | |
5480 | PanelAnimationSpeed |
5481 | panel_toplevel_get_animation_speed (PanelToplevel *toplevel) |
5482 | { |
5483 | g_return_val_if_fail (PANEL_IS_TOPLEVEL (toplevel), 0)do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((toplevel)); GType __t = ((panel_toplevel_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; })))))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char* ) (__func__)), "PANEL_IS_TOPLEVEL (toplevel)"); return (0); } } while (0); |
5484 | |
5485 | return toplevel->priv->animation_speed; |
5486 | } |
5487 | |
5488 | void |
5489 | panel_toplevel_set_enable_buttons (PanelToplevel *toplevel, |
5490 | gboolean enable_buttons) |
5491 | { |
5492 | enable_buttons = enable_buttons != FALSE(0); |
5493 | |
5494 | if (toplevel->priv->buttons_enabled == enable_buttons) |
5495 | return; |
5496 | |
5497 | toplevel->priv->buttons_enabled = enable_buttons; |
5498 | |
5499 | panel_toplevel_update_hide_buttons (toplevel); |
5500 | |
5501 | g_object_notify (G_OBJECT (toplevel)((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), (((GType) ((20) << (2)))))))), "buttons-enabled"); |
5502 | } |
5503 | |
5504 | gboolean |
5505 | panel_toplevel_get_enable_buttons (PanelToplevel *toplevel) |
5506 | { |
5507 | g_return_val_if_fail (PANEL_IS_TOPLEVEL (toplevel), FALSE)do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((toplevel)); GType __t = ((panel_toplevel_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; })))))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char* ) (__func__)), "PANEL_IS_TOPLEVEL (toplevel)"); return ((0)); } } while (0); |
5508 | |
5509 | return toplevel->priv->buttons_enabled; |
5510 | } |
5511 | |
5512 | void |
5513 | panel_toplevel_set_enable_arrows (PanelToplevel *toplevel, |
5514 | gboolean enable_arrows) |
5515 | { |
5516 | g_return_if_fail (PANEL_IS_TOPLEVEL (toplevel))do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((toplevel)); GType __t = ((panel_toplevel_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; })))))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char* ) (__func__)), "PANEL_IS_TOPLEVEL (toplevel)"); return; } } while (0); |
5517 | |
5518 | enable_arrows = enable_arrows != FALSE(0); |
5519 | |
5520 | if (toplevel->priv->arrows_enabled == enable_arrows) |
5521 | return; |
5522 | |
5523 | toplevel->priv->arrows_enabled = enable_arrows; |
5524 | |
5525 | panel_toplevel_update_hide_buttons (toplevel); |
5526 | |
5527 | g_object_notify (G_OBJECT (toplevel)((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), (((GType) ((20) << (2)))))))), "arrows-enabled"); |
5528 | } |
5529 | |
5530 | gboolean |
5531 | panel_toplevel_get_enable_arrows (PanelToplevel *toplevel) |
5532 | { |
5533 | g_return_val_if_fail (PANEL_IS_TOPLEVEL (toplevel), FALSE)do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((toplevel)); GType __t = ((panel_toplevel_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; })))))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char* ) (__func__)), "PANEL_IS_TOPLEVEL (toplevel)"); return ((0)); } } while (0); |
5534 | |
5535 | return toplevel->priv->arrows_enabled; |
5536 | } |
5537 | |
5538 | void |
5539 | panel_toplevel_rotate (PanelToplevel *toplevel, |
5540 | gboolean clockwise) |
5541 | { |
5542 | PanelOrientation orientation; |
5543 | |
5544 | /* Relies on PanelOrientation definition: |
5545 | * |
5546 | * typedef enum { |
5547 | * PANEL_ORIENTATION_TOP = 1 << 0, |
5548 | * PANEL_ORIENTATION_RIGHT = 1 << 1, |
5549 | * PANEL_ORIENTATION_BOTTOM = 1 << 2, |
5550 | * PANEL_ORIENTATION_LEFT = 1 << 3 |
5551 | * } PanelOrientation; |
5552 | */ |
5553 | |
5554 | orientation = toplevel->priv->orientation; |
5555 | |
5556 | if (clockwise) |
5557 | orientation <<= 1; |
5558 | else |
5559 | orientation >>= 1; |
5560 | |
5561 | if (orientation == 0) |
5562 | orientation = PANEL_ORIENTATION_LEFT; |
5563 | |
5564 | else if (orientation > PANEL_ORIENTATION_LEFT) |
5565 | orientation = PANEL_ORIENTATION_TOP; |
5566 | |
5567 | panel_toplevel_set_orientation (toplevel, orientation); |
5568 | } |
5569 | |
5570 | PanelState |
5571 | panel_toplevel_get_state (PanelToplevel *toplevel) |
5572 | { |
5573 | g_return_val_if_fail (PANEL_IS_TOPLEVEL (toplevel), 0)do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((toplevel)); GType __t = ((panel_toplevel_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; })))))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char* ) (__func__)), "PANEL_IS_TOPLEVEL (toplevel)"); return (0); } } while (0); |
5574 | |
5575 | return toplevel->priv->state; |
5576 | } |
5577 | |
5578 | gboolean |
5579 | panel_toplevel_get_is_hidden (PanelToplevel *toplevel) |
5580 | { |
5581 | g_return_val_if_fail (PANEL_IS_TOPLEVEL (toplevel), FALSE)do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((toplevel)); GType __t = ((panel_toplevel_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; })))))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char* ) (__func__)), "PANEL_IS_TOPLEVEL (toplevel)"); return ((0)); } } while (0); |
5582 | |
5583 | if (toplevel->priv->state == PANEL_STATE_HIDDEN_UP || |
5584 | toplevel->priv->state == PANEL_STATE_HIDDEN_DOWN || |
5585 | toplevel->priv->state == PANEL_STATE_HIDDEN_LEFT || |
5586 | toplevel->priv->state == PANEL_STATE_HIDDEN_RIGHT) |
5587 | return TRUE(!(0)); |
5588 | |
5589 | return FALSE(0); |
5590 | } |
5591 | |
5592 | int |
5593 | panel_toplevel_get_minimum_size (PanelToplevel *toplevel) |
5594 | { |
5595 | return calculate_minimum_height (CTK_WIDGET (toplevel)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), ((ctk_widget_get_type ())))))), |
5596 | toplevel->priv->orientation); |
5597 | } |
5598 | |
5599 | int |
5600 | panel_toplevel_get_maximum_size (PanelToplevel *toplevel) |
5601 | { |
5602 | CdkRectangle monitor_geom; |
5603 | |
5604 | panel_toplevel_get_monitor_geometry (toplevel, &monitor_geom); |
5605 | |
5606 | if (toplevel->priv->orientation & PANEL_HORIZONTAL_MASK(PANEL_ORIENTATION_TOP | PANEL_ORIENTATION_BOTTOM)) |
5607 | return monitor_geom.height / MAXIMUM_SIZE_SCREEN_RATIO5; |
5608 | else |
5609 | return monitor_geom.width / MAXIMUM_SIZE_SCREEN_RATIO5; |
5610 | } |