Commit 69fc109c22a59acdf0fbf35c03b9c7a516869ba8

  • avatar
  • Matthias Clasen <mclasen @red…at.com>
  • Sun Aug 09 02:00:07 GMT 2009
Avoid some gratitious behaviour changes

Go back to allowing a lot of the WM-level functions on foreign windows,
since we used to allow that before csw. Fixes bug 589732.
gdk/x11/gdkwindow-x11.c
(69 / 71)
  
113113static void gdk_window_impl_x11_finalize (GObject *object);
114114static void gdk_window_impl_iface_init (GdkWindowImplIface *iface);
115115
116#define WINDOW_IS_TOPLEVEL_OR_FOREIGN(window) \
117 (GDK_WINDOW_TYPE (window) != GDK_WINDOW_CHILD && \
118 GDK_WINDOW_TYPE (window) != GDK_WINDOW_OFFSCREEN)
119
116120#define WINDOW_IS_TOPLEVEL(window) \
117121 (GDK_WINDOW_TYPE (window) != GDK_WINDOW_CHILD && \
118122 GDK_WINDOW_TYPE (window) != GDK_WINDOW_FOREIGN && \
18201820{
18211821 GdkDisplay *display;
18221822
1823 g_return_if_fail (WINDOW_IS_TOPLEVEL (window));
1824
1823 g_return_if_fail (GDK_IS_WINDOW (window));
1824
18251825 if (GDK_WINDOW_DESTROYED (window) ||
1826 !WINDOW_IS_TOPLEVEL (window))
1826 !WINDOW_IS_TOPLEVEL_OR_FOREIGN (window))
18271827 return;
18281828
18291829 display = GDK_WINDOW_DISPLAY (window);
18941894 XSizeHints size_hints;
18951895
18961896 if (GDK_WINDOW_DESTROYED (window) ||
1897 !WINDOW_IS_TOPLEVEL (window))
1897 !WINDOW_IS_TOPLEVEL_OR_FOREIGN (window))
18981898 return;
18991899
19001900 size_hints.flags = 0;
19481948 Atom atom;
19491949
19501950 if (GDK_WINDOW_DESTROYED (window) ||
1951 !WINDOW_IS_TOPLEVEL (window))
1951 !WINDOW_IS_TOPLEVEL_OR_FOREIGN (window))
19521952 return;
19531953
19541954 display = gdk_drawable_get_display (window);
20322032 g_return_val_if_fail (GDK_IS_WINDOW (window), GDK_WINDOW_TYPE_HINT_NORMAL);
20332033
20342034 if (GDK_WINDOW_DESTROYED (window) ||
2035 !WINDOW_IS_TOPLEVEL (window))
2035 !WINDOW_IS_TOPLEVEL_OR_FOREIGN (window))
20362036 return GDK_WINDOW_TYPE_HINT_NORMAL;
20372037
20382038 type = GDK_WINDOW_TYPE_HINT_NORMAL;
21342134 GdkWindowObject *private;
21352135
21362136 if (GDK_WINDOW_DESTROYED (window) ||
2137 !WINDOW_IS_TOPLEVEL (window))
2137 !WINDOW_IS_TOPLEVEL_OR_FOREIGN (window))
21382138 return;
21392139
21402140 private = (GdkWindowObject*) window;
21702170 g_return_if_fail (GDK_WINDOW_TYPE (window) != GDK_WINDOW_CHILD);
21712171
21722172 if (GDK_WINDOW_DESTROYED (window) ||
2173 !WINDOW_IS_TOPLEVEL (window))
2173 !WINDOW_IS_TOPLEVEL_OR_FOREIGN (window))
21742174 return;
21752175
21762176 toplevel = _gdk_x11_window_get_toplevel (window);
22072207 g_return_if_fail (GDK_WINDOW_TYPE (window) != GDK_WINDOW_CHILD);
22082208
22092209 if (GDK_WINDOW_DESTROYED (window) ||
2210 !WINDOW_IS_TOPLEVEL (window))
2210 !WINDOW_IS_TOPLEVEL_OR_FOREIGN (window))
22112211 return;
22122212
22132213 toplevel = _gdk_x11_window_get_toplevel (window);
22382238 g_return_if_fail (GDK_WINDOW_TYPE (window) != GDK_WINDOW_CHILD);
22392239
22402240 if (GDK_WINDOW_DESTROYED (window) ||
2241 !WINDOW_IS_TOPLEVEL (window))
2241 !WINDOW_IS_TOPLEVEL_OR_FOREIGN (window))
22422242 return;
22432243
22442244 toplevel = _gdk_x11_window_get_toplevel (window);
22842284 XSizeHints size_hints;
22852285
22862286 if (GDK_WINDOW_DESTROYED (window) ||
2287 !WINDOW_IS_TOPLEVEL (window))
2287 !WINDOW_IS_TOPLEVEL_OR_FOREIGN (window))
22882288 return;
22892289
22902290 size_hints.flags = 0;
23922392 *geom_mask = 0;
23932393
23942394 if (GDK_WINDOW_DESTROYED (window) ||
2395 !WINDOW_IS_TOPLEVEL (window))
2395 !WINDOW_IS_TOPLEVEL_OR_FOREIGN (window))
23962396 return;
23972397
23982398 size_hints = XAllocSizeHints ();
25502550 g_return_if_fail (title != NULL);
25512551
25522552 if (GDK_WINDOW_DESTROYED (window) ||
2553 !WINDOW_IS_TOPLEVEL (window))
2553 !WINDOW_IS_TOPLEVEL_OR_FOREIGN (window))
25542554 return;
25552555
25562556 display = gdk_drawable_get_display (window);
25962596 const gchar *role)
25972597{
25982598 GdkDisplay *display;
2599
2599
26002600 display = gdk_drawable_get_display (window);
26012601
2602 if (!GDK_WINDOW_DESTROYED (window) &&
2603 WINDOW_IS_TOPLEVEL (window))
2604 {
2605 if (role)
2606 XChangeProperty (GDK_DISPLAY_XDISPLAY (display), GDK_WINDOW_XID (window),
2607 gdk_x11_get_xatom_by_name_for_display (display, "WM_WINDOW_ROLE"),
2608 XA_STRING, 8, PropModeReplace, (guchar *)role, strlen (role));
2609 else
2610 XDeleteProperty (GDK_DISPLAY_XDISPLAY (display), GDK_WINDOW_XID (window),
2611 gdk_x11_get_xatom_by_name_for_display (display, "WM_WINDOW_ROLE"));
2612 }
2602 if (GDK_WINDOW_DESTROYED (window) ||
2603 !WINDOW_IS_TOPLEVEL_OR_FOREIGN (window))
2604 return;
2605
2606 if (role)
2607 XChangeProperty (GDK_DISPLAY_XDISPLAY (display), GDK_WINDOW_XID (window),
2608 gdk_x11_get_xatom_by_name_for_display (display, "WM_WINDOW_ROLE"),
2609 XA_STRING, 8, PropModeReplace, (guchar *)role, strlen (role));
2610 else
2611 XDeleteProperty (GDK_DISPLAY_XDISPLAY (display), GDK_WINDOW_XID (window),
2612 gdk_x11_get_xatom_by_name_for_display (display, "WM_WINDOW_ROLE"));
26132613}
26142614
26152615/**
26232623 * Since: 2.12
26242624 *
26252625 **/
2626void
2626void
26272627gdk_window_set_startup_id (GdkWindow *window,
26282628 const gchar *startup_id)
26292629{
26302630 GdkDisplay *display;
2631
2631
26322632 g_return_if_fail (GDK_IS_WINDOW (window));
26332633
26342634 display = gdk_drawable_get_display (window);
26352635
2636 if (!GDK_WINDOW_DESTROYED (window) &&
2637 WINDOW_IS_TOPLEVEL (window))
2638 {
2639 if (startup_id)
2640 XChangeProperty (GDK_DISPLAY_XDISPLAY (display), GDK_WINDOW_XID (window),
2641 gdk_x11_get_xatom_by_name_for_display (display, "_NET_STARTUP_ID"),
2642 gdk_x11_get_xatom_by_name_for_display (display, "UTF8_STRING"), 8,
2643 PropModeReplace, (unsigned char *)startup_id, strlen (startup_id));
2644 else
2645 XDeleteProperty (GDK_DISPLAY_XDISPLAY (display), GDK_WINDOW_XID (window),
2646 gdk_x11_get_xatom_by_name_for_display (display, "_NET_STARTUP_ID"));
2647 }
2636 if (GDK_WINDOW_DESTROYED (window) ||
2637 !WINDOW_IS_TOPLEVEL_OR_FOREIGN (window))
2638 return;
2639
2640 if (startup_id)
2641 XChangeProperty (GDK_DISPLAY_XDISPLAY (display), GDK_WINDOW_XID (window),
2642 gdk_x11_get_xatom_by_name_for_display (display, "_NET_STARTUP_ID"),
2643 gdk_x11_get_xatom_by_name_for_display (display, "UTF8_STRING"), 8,
2644 PropModeReplace, (unsigned char *)startup_id, strlen (startup_id));
2645 else
2646 XDeleteProperty (GDK_DISPLAY_XDISPLAY (display), GDK_WINDOW_XID (window),
2647 gdk_x11_get_xatom_by_name_for_display (display, "_NET_STARTUP_ID"));
26482648}
26492649
26502650/**
26592659 *
26602660 * See gtk_window_set_transient_for() if you're using #GtkWindow or
26612661 * #GtkDialog.
2662 *
26632662 **/
2664void
2665gdk_window_set_transient_for (GdkWindow *window,
2663void
2664gdk_window_set_transient_for (GdkWindow *window,
26662665 GdkWindow *parent)
26672666{
26682667 if (!GDK_WINDOW_DESTROYED (window) && !GDK_WINDOW_DESTROYED (parent) &&
2669 WINDOW_IS_TOPLEVEL (window))
2668 WINDOW_IS_TOPLEVEL_OR_FOREIGN (window))
26702669 XSetTransientForHint (GDK_WINDOW_XDISPLAY (window),
26712670 GDK_WINDOW_XID (window),
26722671 GDK_WINDOW_XID (parent));
35273527 XSetWindowAttributes attr;
35283528
35293529 if (!GDK_WINDOW_DESTROYED (window) &&
3530 WINDOW_IS_TOPLEVEL (window))
3530 WINDOW_IS_TOPLEVEL_OR_FOREIGN (window))
35313531 {
35323532 GdkWindowObject *private = (GdkWindowObject *)window;
35333533 GdkWindowImplX11 *impl = GDK_WINDOW_IMPL_X11 (private->impl);
35703570 private->accept_focus = accept_focus;
35713571
35723572 if (!GDK_WINDOW_DESTROYED (window) &&
3573 WINDOW_IS_TOPLEVEL (window))
3573 WINDOW_IS_TOPLEVEL_OR_FOREIGN (window))
35743574 update_wm_hints (window, FALSE);
35753575 }
35763576}
36073607
36083608 if ((!GDK_WINDOW_DESTROYED (window)) &&
36093609 (!private->focus_on_map) &&
3610 WINDOW_IS_TOPLEVEL (window))
3610 WINDOW_IS_TOPLEVEL_OR_FOREIGN (window))
36113611 gdk_x11_window_set_user_time (window, 0);
36123612 }
36133613}
36433643 Window xid;
36443644
36453645 if (GDK_WINDOW_DESTROYED (window) ||
3646 !WINDOW_IS_TOPLEVEL (window))
3646 !WINDOW_IS_TOPLEVEL_OR_FOREIGN (window))
36473647 return;
36483648
36493649 display = gdk_drawable_get_display (window);
37143714 gint n;
37153715
37163716 if (GDK_WINDOW_DESTROYED (window) ||
3717 !WINDOW_IS_TOPLEVEL (window))
3717 !WINDOW_IS_TOPLEVEL_OR_FOREIGN (window))
37183718 return;
37193719
37203720 display = gdk_drawable_get_display (window);
38243824{
38253825 GdkToplevelX11 *toplevel;
38263826
3827 g_return_if_fail (GDK_WINDOW_TYPE (window) != GDK_WINDOW_CHILD);
3828
38293827 if (GDK_WINDOW_DESTROYED (window) ||
3830 !WINDOW_IS_TOPLEVEL (window))
3828 !WINDOW_IS_TOPLEVEL_OR_FOREIGN (window))
38313829 return;
38323830
38333831 toplevel = _gdk_x11_window_get_toplevel (window);
38883888 GdkDisplay *display;
38893889
38903890 if (GDK_WINDOW_DESTROYED (window) ||
3891 WINDOW_IS_TOPLEVEL (window))
3891 WINDOW_IS_TOPLEVEL_OR_FOREIGN (window))
38923892 return;
38933893
38943894 display = gdk_drawable_get_display (window);
39343934gdk_window_iconify (GdkWindow *window)
39353935{
39363936 if (GDK_WINDOW_DESTROYED (window) ||
3937 !WINDOW_IS_TOPLEVEL (window))
3937 !WINDOW_IS_TOPLEVEL_OR_FOREIGN (window))
39383938 return;
39393939
39403940 if (GDK_WINDOW_IS_MAPPED (window))
39673967gdk_window_deiconify (GdkWindow *window)
39683968{
39693969 if (GDK_WINDOW_DESTROYED (window) ||
3970 !WINDOW_IS_TOPLEVEL (window))
3970 !WINDOW_IS_TOPLEVEL_OR_FOREIGN (window))
39713971 return;
39723972
39733973 if (GDK_WINDOW_IS_MAPPED (window))
40024002gdk_window_stick (GdkWindow *window)
40034003{
40044004 if (GDK_WINDOW_DESTROYED (window) ||
4005 !WINDOW_IS_TOPLEVEL (window))
4005 !WINDOW_IS_TOPLEVEL_OR_FOREIGN (window))
40064006 return;
40074007
40084008 if (GDK_WINDOW_IS_MAPPED (window))
40584058gdk_window_unstick (GdkWindow *window)
40594059{
40604060 if (GDK_WINDOW_DESTROYED (window) ||
4061 !WINDOW_IS_TOPLEVEL (window))
4061 !WINDOW_IS_TOPLEVEL_OR_FOREIGN (window))
40624062 return;
40634063
40644064 if (GDK_WINDOW_IS_MAPPED (window))
41014101gdk_window_maximize (GdkWindow *window)
41024102{
41034103 if (GDK_WINDOW_DESTROYED (window) ||
4104 !WINDOW_IS_TOPLEVEL (window))
4104 !WINDOW_IS_TOPLEVEL_OR_FOREIGN (window))
41054105 return;
41064106
41074107 if (GDK_WINDOW_IS_MAPPED (window))
41354135gdk_window_unmaximize (GdkWindow *window)
41364136{
41374137 if (GDK_WINDOW_DESTROYED (window) ||
4138 !WINDOW_IS_TOPLEVEL (window))
4138 !WINDOW_IS_TOPLEVEL_OR_FOREIGN (window))
41394139 return;
41404140
41414141 if (GDK_WINDOW_IS_MAPPED (window))
41724172gdk_window_fullscreen (GdkWindow *window)
41734173{
41744174 if (GDK_WINDOW_DESTROYED (window) ||
4175 !WINDOW_IS_TOPLEVEL (window))
4175 !WINDOW_IS_TOPLEVEL_OR_FOREIGN (window))
41764176 return;
41774177
41784178 if (GDK_WINDOW_IS_MAPPED (window))
42074207gdk_window_unfullscreen (GdkWindow *window)
42084208{
42094209 if (GDK_WINDOW_DESTROYED (window) ||
4210 !WINDOW_IS_TOPLEVEL (window))
4210 !WINDOW_IS_TOPLEVEL_OR_FOREIGN (window))
42114211 return;
42124212
42134213 if (GDK_WINDOW_IS_MAPPED (window))
42454245 g_return_if_fail (GDK_IS_WINDOW (window));
42464246
42474247 if (GDK_WINDOW_DESTROYED (window) ||
4248 !WINDOW_IS_TOPLEVEL (window))
4248 !WINDOW_IS_TOPLEVEL_OR_FOREIGN (window))
42494249 return;
42504250
42514251 if (GDK_WINDOW_IS_MAPPED (window))
42874287 g_return_if_fail (GDK_IS_WINDOW (window));
42884288
42894289 if (GDK_WINDOW_DESTROYED (window) ||
4290 !WINDOW_IS_TOPLEVEL (window))
4290 !WINDOW_IS_TOPLEVEL_OR_FOREIGN (window))
42914291 return;
42924292
42934293 if (GDK_WINDOW_IS_MAPPED (window))
43214321{
43224322 GdkToplevelX11 *toplevel;
43234323
4324 g_return_val_if_fail (GDK_WINDOW_TYPE (window) != GDK_WINDOW_CHILD, NULL);
4325
43264324 if (GDK_WINDOW_DESTROYED (window) ||
43274325 !WINDOW_IS_TOPLEVEL (window))
43284326 return NULL;
43474347 * if your application pretends to be multiple applications.
43484348 **/
43494349void
4350gdk_window_set_group (GdkWindow *window,
4350gdk_window_set_group (GdkWindow *window,
43514351 GdkWindow *leader)
43524352{
43534353 GdkToplevelX11 *toplevel;
43634363
43644364 toplevel = _gdk_x11_window_get_toplevel (window);
43654365
4366 if (leader == NULL)
4366 if (leader == NULL)
43674367 leader = gdk_display_get_default_group (gdk_drawable_get_display (window));
43684368
43694369 if (toplevel->group_leader != leader)
44854485 MotifWmHints hints;
44864486
44874487 if (GDK_WINDOW_DESTROYED (window) ||
4488 !WINDOW_IS_TOPLEVEL (window))
4488 !WINDOW_IS_TOPLEVEL_OR_FOREIGN (window))
44894489 return;
44904490
44914491 /* initialize to zero to avoid writing uninitialized data to socket */
45124512 gboolean result = FALSE;
45134513
45144514 if (GDK_WINDOW_DESTROYED (window) ||
4515 !WINDOW_IS_TOPLEVEL (window))
4515 !WINDOW_IS_TOPLEVEL_OR_FOREIGN (window))
45164516 return FALSE;
45174517
45184518 hints = gdk_window_get_mwm_hints (window);
45614561 g_return_if_fail (GDK_IS_WINDOW (window));
45624562
45634563 if (GDK_WINDOW_DESTROYED (window) ||
4564 !WINDOW_IS_TOPLEVEL (window))
4564 !WINDOW_IS_TOPLEVEL_OR_FOREIGN (window))
45654565 return;
45664566
45674567 /* initialize to zero to avoid writing uninitialized data to socket */
53035303 guint32 timestamp)
53045304{
53055305 if (GDK_WINDOW_DESTROYED (window) ||
5306 !WINDOW_IS_TOPLEVEL (window))
5306 !WINDOW_IS_TOPLEVEL_OR_FOREIGN (window))
53075307 return;
53085308
53095309 if (gdk_x11_screen_supports_net_wm_hint (GDK_WINDOW_SCREEN (window),
54805480 guint32 cardinal;
54815481
54825482 g_return_if_fail (GDK_IS_WINDOW (window));
5483 g_return_if_fail (WINDOW_IS_TOPLEVEL (window));
54845483
54855484 if (GDK_WINDOW_DESTROYED (window) ||
54865485 !WINDOW_IS_TOPLEVEL (window))

Comments

Add a new comment:

Login or create an account to post a comment

Add your comment