Merge lp:~vanvugt/compiz-core/revert-lim into lp:compiz-core

Proposed by Daniel van Vugt
Status: Merged
Approved by: Sam Spilsbury
Approved revision: 3077
Merged at revision: 3077
Proposed branch: lp:~vanvugt/compiz-core/revert-lim
Merge into: lp:compiz-core
Diff against target: 1601 lines (+11/-1218)
16 files modified
gtk/window-decorator/CMakeLists.txt (+0/-6)
gtk/window-decorator/decorator.c (+6/-32)
gtk/window-decorator/events.c (+3/-117)
gtk/window-decorator/gtk-window-decorator.c (+0/-59)
gtk/window-decorator/gtk-window-decorator.h (+1/-8)
gtk/window-decorator/local-menus/CMakeLists.txt (+0/-60)
gtk/window-decorator/local-menus/src/local-menus.c (+0/-438)
gtk/window-decorator/local-menus/src/local-menus.h (+0/-125)
gtk/window-decorator/local-menus/tests/CMakeLists.txt (+0/-3)
gtk/window-decorator/local-menus/tests/check_local_menu_on_off/CMakeLists.txt (+0/-21)
gtk/window-decorator/local-menus/tests/check_local_menu_on_off/test-local-menu-on-off.cpp (+0/-47)
gtk/window-decorator/local-menus/tests/force_local_menu_on/CMakeLists.txt (+0/-21)
gtk/window-decorator/local-menus/tests/force_local_menu_on/test-force-local-menu-on.cpp (+0/-89)
gtk/window-decorator/local-menus/tests/test-local-menu.h (+0/-106)
gtk/window-decorator/metacity.c (+0/-54)
gtk/window-decorator/wnck.c (+1/-32)
To merge this branch: bzr merge lp:~vanvugt/compiz-core/revert-lim
Reviewer Review Type Date Requested Status
Sam Spilsbury Approve
Didier Roche-Tolomelli Approve
Review via email: mp+100079@code.launchpad.net

Description of the change

Revert locally integrated menus support because it is not being used and
is apparently causing a regression (LP: #962085)

This reverts LP: #931245 and LP: #682788. It is a pure revert of
lp:compiz-core r3036.

To post a comment you must log in.
Revision history for this message
Didier Roche-Tolomelli (didrocks) wrote :

Rever in use in the distro for quite some time already. Thanks Daniel :)

