44
44
#include "display.h"
45
45
#include "screen.h"
47
47
#include "mywindow.h"
48
48
#include "compositor.h"
51
myScreenCheckWMAtom (ScreenInfo *screen_info, Atom atom)
56
TRACE ("entering myScreenCheckWMAtom");
57
g_snprintf (selection, sizeof (selection), "WM_S%d", screen_info->screen);
58
wm_sn_atom = XInternAtom (myScreenGetXDisplay (screen_info), selection, FALSE);
60
return (atom == wm_sn_atom);
64
myScreenSetWMAtom (ScreenInfo *screen_info, gboolean replace_wm)
68
DisplayInfo *display_info;
69
XSetWindowAttributes attrs;
74
g_return_val_if_fail (screen_info, FALSE);
75
g_return_val_if_fail (screen_info->display_info, FALSE);
77
TRACE ("entering myScreenReplaceWM");
79
display_info = screen_info->display_info;
80
g_snprintf (selection, sizeof (selection), "WM_S%d", screen_info->screen);
81
wm_sn_atom = XInternAtom (display_info->dpy, selection, FALSE);
83
current_wm = XGetSelectionOwner (display_info->dpy, wm_sn_atom);
88
g_message (_("To replace the window manager, try with \"--replace\"\n"));
91
gdk_error_trap_push ();
92
attrs.event_mask = StructureNotifyMask;
93
XChangeWindowAttributes (display_info->dpy, current_wm, CWEventMask, &attrs);
94
if (gdk_error_trap_pop ())
100
if (!setXAtomManagerOwner (display_info, wm_sn_atom, screen_info->xroot, screen_info->xfwm4_win))
102
g_warning (_("Cannot acquire window manager selection on screen %d\n"), screen_info->screen);
106
/* Waiting for previous window manager to exit */
110
timeout = 10 * G_USEC_PER_SEC;
111
while (wait < timeout)
113
if (XCheckWindowEvent (display_info->dpy, current_wm, StructureNotifyMask, &event) && (event.type == DestroyNotify))
117
g_usleep(G_USEC_PER_SEC / 10);
118
wait += G_USEC_PER_SEC / 10;
123
g_warning(_("Previous window manager on screen %d is not exiting"), screen_info->screen);
51
myScreenInit (DisplayInfo *display_info, GdkScreen *gscr, unsigned long event_mask)
131
myScreenInit (DisplayInfo *display_info, GdkScreen *gscr, unsigned long event_mask, gboolean replace_wm)
54
133
ScreenInfo *screen_info;
55
134
GdkWindow *event_win;
56
135
PangoLayout *layout;
58
136
long desktop_visible;
88
166
pango_layout_get_pixel_extents (layout, NULL, NULL);
89
167
g_object_unref (G_OBJECT (layout));
91
event_win = eventFilterAddWin (gscr, event_mask);
94
gtk_widget_destroy (screen_info->gtk_win);
98
gdk_window_set_user_data (event_win, screen_info->gtk_win);
100
169
screen_info->xscreen = gdk_x11_screen_get_xscreen (gscr);
101
170
screen_info->xroot = (Window) GDK_DRAWABLE_XID(gdk_screen_get_root_window (gscr));
102
171
screen_info->screen = gdk_screen_get_number (gscr);
105
174
screen_info->width = WidthOfScreen (screen_info->xscreen);
106
175
screen_info->height = HeightOfScreen (screen_info->xscreen);
107
176
screen_info->visual = DefaultVisual (display_info->dpy, screen_info->screen);
178
screen_info->xfwm4_win = GDK_WINDOW_XWINDOW (screen_info->gtk_win->window);
179
if (!myScreenSetWMAtom (screen_info, replace_wm))
181
gtk_widget_destroy (screen_info->gtk_win);
182
g_free (screen_info);
186
event_win = eventFilterAddWin (gscr, event_mask);
189
gtk_widget_destroy (screen_info->gtk_win);
190
g_free (screen_info);
193
gdk_window_set_user_data (event_win, screen_info->gtk_win);
108
195
screen_info->current_ws = 0;
109
196
screen_info->previous_ws = 0;
110
197
screen_info->current_ws = 0;
181
screen_info->xfwm4_win = GDK_WINDOW_XWINDOW (screen_info->gtk_win->window);
183
268
#ifdef ENABLE_KDE_SYSTRAY_PROXY
184
269
g_snprintf (selection, sizeof (selection), "_NET_SYSTEM_TRAY_S%d", screen_info->screen);
185
270
screen_info->net_system_tray_selection = XInternAtom (display_info->dpy, selection, FALSE);
186
271
screen_info->systray = getSystrayWindow (display_info, screen_info->net_system_tray_selection);
189
g_snprintf (selection, sizeof (selection), "WM_S%d", screen_info->screen);
190
wm_sn_atom = XInternAtom (display_info->dpy, selection, FALSE);
191
XSetSelectionOwner (display_info->dpy, wm_sn_atom, screen_info->xfwm4_win, CurrentTime);
193
274
screen_info->box_gc = None;
194
275
screen_info->black_gc = NULL;
195
276
screen_info->white_gc = NULL;
331
myScreenCheckWMAtom (ScreenInfo *screen_info, Atom atom)
336
g_snprintf (selection, sizeof (selection), "WM_S%d", screen_info->screen);
337
wm_sn_atom = XInternAtom (myScreenGetXDisplay (screen_info), selection, FALSE);
339
return (atom == wm_sn_atom);
343
myScreenGrabPointer (ScreenInfo *screen_info, unsigned int event_mask, Cursor cursor, Time time)
412
myScreenGrabPointer (ScreenInfo *screen_info, unsigned int event_mask, Cursor cursor, guint32 time)