review: Approve
Revision history for this message
Sam Spilsbury (smspillaz) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'gtk/window-decorator/CMakeLists.txt'
2--- gtk/window-decorator/CMakeLists.txt 2012-02-02 16:55:07 +0000
3+++ gtk/window-decorator/CMakeLists.txt 2012-03-30 07:25:22 +0000
4@@ -4,10 +4,7 @@
5 set (CMAKE_INSTALL_RPATH ${libdir})
6 endif (COMPIZ_BUILD_WITH_RPATH)
7
8- add_subdirectory (local-menus)
9-
10 include_directories (
11- ${CMAKE_CURRENT_SOURCE_DIR}/local-menus/src
12 ${compiz_SOURCE_DIR}/include
13 ${CMAKE_BINARY_DIR}/gtk
14 ${GTK_WINDOW_DECORATOR_INCLUDE_DIRS}
15@@ -66,9 +63,6 @@
16 target_link_libraries (
17 gtk-window-decorator
18 decoration
19-
20- gtk_window_decorator_local_menus
21-
22 ${GTK_WINDOW_DECORATOR_LIBRARIES}
23 ${GCONF_LIBRARIES}
24 ${DBUS_GLIB_LIBRARIES}
25
26=== modified file 'gtk/window-decorator/decorator.c'
27--- gtk/window-decorator/decorator.c 2012-03-05 06:48:16 +0000
28+++ gtk/window-decorator/decorator.c 2012-03-30 07:25:22 +0000
29@@ -24,7 +24,6 @@
30 */
31
32 #include "gtk-window-decorator.h"
33-#include "local-menus.h"
34
35 decor_frame_t *
36 create_normal_frame (const gchar *type)
37@@ -231,16 +230,12 @@
38 void
39 update_event_windows (WnckWindow *win)
40 {
41-#define GWD_SHOW_LOCAL_MENU (WNCK_WINDOW_ACTION_BELOW << 1)
42 Display *xdisplay;
43 decor_t *d = g_object_get_data (G_OBJECT (win), "decor");
44 gint x0, y0, width, height, x, y, w, h;
45 gint i, j, k, l;
46 gint actions = d->actions;
47
48- if (gwd_window_should_have_local_menu (win ? wnck_window_get_xid (win) : 0))
49- actions |= GWD_SHOW_LOCAL_MENU;
50-
51 xdisplay = GDK_DISPLAY_XDISPLAY (gdk_display_get_default ());
52
53 /* Get the geometry of the client */
54@@ -303,19 +298,11 @@
55 XMapWindow (xdisplay, d->event_windows[i][j].window);
56 XMoveResizeWindow (xdisplay, d->event_windows[i][j].window,
57 x, y, w, h);
58-
59- BoxPtr box = &d->event_windows[i][j].pos;
60- box->x1 = x;
61- box->x2 = x + w;
62- box->y1 = y;
63- box->y2 = y + h;
64 }
65 /* No parent and no geometry - unmap all event windows */
66 else if (!d->frame_window)
67 {
68 XUnmapWindow (xdisplay, d->event_windows[i][j].window);
69-
70- memset (&d->event_windows[i][j].pos, 0, sizeof (Box));
71 }
72 }
73 }
74@@ -339,18 +326,12 @@
75 WNCK_WINDOW_ACTION_STICK,
76 WNCK_WINDOW_ACTION_UNSHADE,
77 WNCK_WINDOW_ACTION_ABOVE,
78- WNCK_WINDOW_ACTION_UNSTICK,
79-#else
80- 0,
81- 0,
82- 0,
83- 0,
84- 0,
85-#endif
86-
87-#ifdef META_HAS_LOCAL_MENUS
88- GWD_SHOW_LOCAL_MENU
89-#else
90+ WNCK_WINDOW_ACTION_UNSTICK
91+#else
92+ 0,
93+ 0,
94+ 0,
95+ 0,
96 0
97 #endif
98
99@@ -390,17 +371,10 @@
100 Window win = d->button_windows[i].window;
101 XMapWindow (xdisplay, win);
102 XMoveResizeWindow (xdisplay, win, x, y, w, h);
103-
104- BoxPtr box = &d->button_windows[i].pos;
105- box->x1 = x;
106- box->x2 = x + w;
107- box->y1 = y;
108- box->y2 = y + h;
109 }
110 else if (!d->frame_window)
111 {
112 XUnmapWindow (xdisplay, d->button_windows[i].window);
113- memset (&d->button_windows[i].pos, 0, sizeof (Box));
114 }
115 }
116
117
118=== modified file 'gtk/window-decorator/events.c'
119--- gtk/window-decorator/events.c 2012-03-02 02:52:38 +0000
120+++ gtk/window-decorator/events.c 2012-03-30 07:25:22 +0000
121@@ -24,16 +24,6 @@
122 */
123
124 #include "gtk-window-decorator.h"
125-#include "local-menus.h"
126-
127-typedef struct _delayed_move_info
128-{
129- WnckWindow *win;
130- int x_root;
131- int y_root;
132- unsigned int button;
133- unsigned int time;
134-} delayed_move_info;
135
136 void
137 move_resize_window (WnckWindow *win,
138@@ -75,9 +65,8 @@
139 ev.xclient.data.l[3] = gtkwd_event->button;
140 ev.xclient.data.l[4] = 1;
141
142- XAllowEvents (xdisplay, AsyncKeyboard | AsyncPointer, CurrentTime);
143- XUngrabPointer (xdisplay, CurrentTime);
144- XUngrabKeyboard (xdisplay, CurrentTime);
145+ XUngrabPointer (xdisplay, gtkwd_event->time);
146+ XUngrabKeyboard (xdisplay, gtkwd_event->time);
147
148 XSendEvent (xdisplay, xroot, FALSE,
149 SubstructureRedirectMask | SubstructureNotifyMask,
150@@ -86,24 +75,6 @@
151 XSync (xdisplay, FALSE);
152 }
153
154-static gboolean
155-move_resize_window_on_timeout (gpointer user_data)
156-{
157- delayed_move_info *info = (delayed_move_info *) user_data;
158-
159- decor_event event;
160- event.x = 0;
161- event.y = 0;
162- event.x_root = info->x_root;
163- event.y_root = info->y_root;
164- event.button = info->button;
165- event.window = wnck_window_get_xid (info->win);
166-
167- move_resize_window (info->win, WM_MOVERESIZE_MOVE, &event);
168-
169- return FALSE;
170-}
171-
172 void
173 common_button_event (WnckWindow *win,
174 decor_event *gtkwd_event,
175@@ -409,75 +380,6 @@
176 }
177
178 void
179-on_local_menu_hidden (gpointer user_data)
180-{
181- Window xid = GPOINTER_TO_INT (user_data);
182- WnckWindow *win = wnck_window_get (xid);
183- decor_t *d = g_object_get_data (G_OBJECT (win), "decor");
184-
185- d->button_states[BUTTON_WINDOW_MENU] &= ~PRESSED_EVENT_WINDOW;
186-
187- queue_decor_draw (d);
188-}
189-
190-void
191-window_menu_button_event (WnckWindow *win,
192- decor_event *gtkwd_event,
193- decor_event_type gtkwd_type)
194-{
195- decor_t *d = g_object_get_data (G_OBJECT (win), "decor");
196- guint state = d->button_states[BUTTON_WINDOW_MENU];
197-
198- common_button_event (win, gtkwd_event, gtkwd_type,
199- BUTTON_WINDOW_MENU, 1, _("Window Menu"));
200-
201- switch (gtkwd_type) {
202- case GButtonPress:
203- if (gtkwd_event->button == 1)
204- {
205- if (d->button_states[BUTTON_WINDOW_MENU] & BUTTON_EVENT_ACTION_STATE)
206- {
207- delayed_move_info *info = g_new0 (delayed_move_info, 1);
208-
209- info->button = gtkwd_event->button;
210- info->time = gtkwd_event->time;
211- info->win = win;
212- info->x_root = gtkwd_event->x_root;
213- info->y_root = gtkwd_event->y_root;
214-
215- gwd_prepare_show_local_menu ((start_move_window_cb) move_resize_window_on_timeout, (gpointer) info, info->x_root, info->y_root);
216- }
217- }
218- break;
219- case GButtonRelease:
220- if (gtkwd_event->button == 1)
221- if (state)
222- {
223- int win_x, win_y;
224- int box_x = d->button_windows[BUTTON_WINDOW_MENU].pos.x1;
225-
226- wnck_window_get_geometry (win, &win_x, &win_y, NULL, NULL);
227-
228- int x = win_x + box_x;
229- int y = win_y + d->context->extents.top;
230-
231- gwd_show_local_menu (gdk_x11_display_get_xdisplay (gdk_display_get_default ()),
232- wnck_window_get_xid (win),
233- x, y,
234- box_x,
235- d->context->extents.top,
236- gtkwd_event->button,
237- gtkwd_event->time,
238- (show_window_menu_hidden_cb) on_local_menu_hidden,
239- GINT_TO_POINTER (wnck_window_get_xid (d->win)));
240- }
241- break;
242- default:
243- break;
244- }
245-}
246-
247-void
248 handle_title_button_event (WnckWindow *win,
249 int action,
250 decor_event *gtkwd_event)
251@@ -583,17 +485,7 @@
252
253 restack_window (win, Above);
254
255- delayed_move_info *info = g_new0 (delayed_move_info, 1);
256-
257- info->x_root = gtkwd_event->x_root;
258- info->y_root = gtkwd_event->y_root;
259- info->button = gtkwd_event->button;
260- info->time = gtkwd_event->time;
261- info->win = win;
262-
263- move_resize_window_on_timeout ((gpointer) info);
264-
265- g_free (info);
266+ move_resize_window (win, WM_MOVERESIZE_MOVE, gtkwd_event);
267 }
268 }
269 else if (gtkwd_event->button == 2)
270@@ -1026,7 +918,6 @@
271 xid = (gulong)
272 g_hash_table_lookup (frame_table,
273 GINT_TO_POINTER (xevent->xbutton.window));
274- XAllowEvents (gdk_x11_display_get_xdisplay (gdkdisplay), AsyncPointer, CurrentTime);
275 break;
276 case EnterNotify:
277 case LeaveNotify:
278@@ -1038,7 +929,6 @@
279 xid = (gulong)
280 g_hash_table_lookup (frame_table,
281 GINT_TO_POINTER (xevent->xmotion.window));
282- local_menu_process_motion (xevent->xmotion.x_root, xevent->xmotion.y_root);
283 break;
284 case PropertyNotify:
285 if (xevent->xproperty.atom == frame_input_window_atom)
286@@ -1141,10 +1031,6 @@
287 if (get_window_prop (xevent->xproperty.window, select_window_atom, &select))
288 update_switcher_window (xevent->xproperty.window, select);
289 }
290- else if (xevent->xproperty.atom == ubuntu_appmenu_unique_name_atom)
291- {
292- local_menu_cache_reload_xwindow (gdk_x11_display_get_xdisplay (gdkdisplay), xevent->xproperty.window);
293- }
294 break;
295 case DestroyNotify:
296 g_hash_table_remove (frame_table,
297
298=== modified file 'gtk/window-decorator/gtk-window-decorator.c'
299--- gtk/window-decorator/gtk-window-decorator.c 2012-02-28 00:43:49 +0000
300+++ gtk/window-decorator/gtk-window-decorator.c 2012-03-30 07:25:22 +0000
301@@ -24,7 +24,6 @@
302 */
303
304 #include "gtk-window-decorator.h"
305-#include "local-menus.h"
306
307 gboolean minimal = FALSE;
308
309@@ -49,7 +48,6 @@
310 Atom toolkit_action_atom;
311 Atom toolkit_action_window_menu_atom;
312 Atom toolkit_action_force_quit_dialog_atom;
313-Atom ubuntu_appmenu_unique_name_atom;
314
315 Atom net_wm_state_atom;
316 Atom net_wm_state_modal_atom;
317@@ -130,38 +128,6 @@
318 "normal", "modal_dialog", "dialog", "menu", "utility"
319 };
320
321-Box *
322-get_active_window_local_menu_rectangle (gpointer user_data, int *dx, int *dy, int *top_height, Window *xid)
323-{
324- WnckScreen *screen = (WnckScreen *) user_data;
325- WnckWindow *window = wnck_screen_get_active_window (screen);
326- int width, height;
327- decor_t *d = g_object_get_data (G_OBJECT (window), "decor");
328-
329- if (!d->decorated)
330- return NULL;
331-
332- wnck_window_get_geometry (window, dx, dy, &width, &height);
333-
334- *top_height = d->context->extents.top;
335-
336- *xid = wnck_window_get_xid (window);
337-
338- Box *rect = &d->button_windows[BUTTON_WINDOW_MENU].pos;
339-
340- return rect;
341-}
342-
343-void
344-on_local_menu_window_menu_updated (gpointer user_data)
345-{
346- Window xid = GPOINTER_TO_INT (user_data);
347- WnckWindow *window = wnck_window_get (xid);
348- decor_t *d = g_object_get_data (G_OBJECT (window), "decor");
349-
350- queue_decor_draw (d);
351-}
352-
353 int
354 main (int argc, char *argv[])
355 {
356@@ -338,7 +304,6 @@
357
358 net_wm_state_atom = XInternAtom (xdisplay,"_NET_WM_STATE", 0);
359 net_wm_state_modal_atom = XInternAtom (xdisplay, "_NET_WM_STATE_MODAL", 0);
360- ubuntu_appmenu_unique_name_atom = XInternAtom (xdisplay, "_UBUNTU_APPMENU_UNIQUE_NAME", 0);
361
362 status = decor_acquire_dm_session (xdisplay,
363 gdk_screen_get_number (gdkscreen),
364@@ -483,32 +448,8 @@
365
366 update_default_decorations (gdkscreen);
367
368-#ifdef META_HAS_LOCAL_MENUS
369- GDBusConnection *conn = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, NULL);
370- local_menu_entry_activated_request_funcs funcs =
371- {
372- get_active_window_local_menu_rectangle,
373- on_local_menu_window_menu_updated
374- };
375-
376- if (conn)
377- {
378- global_lim_listener = g_dbus_proxy_new_sync (conn, 0, NULL, "com.canonical.Unity.Panel.Service",
379- "/com/canonical/Unity/Panel/Service",
380- "com.canonical.Unity.Panel.Service",
381- NULL, NULL);
382-
383- g_signal_connect (G_OBJECT (global_lim_listener), "g-signal", G_CALLBACK (local_menu_entry_activated_request), (gpointer) &funcs);
384- }
385-#endif
386 gtk_main ();
387-#ifdef META_HAS_LOCAL_MENUS
388- if (global_lim_listener)
389- g_object_unref (global_lim_listener);
390
391- if (conn)
392- g_object_unref (conn);
393-#endif
394 win = windows = wnck_screen_get_windows (screen);
395
396 while (win != NULL)
397
398=== modified file 'gtk/window-decorator/gtk-window-decorator.h'
399--- gtk/window-decorator/gtk-window-decorator.h 2012-02-24 09:14:40 +0000
400+++ gtk/window-decorator/gtk-window-decorator.h 2012-03-30 07:25:22 +0000
401@@ -306,7 +306,6 @@
402 extern Atom toolkit_action_force_quit_dialog_atom;
403 extern Atom net_wm_state_atom;
404 extern Atom net_wm_state_modal_atom;
405-extern Atom ubuntu_appmenu_unique_name_atom;
406
407 extern Time dm_sn_timestamp;
408
409@@ -329,8 +328,7 @@
410 #define BUTTON_UNSHADE 7
411 #define BUTTON_UNABOVE 8
412 #define BUTTON_UNSTICK 9
413-#define BUTTON_WINDOW_MENU 10
414-#define BUTTON_NUM 11
415+#define BUTTON_NUM 10
416
417 struct _pos {
418 int x, y, w, h;
419@@ -1015,11 +1013,6 @@
420 decor_event_type gtkwd_type);
421
422 void
423-window_menu_button_event (WnckWindow *win,
424- decor_event *gtkwd_event,
425- decor_event_type gtkwd_type);
426-
427-void
428 handle_title_button_event (WnckWindow *win,
429 int action,
430 decor_event *gtkwd_event);
431
432=== removed directory 'gtk/window-decorator/local-menus'
433=== removed file 'gtk/window-decorator/local-menus/CMakeLists.txt'
434--- gtk/window-decorator/local-menus/CMakeLists.txt 2012-02-02 16:55:07 +0000
435+++ gtk/window-decorator/local-menus/CMakeLists.txt 1970-01-01 00:00:00 +0000
436@@ -1,60 +0,0 @@
437-pkg_check_modules(
438- LOCAL_MENUS
439- REQUIRED
440- glib-2.0 gio-2.0 libwnck-1.0 gtk+-2.0>=2.18.0
441-)
442-
443-INCLUDE_DIRECTORIES(
444- ${CMAKE_CURRENT_SOURCE_DIR}/include
445- ${CMAKE_CURRENT_SOURCE_DIR}/src
446-
447- ${compiz_SOURCE_DIR}/gtk/window-decorator
448-
449- ${Boost_INCLUDE_DIRS}
450-
451- ${LOCAL_MENUS_INCLUDE_DIRS}
452- ${METACITY_INCLUDE_DIRS}
453-)
454-
455-LINK_DIRECTORIES (${LOCAL_MENUS_LIBRARY_DIRS})
456-
457-SET(
458- PUBLIC_HEADERS
459-)
460-
461-SET(
462- PRIVATE_HEADERS
463- ${CMAKE_CURRENT_SOURCE_DIR}/src/local-menus.h
464-)
465-
466-SET(
467- SRCS
468- ${CMAKE_CURRENT_SOURCE_DIR}/src/local-menus.c
469-)
470-
471-ADD_LIBRARY(
472- gtk_window_decorator_local_menus STATIC
473-
474- ${SRCS}
475-
476- ${PUBLIC_HEADERS}
477- ${PRIVATE_HEADERS}
478-)
479-
480-IF (COMPIZ_BUILD_TESTING)
481-ADD_SUBDIRECTORY( ${CMAKE_CURRENT_SOURCE_DIR}/tests )
482-ENDIF (COMPIZ_BUILD_TESTING)
483-
484-SET_TARGET_PROPERTIES(
485- gtk_window_decorator_local_menus PROPERTIES
486- PUBLIC_HEADER "${PUBLIC_HEADERS}"
487-)
488-
489-install (FILES ${PUBLIC_HEADERS} DESTINATION ${COMPIZ_CORE_INCLUDE_DIR})
490-
491-TARGET_LINK_LIBRARIES(
492- gtk_window_decorator_local_menus
493-
494- ${LOCAL_MENUS_LIBRARIES}
495-)
496-
497
498=== removed directory 'gtk/window-decorator/local-menus/include'
499=== removed directory 'gtk/window-decorator/local-menus/src'
500=== removed file 'gtk/window-decorator/local-menus/src/local-menus.c'
501--- gtk/window-decorator/local-menus/src/local-menus.c 2012-03-02 02:36:45 +0000
502+++ gtk/window-decorator/local-menus/src/local-menus.c 1970-01-01 00:00:00 +0000
503@@ -1,438 +0,0 @@
504-/*
505- * Copyright © 2006 Novell, Inc.
506- *
507- * This library is free software; you can redistribute it and/or
508- * modify it under the terms of the GNU Lesser General Public
509- * License as published by the Free Software Foundation; either
510- * version 2 of the License, or (at your option) any later version.
511- *
512- * This library is distributed in the hope that it will be useful,
513- * but WITHOUT ANY WARRANTY; without even the implied warranty of
514- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
515- * Lesser General Public License for more details.
516- *
517- * You should have received a copy of the GNU Lesser General Public
518- * License along with this library; if not, write to the
519- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
520- * Boston, MA 02111-1307, USA.
521- *
522- * Author: David Reveman <davidr@novell.com>
523- *
524- * 2D Mode: Copyright © 2010 Sam Spilsbury <smspillaz@gmail.com>
525- * Frames Management: Copright © 2011 Canonical Ltd.
526- * Authored By: Sam Spilsbury <sam.spilsbury@canonical.com>
527- */
528-
529-#include <string.h>
530-#include "local-menus.h"
531-#include <gdk/gdk.h>
532-#include <gdk/gdkx.h>
533-#include <stdlib.h>
534-
535-#define GLOBAL 0
536-#define LOCAL 1
537-
538-#define ALLOWED 2
539-#define NOT_ALLOWED 1
540-
541-gint menu_mode = GLOBAL;
542-
543-GDBusProxy *global_lim_listener;
544-
545-
546-#ifdef META_HAS_LOCAL_MENUS
547-static void
548-gwd_menu_mode_changed (GSettings *settings,
549- gchar *key,
550- gpointer user_data)
551-{
552- menu_mode = g_settings_get_enum (settings, "menu-mode");
553-}
554-#endif
555-
556-active_local_menu *active_menu;
557-pending_local_menu *pending_menu;
558-
559-GHashTable *get_windows_with_menus_table ()
560-{
561- static GHashTable *windows_with_menus = NULL;
562-
563- if (!windows_with_menus)
564- windows_with_menus = g_hash_table_new (NULL, NULL);
565-
566- return windows_with_menus;
567-}
568-
569-static gboolean read_xprop_for_window (Display *dpy, Window xid)
570-{
571- Atom ubuntu_appmenu_unique_name = XInternAtom (dpy, "_UBUNTU_APPMENU_UNIQUE_NAME", FALSE);
572- Atom utf8_string = XInternAtom (dpy, "UTF8_STRING", FALSE);
573- Atom actual;
574- int fmt;
575- unsigned long nitems, nleft;
576- unsigned char *prop;
577- XGetWindowProperty (dpy, xid, ubuntu_appmenu_unique_name,
578- 0L, 16L, FALSE, utf8_string, &actual, &fmt, &nitems, &nleft, &prop);
579-
580- if (actual == utf8_string && fmt == 8 && nitems > 1)
581- {
582- g_hash_table_replace (get_windows_with_menus_table (), GINT_TO_POINTER (xid), GINT_TO_POINTER (ALLOWED));
583- return TRUE;
584- }
585- else
586- {
587- g_hash_table_replace (get_windows_with_menus_table (), GINT_TO_POINTER (xid), GINT_TO_POINTER (NOT_ALLOWED));
588- return FALSE;
589- }
590-}
591-
592-gboolean
593-local_menu_allowed_on_window (Display *dpy, Window xid)
594-{
595- gpointer local_menu_allowed_found = g_hash_table_lookup (get_windows_with_menus_table (), GINT_TO_POINTER (xid));
596-
597- if (local_menu_allowed_found)
598- {
599- return GPOINTER_TO_INT (local_menu_allowed_found) == ALLOWED;
600- }
601- else if (dpy && xid)
602- {
603- return read_xprop_for_window (dpy, xid);
604- }
605-
606- return FALSE;
607-}
608-
609-gboolean
610-gwd_window_should_have_local_menu (Window win)
611-{
612-#ifdef META_HAS_LOCAL_MENUS
613- const gchar * const *schemas = g_settings_list_schemas ();
614- static GSettings *lim_settings = NULL;
615- while (*schemas != NULL && !lim_settings)
616- {
617- if (g_str_equal (*schemas, "com.canonical.indicator.appmenu"))
618- {
619- lim_settings = g_settings_new ("com.canonical.indicator.appmenu");
620- menu_mode = g_settings_get_enum (lim_settings, "menu-mode");
621- g_signal_connect (lim_settings, "changed::menu-mode", G_CALLBACK (gwd_menu_mode_changed), NULL);
622- break;
623- }
624- ++schemas;
625- }
626-
627- if (lim_settings && win)
628- return menu_mode == LOCAL && local_menu_allowed_on_window (gdk_x11_display_get_xdisplay (gdk_display_get_default ()), win);
629-#endif
630-
631- return FALSE;
632-}
633-
634-gchar *
635-gwd_get_entry_id_from_sync_variant (GVariant *args)
636-{
637- /* We need to get the indicator data once we've called show */
638-
639- GVariantIter* iter = NULL;
640- gchar* name_hint = NULL;
641- gchar* indicator_id = NULL;
642- gchar* entry_id = NULL;
643- gchar* label = NULL;
644- gboolean label_sensitive = FALSE;
645- gboolean label_visible = FALSE;
646- guint32 image_type = 0;
647- gchar* image_data = NULL;
648- gboolean image_sensitive = FALSE;
649- gboolean image_visible = FALSE;
650- gint32 priority = -1;
651-
652- g_variant_get (args, "(a(ssssbbusbbi))", &iter);
653- while (g_variant_iter_loop (iter, "(ssssbbusbbi)",
654- &indicator_id,
655- &entry_id,
656- &name_hint,
657- &label,
658- &label_sensitive,
659- &label_visible,
660- &image_type,
661- &image_data,
662- &image_sensitive,
663- &image_visible,
664- &priority))
665- {
666- g_variant_unref (args);
667- return g_strdup (entry_id);
668- }
669-
670- g_variant_unref (args);
671- g_assert_not_reached ();
672- return NULL;
673-}
674-#ifdef META_HAS_LOCAL_MENUS
675-static void
676-on_local_menu_activated (GDBusProxy *proxy,
677- gchar *sender_name,
678- gchar *signal_name,
679- GVariant *parameters,
680- gpointer user_data)
681-{
682-
683- if (g_strcmp0 (signal_name, "EntryActivated") == 0)
684- {
685- show_local_menu_data *d = (show_local_menu_data *) user_data;
686- gchar *entry_id = NULL;
687- gint x_out, y_out;
688- guint width, height;
689-
690- g_variant_get (parameters, "(s(iiuu))", &entry_id, &x_out, &y_out, &width, &height, NULL);
691-
692- if (!d->local_menu_entry_id)
693- {
694- GError *error = NULL;
695- GVariant *params = g_variant_new ("(s)", "libappmenu.so", NULL);
696- GVariant *args = g_dbus_proxy_call_sync (proxy, "SyncOne", params, 0, 500, NULL, &error);
697-
698- g_assert_no_error (error);
699- d->local_menu_entry_id = gwd_get_entry_id_from_sync_variant (args);
700- }
701-
702- if (g_strcmp0 (entry_id, d->local_menu_entry_id) == 0)
703- {
704- d->rect->x = x_out - d->dx;
705- d->rect->y = y_out - d->dy;
706- d->rect->width = width;
707- d->rect->height = height;
708- (*d->cb) (d->user_data);
709- }
710- else if (g_strcmp0 (entry_id, "") == 0)
711- {
712- memset (d->rect, 0, sizeof (GdkRectangle));
713- (*d->cb) (d->user_data);
714-
715- g_signal_handlers_disconnect_by_func (proxy, on_local_menu_activated, d);
716-
717- if (active_menu)
718- {
719- g_free (active_menu);
720- active_menu = NULL;
721- }
722-
723- g_free (d->local_menu_entry_id);
724- g_free (d);
725- }
726- }
727-
728-}
729-#endif
730-gboolean
731-gwd_move_window_instead (gpointer user_data)
732-{
733- (*pending_menu->cb) (pending_menu->user_data);
734- g_source_remove (pending_menu->move_timeout_id);
735- g_free (pending_menu->user_data);
736- g_free (pending_menu);
737- pending_menu = NULL;
738- return FALSE;
739-}
740-
741-void
742-local_menu_process_motion(gint x_root, gint y_root)
743-{
744- if (!pending_menu)
745- return;
746-
747- if (abs (pending_menu->x_root - x_root) > 4 &&
748- abs (pending_menu->y_root - y_root) > 4)
749- gwd_move_window_instead (pending_menu);
750-}
751-
752-void
753-gwd_prepare_show_local_menu (start_move_window_cb start_move_window,
754- gpointer user_data_start_move_window,
755- gint x_root,
756- gint y_root)
757-{
758- if (pending_menu)
759- {
760- g_source_remove (pending_menu->move_timeout_id);
761- g_free (pending_menu->user_data);
762- g_free (pending_menu);
763- pending_menu = NULL;
764- }
765-
766- pending_menu = g_new0 (pending_local_menu, 1);
767- pending_menu->cb = start_move_window;
768- pending_menu->user_data = user_data_start_move_window;
769- pending_menu->move_timeout_id = g_timeout_add (150, gwd_move_window_instead, pending_menu);
770-}
771-
772-#ifdef META_HAS_LOCAL_MENUS
773-void
774-local_menu_entry_activated_request (GDBusProxy *proxy,
775- gchar *sender_name,
776- gchar *signal_name,
777- GVariant *parameters,
778- gpointer user_data)
779-{
780- if (g_strcmp0 (signal_name, "EntryActivateRequest") == 0)
781- {
782- gchar *activated_entry_id;
783- gchar *local_menu_entry_id;
784- local_menu_entry_activated_request_funcs *funcs = (local_menu_entry_activated_request_funcs *) user_data;
785-
786- g_variant_get (parameters, "(s)", &activated_entry_id, NULL);
787-
788- GError *error = NULL;
789- GVariant *params = g_variant_new ("(s)", "libappmenu.so", NULL);
790- GVariant *args = g_dbus_proxy_call_sync (proxy, "SyncOne", params, 0, 500, NULL, &error);
791-
792- g_assert_no_error (error);
793- local_menu_entry_id = gwd_get_entry_id_from_sync_variant (args);
794-
795- if (g_strcmp0 (activated_entry_id, local_menu_entry_id) == 0)
796- {
797- WnckScreen *screen = wnck_screen_get_for_root (gdk_x11_get_default_root_xwindow ());
798- int dx, dy, top_height;
799- Window xid;
800-
801- if (screen)
802- {
803- Box *rect = (*funcs->active_window_local_menu_rect_callback) ((gpointer) screen, &dx, &dy, &top_height, &xid);
804-
805- if (rect)
806- {
807- int x = rect->x1;
808- int y = top_height;
809-
810- gwd_show_local_menu (gdk_x11_display_get_xdisplay (gdk_display_get_default ()),
811- xid, x + dx, y + dy, x, y, 0, 0,
812- funcs->show_window_menu_hidden_callback, GINT_TO_POINTER (xid));
813- }
814- }
815- }
816- }
817-}
818-#endif
819-
820-gboolean
821-gwd_show_local_menu (Display *xdisplay,
822- Window frame_xwindow,
823- int x,
824- int y,
825- int x_win,
826- int y_win,
827- int button,
828- guint32 timestamp,
829- show_window_menu_hidden_cb cb,
830- gpointer user_data_show_window_menu)
831-{
832- if (pending_menu)
833- {
834- g_source_remove (pending_menu->move_timeout_id);
835- g_free (pending_menu->user_data);
836- g_free (pending_menu);
837- pending_menu = NULL;
838- }
839-
840-#ifdef META_HAS_LOCAL_MENUS
841-
842-
843- XUngrabPointer (gdk_x11_display_get_xdisplay (gdk_display_get_default ()), CurrentTime);
844- XUngrabKeyboard (gdk_x11_display_get_xdisplay (gdk_display_get_default ()), CurrentTime);
845- XSync (gdk_x11_display_get_xdisplay (gdk_display_get_default ()), FALSE);
846-
847- GDBusProxy *proxy = global_lim_listener;
848-
849- if (proxy)
850- {
851- GVariant *message = g_variant_new ("(uiiu)", frame_xwindow, x, y, time);
852- GError *error = NULL;
853- g_dbus_proxy_call_sync (proxy, "ShowAppMenu", message, 0, 500, NULL, &error);
854- if (error)
855- {
856- g_print ("error calling ShowAppMenu: %s\n", error->message);
857- return FALSE;
858- }
859-
860- show_local_menu_data *data = g_new0 (show_local_menu_data, 1);
861-
862- if (active_menu)
863- g_free (active_menu);
864-
865- active_menu = g_new0 (active_local_menu, 1);
866-
867- data->cb = cb;
868- data->user_data = user_data_show_window_menu;
869- data->rect = &active_menu->rect;
870- data->dx = x - x_win;
871- data->dy = y - y_win;
872- data->local_menu_entry_id = NULL;
873-
874- g_signal_connect (proxy, "g-signal", G_CALLBACK (on_local_menu_activated), data);
875-
876- return TRUE;
877- }
878-#endif
879- return FALSE;
880-}
881-
882-void
883-force_local_menus_on (Window win,
884- MetaButtonLayout *button_layout)
885-{
886-#ifdef META_HAS_LOCAL_MENUS
887- if (gwd_window_should_have_local_menu (win))
888- {
889- if (button_layout->left_buttons[0] != META_BUTTON_FUNCTION_LAST)
890- {
891- unsigned int i = 0;
892- for (; i < MAX_BUTTONS_PER_CORNER; i++)
893- {
894- if (button_layout->left_buttons[i] == META_BUTTON_FUNCTION_WINDOW_MENU)
895- break;
896- else if (button_layout->left_buttons[i] == META_BUTTON_FUNCTION_LAST)
897- {
898- if ((i + 1) < MAX_BUTTONS_PER_CORNER)
899- {
900- button_layout->left_buttons[i + 1] = META_BUTTON_FUNCTION_LAST;
901- button_layout->left_buttons[i] = META_BUTTON_FUNCTION_WINDOW_MENU;
902- break;
903- }
904- }
905- }
906- }
907- if (button_layout->right_buttons[0] != META_BUTTON_FUNCTION_LAST)
908- {
909- unsigned int i = 0;
910- for (; i < MAX_BUTTONS_PER_CORNER; i++)
911- {
912- if (button_layout->right_buttons[i] == META_BUTTON_FUNCTION_WINDOW_MENU)
913- break;
914- else if (button_layout->right_buttons[i] == META_BUTTON_FUNCTION_LAST)
915- {
916- if ((i + 1) < MAX_BUTTONS_PER_CORNER)
917- {
918- button_layout->right_buttons[i + 1] = META_BUTTON_FUNCTION_LAST;
919- button_layout->right_buttons[i] = META_BUTTON_FUNCTION_WINDOW_MENU;
920- break;
921- }
922- }
923- }
924- }
925- }
926-#endif
927-}
928-
929-void
930-local_menu_cache_notify_window_destroyed (Window xid)
931-{
932- g_hash_table_remove (get_windows_with_menus_table (), GINT_TO_POINTER (xid));
933-}
934-
935-void
936-local_menu_cache_reload_xwindow (Display *dpy, Window xid)
937-{
938- read_xprop_for_window (dpy, xid);
939-}
940-
941-
942
943=== removed file 'gtk/window-decorator/local-menus/src/local-menus.h'
944--- gtk/window-decorator/local-menus/src/local-menus.h 2012-03-02 02:36:45 +0000
945+++ gtk/window-decorator/local-menus/src/local-menus.h 1970-01-01 00:00:00 +0000
946@@ -1,125 +0,0 @@
947-/*
948- * Copyright © 2006 Novell, Inc.
949- *
950- * This library is free software; you can redistribute it and/or
951- * modify it under the terms of the GNU Lesser General Public
952- * License as published by the Free Software Foundation; either
953- * version 2 of the License, or (at your option) any later version.
954- *
955- * This library is distributed in the hope that it will be useful,
956- * but WITHOUT ANY WARRANTY; without even the implied warranty of
957- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
958- * Lesser General Public License for more details.
959- *
960- * You should have received a copy of the GNU Lesser General Public
961- * License along with this library; if not, write to the
962- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
963- * Boston, MA 02111-1307, USA.
964- *
965- * Author: David Reveman <davidr@novell.com>
966- *
967- * 2D Mode: Copyright © 2010 Sam Spilsbury <smspillaz@gmail.com>
968- * Frames Management: Copright © 2011 Canonical Ltd.
969- * Authored By: Sam Spilsbury <sam.spilsbury@canonical.com>
970- */
971-
972-#ifdef __cplusplus
973-extern "C"
974-{
975-#endif
976-
977-#include <glib.h>
978-#include <gio/gio.h>
979-#ifndef WNCK_I_KNOW_THIS_IS_UNSTABLE
980-#define WNCK_I_KNOW_THIS_IS_UNSTABLE
981-#endif
982-#include <libwnck/libwnck.h>
983-#include <libwnck/window-action-menu.h>
984-#include <metacity-private/theme.h>
985-#include <X11/Xregion.h>
986-
987-
988-typedef void (*show_window_menu_hidden_cb) (gpointer);
989-typedef void (*start_move_window_cb) (gpointer);
990-typedef Box * (*get_active_window_local_menu_rect_cb) (gpointer, int *, int *, int *, Window *);
991-
992-typedef struct _pending_local_menu
993-{
994- gint move_timeout_id;
995- gpointer user_data;
996- start_move_window_cb cb;
997- gint x_root;
998- gint y_root;
999-} pending_local_menu;
1000-
1001-typedef struct _active_local_menu
1002-{
1003- GdkRectangle rect;
1004-} active_local_menu;
1005-
1006-extern active_local_menu *active_menu;
1007-extern GDBusProxy *global_lim_listener;
1008-
1009-typedef struct _show_local_menu_data
1010-{
1011- show_window_menu_hidden_cb cb;
1012- gpointer user_data;
1013- GdkRectangle *rect;
1014- gint dx;
1015- gint dy;
1016- gchar *local_menu_entry_id;
1017-} show_local_menu_data;
1018-
1019-typedef struct _local_menu_entry_activated_request_funcs
1020-{
1021- get_active_window_local_menu_rect_cb active_window_local_menu_rect_callback;
1022- show_window_menu_hidden_cb show_window_menu_hidden_callback;
1023-} local_menu_entry_activated_request_funcs;
1024-
1025-gboolean
1026-gwd_window_should_have_local_menu (Window win);
1027-
1028-void
1029-force_local_menus_on (Window win,
1030- MetaButtonLayout *layout);
1031-
1032-/* Button Down */
1033-void
1034-gwd_prepare_show_local_menu (start_move_window_cb start_move_window,
1035- gpointer user_data_start_move_window, gint x_root, gint y_root);
1036-
1037-/* Button Up */
1038-gboolean
1039-gwd_show_local_menu (Display *xdisplay,
1040- Window frame_xwindow,
1041- int x,
1042- int y,
1043- int x_win,
1044- int y_win,
1045- int button,
1046- guint32 timestamp,
1047- show_window_menu_hidden_cb cb,
1048- gpointer user_data_show_window_menu);
1049-
1050-void
1051-local_menu_cache_notify_window_destroyed (Window xid);
1052-
1053-void
1054-local_menu_cache_reload_xwindow (Display *xdisplay, Window xid);
1055-
1056-gboolean
1057-local_menu_allowed_on_window (Display *dpy, Window xid);
1058-
1059-void
1060-local_menu_entry_activated_request (GDBusProxy *proxy,
1061- gchar *sender_name,
1062- gchar *signal_name,
1063- GVariant *parameters,
1064- gpointer user_data);
1065-
1066-void
1067-local_menu_process_motion (gint x_root, gint y_root);
1068-
1069-#ifdef __cplusplus
1070-}
1071-#endif
1072
1073=== removed directory 'gtk/window-decorator/local-menus/tests'
1074=== removed file 'gtk/window-decorator/local-menus/tests/CMakeLists.txt'
1075--- gtk/window-decorator/local-menus/tests/CMakeLists.txt 2012-02-02 16:55:07 +0000
1076+++ gtk/window-decorator/local-menus/tests/CMakeLists.txt 1970-01-01 00:00:00 +0000
1077@@ -1,3 +0,0 @@
1078-include_directories (${CMAKE_CURRENT_SOURCE_DIR})
1079-add_subdirectory (check_local_menu_on_off)
1080-add_subdirectory (force_local_menu_on)
1081
1082=== removed directory 'gtk/window-decorator/local-menus/tests/check_local_menu_on_off'
1083=== removed file 'gtk/window-decorator/local-menus/tests/check_local_menu_on_off/CMakeLists.txt'
1084--- gtk/window-decorator/local-menus/tests/check_local_menu_on_off/CMakeLists.txt 2012-02-02 16:55:07 +0000
1085+++ gtk/window-decorator/local-menus/tests/check_local_menu_on_off/CMakeLists.txt 1970-01-01 00:00:00 +0000
1086@@ -1,21 +0,0 @@
1087-include_directories (${CMAKE_CURRENT_SOURCE_DIR}
1088- ${compiz_SOURCE_DIR}/gtk/window-decorator/local-menus/tests
1089- ${compiz_SOURCE_DIR}/gtk/window-decorator
1090- ${compiz_SOURCE_DIR}/gtk/window-decorator/local-menus/src)
1091-
1092-add_executable(
1093- gtk_window_decorator_check_local_menu_on_off_test
1094-
1095- ${CMAKE_CURRENT_SOURCE_DIR}/test-local-menu-on-off.cpp
1096-)
1097-
1098-target_link_libraries(
1099- gtk_window_decorator_check_local_menu_on_off_test
1100-
1101- gtk_window_decorator_local_menus
1102-
1103- ${GTEST_BOTH_LIBRARIES}
1104- ${CMAKE_THREAD_LIBS_INIT} # Link in pthread.
1105-)
1106-
1107-add_test (gtk_window_decorator_local_menus_on_off gtk_window_decorator_check_local_menu_on_off_test)
1108
1109=== removed directory 'gtk/window-decorator/local-menus/tests/check_local_menu_on_off/check_local_menu_on_off'
1110=== removed directory 'gtk/window-decorator/local-menus/tests/check_local_menu_on_off/check_local_menu_on_off/CMakeFiles'
1111=== removed file 'gtk/window-decorator/local-menus/tests/check_local_menu_on_off/test-local-menu-on-off.cpp'
1112--- gtk/window-decorator/local-menus/tests/check_local_menu_on_off/test-local-menu-on-off.cpp 2012-03-02 02:36:45 +0000
1113+++ gtk/window-decorator/local-menus/tests/check_local_menu_on_off/test-local-menu-on-off.cpp 1970-01-01 00:00:00 +0000
1114@@ -1,47 +0,0 @@
1115-#include "test-local-menu.h"
1116-#include <string.h>
1117-#include <gdk/gdkx.h>
1118-
1119-#define GLOBAL 0
1120-#define LOCAL 1
1121-#ifdef META_HAS_LOCAL_MENUS
1122-
1123-TEST_F (GtkWindowDecoratorTestLocalMenu, TestOnNoProp)
1124-{
1125- g_settings_set_enum (getSettings (), "menu-mode", LOCAL);
1126- gboolean result = gwd_window_should_have_local_menu (getWindow ());
1127-
1128- EXPECT_FALSE (result);
1129-}
1130-
1131-TEST_F (GtkWindowDecoratorTestLocalMenu, TestOnWithProp)
1132-{
1133- g_settings_set_enum (getSettings (), "menu-mode", LOCAL);
1134-
1135- Window xid = getWindow ();
1136- Atom ubuntu_appmenu_unique_name = XInternAtom (gdk_x11_display_get_xdisplay (gdk_display_get_default ()), "_UBUNTU_APPMENU_UNIQUE_NAME", FALSE);
1137- Atom utf8_string = XInternAtom (gdk_x11_display_get_xdisplay (gdk_display_get_default ()), "UTF8_STRING", FALSE);
1138- const char data[] = ":abcd1234";
1139-
1140- XChangeProperty (gdk_x11_display_get_xdisplay (gdk_display_get_default ()), xid, ubuntu_appmenu_unique_name, utf8_string, 8, PropModeReplace, (const unsigned char *) data, strlen (data));
1141-
1142- gdk_display_sync (gdk_display_get_default ());
1143-
1144- gboolean result = gwd_window_should_have_local_menu (getWindow ());
1145-
1146- EXPECT_TRUE (result);
1147-}
1148-
1149-TEST_F (GtkWindowDecoratorTestLocalMenu, TestOff)
1150-{
1151- g_settings_set_enum (getSettings (), "menu-mode", GLOBAL);
1152- gboolean result = gwd_window_should_have_local_menu (getWindow ());
1153-
1154- EXPECT_FALSE (result);
1155-}
1156-#else
1157-TEST_F (GtkWindowDecoratorTestLocalMenu, NoMenus)
1158-{
1159- ASSERT_TRUE (true) << "Local menus tests not enabled because META_HAS_LOCAL_MENUS is off";
1160-}
1161-#endif
1162
1163=== removed directory 'gtk/window-decorator/local-menus/tests/force_local_menu_on'
1164=== removed file 'gtk/window-decorator/local-menus/tests/force_local_menu_on/CMakeLists.txt'
1165--- gtk/window-decorator/local-menus/tests/force_local_menu_on/CMakeLists.txt 2012-02-02 16:55:07 +0000
1166+++ gtk/window-decorator/local-menus/tests/force_local_menu_on/CMakeLists.txt 1970-01-01 00:00:00 +0000
1167@@ -1,21 +0,0 @@
1168-include_directories (${CMAKE_CURRENT_SOURCE_DIR}
1169- ${compiz_SOURCE_DIR}/gtk/window-decorator/local-menus/tests
1170- ${compiz_SOURCE_DIR}/gtk/window-decorator
1171- ${compiz_SOURCE_DIR}/gtk/window-decorator/local-menus/src)
1172-
1173-add_executable(
1174- gtk_window_decorator_force_local_menu_on_test
1175-
1176- ${CMAKE_CURRENT_SOURCE_DIR}/test-force-local-menu-on.cpp
1177-)
1178-
1179-target_link_libraries(
1180- gtk_window_decorator_force_local_menu_on_test
1181-
1182- gtk_window_decorator_local_menus
1183-
1184- ${GTEST_BOTH_LIBRARIES}
1185- ${CMAKE_THREAD_LIBS_INIT} # Link in pthread.
1186-)
1187-
1188-add_test (gtk_window_decorator_force_local_menu_on gtk_window_decorator_force_local_menu_on_test)
1189
1190=== removed file 'gtk/window-decorator/local-menus/tests/force_local_menu_on/test-force-local-menu-on.cpp'
1191--- gtk/window-decorator/local-menus/tests/force_local_menu_on/test-force-local-menu-on.cpp 2012-03-02 02:36:45 +0000
1192+++ gtk/window-decorator/local-menus/tests/force_local_menu_on/test-force-local-menu-on.cpp 1970-01-01 00:00:00 +0000
1193@@ -1,89 +0,0 @@
1194-#include "test-local-menu.h"
1195-#include <cstring>
1196-#include <gdk/gdkx.h>
1197-
1198-#define GLOBAL 0
1199-#define LOCAL 1
1200-#ifdef META_HAS_LOCAL_MENUS
1201-
1202-namespace
1203-{
1204- void initializeMetaButtonLayout (MetaButtonLayout *layout)
1205- {
1206- memset (layout, 0, sizeof (MetaButtonLayout));
1207-
1208- unsigned int i;
1209-
1210- for (i = 0; i < MAX_BUTTONS_PER_CORNER; i++)
1211- {
1212- layout->right_buttons[i] = META_BUTTON_FUNCTION_LAST;
1213- layout->left_buttons[i] = META_BUTTON_FUNCTION_LAST;
1214- }
1215- }
1216-}
1217-
1218-class GtkWindowDecoratorTestLocalMenuLayout :
1219- public GtkWindowDecoratorTestLocalMenu
1220-{
1221- public:
1222-
1223- MetaButtonLayout * getLayout () { return &mLayout; }
1224-
1225- virtual void SetUp ()
1226- {
1227- GtkWindowDecoratorTestLocalMenu::SetUp ();
1228- ::initializeMetaButtonLayout (&mLayout);
1229- g_settings_set_enum (getSettings (), "menu-mode", LOCAL);
1230-
1231- Window xid = getWindow ();
1232- Atom ubuntu_appmenu_unique_name = XInternAtom (gdk_x11_display_get_xdisplay (gdk_display_get_default ()), "_UBUNTU_APPMENU_UNIQUE_NAME", FALSE);
1233- Atom utf8_string = XInternAtom (gdk_x11_display_get_xdisplay (gdk_display_get_default ()), "UTF8_STRING", FALSE);
1234- const char data[] = ":abcd1234";
1235-
1236- XChangeProperty (gdk_x11_display_get_xdisplay (gdk_display_get_default ()), xid, ubuntu_appmenu_unique_name, utf8_string, 8, PropModeReplace, (const unsigned char *) data, strlen (data));
1237-
1238- gdk_display_sync (gdk_display_get_default ());
1239-
1240- ASSERT_TRUE (gwd_window_should_have_local_menu (getWindow ()));
1241- }
1242-
1243- private:
1244-
1245- MetaButtonLayout mLayout;
1246-};
1247-
1248-TEST_F (GtkWindowDecoratorTestLocalMenuLayout, TestForceNoButtonsSet)
1249-{
1250- force_local_menus_on (getWindow (), getLayout ());
1251-
1252- EXPECT_EQ (getLayout ()->right_buttons[0], META_BUTTON_FUNCTION_LAST);
1253- EXPECT_EQ (getLayout ()->left_buttons[0], META_BUTTON_FUNCTION_LAST);
1254-}
1255-
1256-TEST_F (GtkWindowDecoratorTestLocalMenuLayout, TestForceNoCloseButtonSet)
1257-{
1258- getLayout ()->right_buttons[0] = META_BUTTON_FUNCTION_CLOSE;
1259-
1260- force_local_menus_on (getWindow (), getLayout ());
1261-
1262- EXPECT_EQ (getLayout ()->right_buttons[1], META_BUTTON_FUNCTION_WINDOW_MENU);
1263- EXPECT_EQ (getLayout ()->left_buttons[0], META_BUTTON_FUNCTION_LAST);
1264-}
1265-
1266-TEST_F (GtkWindowDecoratorTestLocalMenuLayout, TestForceNoCloseMinimizeMaximizeButtonSet)
1267-{
1268- getLayout ()->left_buttons[0] = META_BUTTON_FUNCTION_CLOSE;
1269- getLayout ()->left_buttons[1] = META_BUTTON_FUNCTION_CLOSE;
1270- getLayout ()->left_buttons[2] = META_BUTTON_FUNCTION_CLOSE;
1271-
1272- force_local_menus_on (getWindow (), getLayout ());
1273-
1274- EXPECT_EQ (getLayout ()->right_buttons[0], META_BUTTON_FUNCTION_LAST);
1275- EXPECT_EQ (getLayout ()->left_buttons[3], META_BUTTON_FUNCTION_WINDOW_MENU);
1276-}
1277-#else
1278-TEST_F (GtkWindowDecoratorTestLocalMenu, NoMenus)
1279-{
1280- ASSERT_TRUE (true) << "Local menus tests not enabled because META_HAS_LOCAL_MENUS is off";
1281-}
1282-#endif
1283
1284=== removed directory 'gtk/window-decorator/local-menus/tests/show_hide_menu'
1285=== removed file 'gtk/window-decorator/local-menus/tests/test-local-menu.h'
1286--- gtk/window-decorator/local-menus/tests/test-local-menu.h 2012-03-02 02:36:45 +0000
1287+++ gtk/window-decorator/local-menus/tests/test-local-menu.h 1970-01-01 00:00:00 +0000
1288@@ -1,106 +0,0 @@
1289-#include <gtest/gtest.h>
1290-#include <gmock/gmock.h>
1291-#include "local-menus.h"
1292-#include <X11/Xlib.h>
1293-#include <gio/gio.h>
1294-#include <sys/poll.h>
1295-#include <X11/Xatom.h>
1296-
1297-class GtkWindowDecoratorTestLocalMenu :
1298- public ::testing::Test
1299-{
1300- public:
1301-
1302-#ifdef META_HAS_LOCAL_MENUS
1303- Window getWindow () { return mXWindow; }
1304- GSettings * getSettings () { return mSettings; }
1305- virtual void SetUp ()
1306- {
1307- gtk_init (NULL, NULL);
1308-
1309- mXDisplay = XOpenDisplay (NULL);
1310-
1311- XSelectInput (mXDisplay, DefaultRootWindow (mXDisplay), PropertyChangeMask);
1312-
1313- mXWindow = XCreateSimpleWindow (mXDisplay, DefaultRootWindow (mXDisplay), 0, 0, 100, 100, 0, 0, 0);
1314-
1315- Atom net_client_list = XInternAtom (mXDisplay, "_NET_CLIENT_LIST", FALSE);
1316-
1317- XMapRaised (mXDisplay, mXWindow);
1318-
1319- XFlush (mXDisplay);
1320-
1321- /* Wait for _NET_CLIENT_LIST to be updated with this window */
1322- while (1)
1323- {
1324- struct pollfd pfd;
1325-
1326- pfd.events = POLLIN;
1327- pfd.revents = 0;
1328- pfd.fd = ConnectionNumber (mXDisplay);
1329-
1330- XEvent event;
1331-
1332- poll (&pfd, 1, -1);
1333-
1334- XNextEvent (mXDisplay, &event);
1335-
1336- gboolean foundWindow = FALSE;
1337-
1338- switch (event.type)
1339- {
1340- case PropertyNotify:
1341- {
1342- if (event.xproperty.atom == net_client_list)
1343- {
1344- Atom type;
1345- int fmt;
1346- unsigned long nitems, nleft;
1347- unsigned char *prop;
1348-
1349- XGetWindowProperty (mXDisplay, event.xproperty.window, net_client_list,
1350- 0L, 128L, FALSE, XA_WINDOW, &type, &fmt, &nitems, &nleft, &prop);
1351-
1352- if (fmt == 32 && type == XA_WINDOW && nitems && !nleft)
1353- {
1354- Window *windows = (Window *) prop;
1355-
1356- while (nitems--)
1357- {
1358- if (*(windows++) == mXWindow)
1359- foundWindow = TRUE;
1360- }
1361- }
1362-
1363- XFree (prop);
1364- }
1365-
1366- break;
1367- }
1368- default:
1369- break;
1370- }
1371-
1372- if (foundWindow)
1373- break;
1374- }
1375-
1376- g_setenv("GSETTINGS_BACKEND", "memory", true);
1377- mSettings = g_settings_new ("com.canonical.indicator.appmenu");
1378- }
1379-
1380- virtual void TearDown ()
1381- {
1382- XDestroyWindow (mXDisplay, mXWindow);
1383- XCloseDisplay (mXDisplay);
1384-
1385- g_object_unref (mSettings);
1386- }
1387-#endif
1388-
1389- private:
1390-
1391- Window mXWindow;
1392- Display *mXDisplay;
1393- GSettings *mSettings;
1394-};
1395
1396=== modified file 'gtk/window-decorator/metacity.c'
1397--- gtk/window-decorator/metacity.c 2012-03-02 02:36:45 +0000
1398+++ gtk/window-decorator/metacity.c 2012-03-30 07:25:22 +0000
1399@@ -24,7 +24,6 @@
1400 */
1401
1402 #include "gtk-window-decorator.h"
1403-#include "local-menus.h"
1404
1405 #ifdef USE_METACITY
1406
1407@@ -489,8 +488,6 @@
1408 button_layout->right_buttons[i] = META_BUTTON_FUNCTION_LAST;
1409 }
1410
1411- force_local_menus_on (d->win ? wnck_window_get_xid (d->win) : 0, button_layout);
1412-
1413 *flags = 0;
1414
1415 if (d->actions & WNCK_WINDOW_ACTION_CLOSE)
1416@@ -541,12 +538,6 @@
1417 *flags |= (MetaFrameFlags ) META_FRAME_ABOVE;
1418 #endif
1419
1420-#ifdef META_HAS_LOCAL_MENUS
1421- if (d->win &&
1422- local_menu_allowed_on_window (gdk_x11_display_get_xdisplay (gdk_display_get_default ()), wnck_window_get_xid (d->win)))
1423- *flags |= (MetaFrameFlags ) META_FRAME_ALLOWS_WINDOW_MENU;
1424-#endif
1425-
1426 meta_theme_get_frame_borders (theme,
1427 frame_type,
1428 d->frame->text_height,
1429@@ -567,15 +558,6 @@
1430 else
1431 clip->height = d->border_layout.left.y2 - d->border_layout.left.y1;
1432
1433- memset (fgeom, 0, sizeof (MetaFrameGeometry));
1434-
1435-#ifdef META_HAS_LOCAL_MENUS
1436-
1437- if (d->layout)
1438- fgeom->text_layout = g_object_ref (d->layout);
1439-
1440-#endif
1441-
1442 meta_theme_calc_geometry (theme,
1443 frame_type,
1444 d->frame->text_height,
1445@@ -585,15 +567,6 @@
1446 button_layout,
1447 fgeom);
1448
1449-#ifdef META_HAS_LOCAL_MENUS
1450-
1451- if (d->layout)
1452- g_object_unref (fgeom->text_layout);
1453-
1454- fgeom->text_layout = NULL;
1455-
1456-#endif
1457-
1458 clip->width += left_width + right_width;
1459 clip->height += top_height + bottom_height;
1460 }
1461@@ -628,11 +601,6 @@
1462 GdkColor bg_color;
1463 double bg_alpha;
1464
1465- memset (&button_layout, 0, sizeof (MetaButtonLayout));
1466-
1467- for (i = 0; i < MAX_BUTTONS_PER_CORNER; i++)
1468- button_layout.left_buttons[i] = button_layout.right_buttons[i] = META_BUTTON_FUNCTION_LAST;
1469-
1470 if (!d->pixmap || !d->picture)
1471 return;
1472
1473@@ -707,9 +675,6 @@
1474
1475 size = MAX (fgeom.top_height, fgeom.bottom_height);
1476
1477- if (active_menu)
1478- g_object_set_data (G_OBJECT (style_window), "local_menu_rect", &active_menu->rect);
1479-
1480 if (rect.width && size)
1481 {
1482 XRenderPictFormat *format;
1483@@ -934,9 +899,6 @@
1484 XRenderFreePicture (xdisplay, src);
1485 }
1486
1487- if (active_menu)
1488- g_object_set_data (G_OBJECT (style_window), "local_menu_rect", NULL);
1489-
1490 copy_to_front_buffer (d);
1491
1492 if (d->frame_window)
1493@@ -1116,15 +1078,6 @@
1494 break;
1495 #endif
1496
1497-#ifdef META_HAS_LOCAL_MENUS
1498- case BUTTON_WINDOW_MENU:
1499- if (!meta_button_present (&button_layout, META_BUTTON_FUNCTION_WINDOW_MENU))
1500- return FALSE;
1501-
1502- space = &fgeom.window_menu_rect;
1503- break;
1504-#endif
1505-
1506 default:
1507 return FALSE;
1508 }
1509@@ -1313,8 +1266,6 @@
1510 MetaTheme *theme;
1511 GdkRectangle clip;
1512
1513- memset (&fgeom, 0, sizeof (MetaFrameGeometry));
1514-
1515 theme = meta_theme_get_current ();
1516
1517 meta_get_decoration_geometry (d, theme, &flags, &fgeom, &button_layout,
1518@@ -1539,11 +1490,6 @@
1519 return META_BUTTON_FUNCTION_UNSTICK;
1520 #endif
1521
1522-#ifdef META_HAS_LOCAL_MENUS
1523- else if (strcmp (str, "window_menu") == 0)
1524- return META_BUTTON_FUNCTION_WINDOW_MENU;
1525-#endif
1526-
1527 else
1528 return META_BUTTON_FUNCTION_LAST;
1529 }
1530
1531=== modified file 'gtk/window-decorator/wnck.c'
1532--- gtk/window-decorator/wnck.c 2012-03-05 06:48:16 +0000
1533+++ gtk/window-decorator/wnck.c 2012-03-30 07:25:22 +0000
1534@@ -24,7 +24,6 @@
1535 */
1536
1537 #include "gtk-window-decorator.h"
1538-#include "local-menus.h"
1539
1540 const gchar *
1541 get_frame_type (WnckWindow *win)
1542@@ -376,19 +375,6 @@
1543 if (cursor[i][j].cursor)
1544 XDefineCursor (xdisplay, d->event_windows[i][j].window,
1545 cursor[i][j].cursor);
1546-
1547- XGrabButton (xdisplay,
1548- Button1Mask,
1549- AnyModifier,
1550- d->event_windows[i][j].window,
1551- FALSE,
1552- ButtonPressMask |
1553- ButtonReleaseMask |
1554- PointerMotionMask,
1555- GrabModeAsync,
1556- GrabModeAsync,
1557- None,
1558- None);
1559 }
1560 }
1561
1562@@ -403,20 +389,6 @@
1563 CopyFromParent, CopyFromParent, CopyFromParent,
1564 CWOverrideRedirect | CWEventMask, &attr);
1565
1566-
1567- XGrabButton (xdisplay,
1568- Button1Mask,
1569- AnyModifier,
1570- d->button_windows[i].window,
1571- FALSE,
1572- ButtonPressMask |
1573- ButtonReleaseMask |
1574- PointerMotionMask,
1575- GrabModeAsync,
1576- GrabModeAsync,
1577- None,
1578- None);
1579-
1580 d->button_states[i] = 0;
1581 }
1582 }
1583@@ -770,8 +742,7 @@
1584 stick_button_event,
1585 unshade_button_event,
1586 unabove_button_event,
1587- unstick_button_event,
1588- window_menu_button_event
1589+ unstick_button_event
1590 };
1591
1592 d = calloc (1, sizeof (decor_t));
1593@@ -817,8 +788,6 @@
1594 window_closed (WnckScreen *screen,
1595 WnckWindow *win)
1596 {
1597- local_menu_cache_notify_window_destroyed (wnck_window_get_xid (win));
1598-
1599 decor_t *d = g_object_get_data (G_OBJECT (win), "decor");
1600
1601 if (d)

Subscribers

People subscribed via source and target branches