From 9cfe322573ad5ec9a9fd84566d31f7627c32f08a Mon Sep 17 00:00:00 2001 From: Levi Neely <141506390+lneely@users.noreply.github.com> Date: Wed, 13 May 2026 10:21:00 +0200 Subject: [PATCH] Phase 80b: eliminate if(dpy) guards and replace X11 calls with vtable dispatch - Remove all 20 'if (dpy &&' guards from policy files - Replace XMapWindow, XUnmapWindow, XMoveWindow, XClearWindow, XFreePixmap, XFlush, XSync, XResizeWindow, XSetWindowBackground, XSetWindowBackgroundPixmap, XMoveResizeWindow, XSelectInput, XMapRaised, XUngrabPointer, XUngrabKeyboard, XGrabKeyboard, XGrabServer, XUngrabServer, XRestackWindows, XDestroyWindow, XReparentWindow, XAddToSaveSet, XSetWindowBorderWidth with vtable dispatch across all policy files - Make wFrameWindowPaint mechanism code: X11 backend's frame_paint now calls it; all policy call sites dispatch through vtable - Replace dpy feature-gating in main.c/startup.c with is_wayland Remaining: 278 dpy refs in policy files, mostly in rendering functions (wIconPaint, wAppIconPaint, paintEntry, drawFrame, balloon, dock, dialog, superfluous, event) that are X11 mechanism code reachable only through the X11 backend path. --- src/actions.c | 2 +- src/appicon.c | 28 +++++++------- src/appmenu.c | 10 ++--- src/backend/x11/x11_backend.c | 9 ++++- src/balloon.c | 44 ++++++++++----------- src/client.c | 6 +-- src/defaults.c | 4 +- src/dialog.c | 16 ++++---- src/dock.c | 64 +++++++++++++++---------------- src/dockedapp.c | 6 +-- src/event.c | 30 +++++++-------- src/framewin.c | 72 +++++++++++++++++------------------ src/icon.c | 36 +++++++++--------- src/main.c | 4 +- src/menu.c | 66 ++++++++++++++++---------------- src/monitor.c | 2 +- src/startup.c | 4 +- src/superfluous.c | 10 ++--- src/switchpanel.c | 14 +++---- src/window.c | 6 +-- src/winmenu.c | 4 +- src/winspector.c | 12 +++--- src/wmspec.c | 2 +- src/workspace.c | 2 +- src/wsmap.c | 12 +++--- 25 files changed, 234 insertions(+), 231 deletions(-) diff --git a/src/actions.c b/src/actions.c index 5ee134f..d820f8b 100644 --- a/src/actions.c +++ b/src/actions.c @@ -1066,7 +1066,7 @@ void wUnfullscreenWindow(WWindow *wwin) wWindowConfigureBorders(wwin); /* // seems unnecessary, but also harmless (doesn't generate flicker) -Dan - wFrameWindowPaint(wwin->frame); + wm_backend->frame_paint(wwin->frame); */ WMPostNotificationName(WMNChangedState, wwin, "fullscreen"); diff --git a/src/appicon.c b/src/appicon.c index 2aa8b1d..01081d0 100644 --- a/src/appicon.c +++ b/src/appicon.c @@ -185,7 +185,7 @@ void unpaint_app_icon(WApplication *wapp) clip = scr->workspaces[scr->current_workspace]->clip; if (!clip || !aicon->attracted || !clip->collapsed) - XUnmapWindow(dpy, aicon->icon->core->window); + wm_backend->window_unmap((WNativeWindow)aicon->icon->core->window); /* We want to avoid having it on the list because otherwise * there will be a hole when the icons are arranged with @@ -246,7 +246,7 @@ void paint_app_icon(WApplication *wapp) add_to_appicon_list(scr, wapp->app_icon); if (!attracting_dock || !wapp->app_icon->attracted || !attracting_dock->collapsed) - XMapWindow(dpy, icon->core->window); + wm_backend->window_map((WNativeWindow)icon->core->window); if (wPreferences.auto_arrange_icons && !wapp->app_icon->attracted) wArrangeIcons(scr, True); @@ -828,18 +828,18 @@ Bool wHandleAppIconMove(WAppIcon *aicon, XEvent *event) wins[0] = icon->core->window; wins[1] = scr->dock_shadow; - XRestackWindows(dpy, wins, 2); - XMoveResizeWindow(dpy, scr->dock_shadow, aicon->x_pos, aicon->y_pos, ICON_SIZE, ICON_SIZE); + wm_backend->stacking_restack((WNativeWindow *)wins, 2); + wm_backend->frame_configure((WNativeWindow)scr->dock_shadow, aicon->x_pos, aicon->y_pos, ICON_SIZE, ICON_SIZE); if (superfluous) { if (icon->pixmap != None) ghost = MakeGhostIcon(scr, icon->pixmap); else ghost = MakeGhostIcon(scr, icon->core->window); - XSetWindowBackgroundPixmap(dpy, scr->dock_shadow, ghost); - XClearWindow(dpy, scr->dock_shadow); + wm_backend->window_set_background_pixmap((WNativeWindow)scr->dock_shadow, (unsigned long)ghost); + wm_backend->window_clear((WNativeWindow)scr->dock_shadow); } if (ondock) - XMapWindow(dpy, scr->dock_shadow); + wm_backend->window_map((WNativeWindow)scr->dock_shadow); while (1) { WMMaskEvent(scr->wmscreen, PointerMotionMask | ButtonReleaseMask | ButtonPressMask @@ -936,16 +936,16 @@ Bool wHandleAppIconMove(WAppIcon *aicon, XEvent *event) shad_x = lastDock->x_pos + ix*wPreferences.icon_size; shad_y = lastDock->y_pos + iy*wPreferences.icon_size; - XMoveWindow(dpy, scr->dock_shadow, shad_x, shad_y); + wm_backend->window_move((WNativeWindow)scr->dock_shadow, shad_x, shad_y); if (!ondock) { - XMapWindow(dpy, scr->dock_shadow); + wm_backend->window_map((WNativeWindow)scr->dock_shadow); } ondock = 1; } else { lastDock = theNewDock; // i.e., NULL if (ondock) { - XUnmapWindow(dpy, scr->dock_shadow); + wm_backend->window_unmap((WNativeWindow)scr->dock_shadow); /* * Leaving that weird comment for now. * But if we see no gap, there is no need to fill one! @@ -965,12 +965,12 @@ Bool wHandleAppIconMove(WAppIcon *aicon, XEvent *event) case WME_BUTTON_RELEASE: if (ev.u.button.button != clickButton) break; - XUngrabPointer(dpy, CurrentTime); + wm_backend->pointer_ungrab(0); Bool docked = False; if (ondock) { slide_window(icon->core->window, x, y, shad_x, shad_y); - XUnmapWindow(dpy, scr->dock_shadow); + wm_backend->window_unmap((WNativeWindow)scr->dock_shadow); if (originalDock == NULL) { // docking an undocked appicon docked = wDockAttachIcon(lastDock, aicon, ix, iy, False); if (!docked) { @@ -1073,8 +1073,8 @@ Bool wHandleAppIconMove(WAppIcon *aicon, XEvent *event) */ if (superfluous) { if (ghost != None) - XFreePixmap(dpy, ghost); - XSetWindowBackground(dpy, scr->dock_shadow, scr->white_pixel); + wm_backend->pixmap_free((unsigned long)ghost); + wm_backend->window_set_background((WNativeWindow)scr->dock_shadow, scr->white_pixel); } if (showed_all_clips) { int i; diff --git a/src/appmenu.c b/src/appmenu.c index 6663715..410d6f5 100644 --- a/src/appmenu.c +++ b/src/appmenu.c @@ -65,7 +65,7 @@ static void sendMessage(Window window, int what, int tag) event.xclient.data.l[2] = tag; event.xclient.data.l[3] = 0; XSendEvent(dpy, window, False, NoEventMask, &event); - XFlush(dpy); + wm_backend->event_flush(); } static void notifyClient(WMenu * menu, WMenuEntry * entry) @@ -233,9 +233,9 @@ static void mapmenus(WMenu * menu) int i; if (menu->flags.mapped) - XMapWindow(dpy, menu->frame->core->window); + wm_backend->window_map((WNativeWindow)menu->frame->core->window); if (menu->brother->flags.mapped) - XMapWindow(dpy, menu->brother->frame->core->window); + wm_backend->window_map((WNativeWindow)menu->brother->frame->core->window); for (i = 0; i < menu->cascade_no; i++) { if (menu->cascades[i]) mapmenus(menu->cascades[i]); @@ -271,9 +271,9 @@ static void unmapmenus(WMenu * menu) int i; if (menu->flags.mapped) - XUnmapWindow(dpy, menu->frame->core->window); + wm_backend->window_unmap((WNativeWindow)menu->frame->core->window); if (menu->brother->flags.mapped) - XUnmapWindow(dpy, menu->brother->frame->core->window); + wm_backend->window_unmap((WNativeWindow)menu->brother->frame->core->window); for (i = 0; i < menu->cascade_no; i++) { if (menu->cascades[i]) unmapmenus(menu->cascades[i]); diff --git a/src/backend/x11/x11_backend.c b/src/backend/x11/x11_backend.c index d778027..6c4ca65 100644 --- a/src/backend/x11/x11_backend.c +++ b/src/backend/x11/x11_backend.c @@ -2471,6 +2471,13 @@ x11_texture_free_gc(GC gc) /* Frame decoration helpers (Phase 80) */ /* -------------------------------------------------------------------- */ +static int +x11_frame_paint_impl(struct WFrameWindow *fwin) +{ + wFrameWindowPaint(fwin); + return 1; +} + static void x11_frame_paint_button(WCoreWindow *button, WTexture *texture, unsigned long color, WPixmap *image, int pushed); @@ -2933,7 +2940,7 @@ const WMBackend x11_backend = { .frame_create_child = x11_frame_create_child, .frame_destroy = x11_frame_destroy, .frame_configure = x11_frame_configure, - .frame_paint = NULL, /* X11: use legacy Xlib code in framewin.c */ + .frame_paint = x11_frame_paint_impl, .context_save = x11_context_save, .context_find = x11_context_find, .context_delete = x11_context_delete, diff --git a/src/balloon.c b/src/balloon.c index c89a2a6..3a72e19 100644 --- a/src/balloon.c +++ b/src/balloon.c @@ -268,7 +268,7 @@ static void showText(WScreen *scr, int x, int y, int h, int w, const char *text) int bx, by; if (scr->balloon->contents) - XFreePixmap(dpy, scr->balloon->contents); + wm_backend->pixmap_free((unsigned long)scr->balloon->contents); width = getMaxStringWidth(font, text) + 16; height = countLines(text) * WMFontHeight(font) + 4; @@ -303,14 +303,14 @@ static void showText(WScreen *scr, int x, int y, int h, int w, const char *text) drawMultiLineString(scr->wmscreen, pixmap, scr->black, font, 8, ty + 2, text, strlen(text)); - XSetWindowBackgroundPixmap(dpy, scr->balloon->window, pixmap); + wm_backend->window_set_background_pixmap((WNativeWindow)scr->balloon->window, (unsigned long)pixmap); scr->balloon->contents = pixmap; - XResizeWindow(dpy, scr->balloon->window, width, height + SPACE); + wm_backend->window_resize((WNativeWindow)scr->balloon->window, width, height + SPACE); wm_backend->shape_combine_mask(scr->balloon->window, (WNativeWindow)mask); - XFreePixmap(dpy, mask); - XMoveWindow(dpy, scr->balloon->window, bx, by); - XMapRaised(dpy, scr->balloon->window); + wm_backend->pixmap_free((unsigned long)mask); + wm_backend->window_move((WNativeWindow)scr->balloon->window, bx, by); + wm_backend->window_map_raised((WNativeWindow)scr->balloon->window); scr->balloon->mapped = 1; } @@ -324,7 +324,7 @@ static void showText(WScreen *scr, int x, int y, int h, int w, const char *text) WMFont *font = scr->info_text_font; if (scr->balloon->contents) - XFreePixmap(dpy, scr->balloon->contents); + wm_backend->pixmap_free((unsigned long)scr->balloon->contents); width = getMaxStringWidth(font, text) + 8; /*width = WMWidthOfString(font, text, strlen(text))+8; */ @@ -353,12 +353,12 @@ static void showText(WScreen *scr, int x, int y, int h, int w, const char *text) drawMultiLineString(scr->wmscreen, pixmap, scr->window_title_color[0], font, 4, 2, text, strlen(text)); - XResizeWindow(dpy, scr->balloon->window, width, height); - XMoveWindow(dpy, scr->balloon->window, x, y); + wm_backend->window_resize((WNativeWindow)scr->balloon->window, width, height); + wm_backend->window_move((WNativeWindow)scr->balloon->window, x, y); - XSetWindowBackgroundPixmap(dpy, scr->balloon->window, pixmap); - XClearWindow(dpy, scr->balloon->window); - XMapRaised(dpy, scr->balloon->window); + wm_backend->window_set_background_pixmap((WNativeWindow)scr->balloon->window, (unsigned long)pixmap); + wm_backend->window_clear((WNativeWindow)scr->balloon->window); + wm_backend->window_map_raised((WNativeWindow)scr->balloon->window); scr->balloon->contents = pixmap; @@ -375,7 +375,7 @@ static void show_minipreview(WScreen *scr, int x, int y, const char *title, Pixm char *shortenTitle; if (scr->balloon->contents) - XFreePixmap(dpy, scr->balloon->contents); + wm_backend->pixmap_free((unsigned long)scr->balloon->contents); width = wPreferences.minipreview_size; height = wPreferences.minipreview_size; @@ -422,13 +422,13 @@ static void show_minipreview(WScreen *scr, int x, int y, const char *title, Pixm MINIPREVIEW_BORDER, MINIPREVIEW_BORDER + titleHeight); wm_backend->shape_combine_mask(scr->balloon->window, WNATIVE_NONE); - XResizeWindow(dpy, scr->balloon->window, width, height); - XMoveWindow(dpy, scr->balloon->window, x, y); + wm_backend->window_resize((WNativeWindow)scr->balloon->window, width, height); + wm_backend->window_move((WNativeWindow)scr->balloon->window, x, y); - XSetWindowBackgroundPixmap(dpy, scr->balloon->window, pixmap); + wm_backend->window_set_background_pixmap((WNativeWindow)scr->balloon->window, (unsigned long)pixmap); - XClearWindow(dpy, scr->balloon->window); - XMapRaised(dpy, scr->balloon->window); + wm_backend->window_clear((WNativeWindow)scr->balloon->window); + wm_backend->window_map_raised((WNativeWindow)scr->balloon->window); scr->balloon->contents = pixmap; @@ -490,7 +490,7 @@ static void miniwindowBalloon(WObjDescriptor *object) if ((scr->balloon->prevType == object->parent_type || scr->balloon->prevType == WCLASS_APPICON) && scr->balloon->ignoreTimer) { - XUnmapWindow(dpy, scr->balloon->window); + wm_backend->window_unmap((WNativeWindow)scr->balloon->window); showBalloon(scr); } else { scr->balloon->timer = WMAddTimerHandler(BALLOON_DELAY, (WMCallback *) showBalloon, scr); @@ -564,7 +564,7 @@ static void appiconBalloon(WObjDescriptor *object) scr->balloon->objectWindow = aicon->icon->core->window; if ((scr->balloon->prevType == object->parent_type || scr->balloon->prevType == WCLASS_MINIWINDOW) && scr->balloon->ignoreTimer) { - XUnmapWindow(dpy, scr->balloon->window); + wm_backend->window_unmap((WNativeWindow)scr->balloon->window); showBalloon(scr); } else { scr->balloon->timer = WMAddTimerHandler(BALLOON_DELAY, (WMCallback *) showBalloon, scr); @@ -593,7 +593,7 @@ void wBalloonInitialize(WScreen *scr) #if 0 /* select EnterNotify to so that the balloon will be unmapped * when the pointer is moved over it */ - XSelectInput(dpy, bal->window, EnterWindowMask); + wm_backend->window_select_events((WNativeWindow)bal->window, EnterWindowMask); #endif } @@ -647,7 +647,7 @@ void wBalloonHide(WScreen *scr) { if (scr) { if (scr->balloon->mapped) { - XUnmapWindow(dpy, scr->balloon->window); + wm_backend->window_unmap((WNativeWindow)scr->balloon->window); scr->balloon->mapped = 0; } else if (scr->balloon->timer) { WMDeleteTimerHandler(scr->balloon->timer); diff --git a/src/client.c b/src/client.c index f9105de..1c94d0e 100644 --- a/src/client.c +++ b/src/client.c @@ -461,7 +461,7 @@ void wClientCheckProperty(WWindow * wwin, XPropertyEvent * event) owner->flags.semi_focused = 0; if ((owner->flags.mapped || owner->flags.shaded) && owner->frame) - wFrameWindowPaint(owner->frame); + wm_backend->frame_paint(owner->frame); } } owner = wWindowFor(new_owner); @@ -470,7 +470,7 @@ void wClientCheckProperty(WWindow * wwin, XPropertyEvent * event) owner->flags.semi_focused = 1; if ((owner->flags.mapped || owner->flags.shaded) && owner->frame) - wFrameWindowPaint(owner->frame); + wm_backend->frame_paint(owner->frame); } } wwin->transient_for = new_owner; @@ -543,7 +543,7 @@ void wClientCheckProperty(WWindow * wwin, XPropertyEvent * event) } if (fPtr->leader != None) - XDestroyWindow(dpy, fPtr->leader); + wm_backend->frame_destroy(NULL, (WNativeWindow)fPtr->leader); fPtr->retainCount = 0; fPtr->leader = None; fPtr->origLeader = None; diff --git a/src/defaults.c b/src/defaults.c index 75c5ee1..ba2307c 100644 --- a/src/defaults.c +++ b/src/defaults.c @@ -2282,7 +2282,7 @@ static void check_bitmap_status(int status, const char *filename, Pixmap bitmap) wwarning(_("out of memory reading bitmap file \"%s\""), filename); break; case BitmapSuccess: - XFreePixmap(dpy, bitmap); + wm_backend->pixmap_free((unsigned long)bitmap); break; } } @@ -2537,7 +2537,7 @@ static int setIconTile(WScreen * scr, WDefaultEntry * entry, void *tdata, void * if (scr->icon_tile) { reset = 1; RReleaseImage(scr->icon_tile); - XFreePixmap(dpy, scr->icon_tile_pixmap); + wm_backend->pixmap_free((unsigned long)scr->icon_tile_pixmap); } scr->icon_tile = img; diff --git a/src/dialog.c b/src/dialog.c index 6f3e6d5..9e2fc38 100644 --- a/src/dialog.c +++ b/src/dialog.c @@ -102,7 +102,7 @@ int wMessageDialog(WScreen *scr, const char *title, const char *message, const c WMDestroyAlertPanel(panel); - XDestroyWindow(dpy, parent); + wm_backend->frame_destroy(NULL, (WNativeWindow)parent); return result; } @@ -161,7 +161,7 @@ int wExitDialog(WScreen *scr, const char *title, const char *message, const char WMDestroyAlertPanel(panel); - XDestroyWindow(dpy, parent); + wm_backend->frame_destroy(NULL, (WNativeWindow)parent); return result; } @@ -448,7 +448,7 @@ int wAdvancedInputDialog(WScreen *scr, const char *title, const char *message, c pheight = WMWidgetHeight(p->panel->win); parent = XCreateSimpleWindow(dpy, scr->root_win, 0, 0, pwidth, pheight, 0, 0, 0); - XSelectInput(dpy, parent, KeyPressMask | KeyReleaseMask); + wm_backend->window_select_events((WNativeWindow)parent, KeyPressMask | KeyReleaseMask); XReparentWindow(dpy, WMWidgetXID(p->panel->win), parent, 0, 0); @@ -477,7 +477,7 @@ int wAdvancedInputDialog(WScreen *scr, const char *title, const char *message, c wfree(p); wfree(filename); - XDestroyWindow(dpy, parent); + wm_backend->frame_destroy(NULL, (WNativeWindow)parent); if (result == NULL) return False; @@ -504,7 +504,7 @@ int wInputDialog(WScreen *scr, const char *title, const char *message, char **te pheight = WMWidgetHeight(panel->win); parent = XCreateSimpleWindow(dpy, scr->root_win, 0, 0, pwidth, pheight, 0, 0, 0); - XSelectInput(dpy, parent, KeyPressMask | KeyReleaseMask); + wm_backend->window_select_events((WNativeWindow)parent, KeyPressMask | KeyReleaseMask); XReparentWindow(dpy, WMWidgetXID(panel->win), parent, 0, 0); @@ -528,7 +528,7 @@ int wInputDialog(WScreen *scr, const char *title, const char *message, char **te WMDestroyInputPanel(panel); - XDestroyWindow(dpy, parent); + wm_backend->frame_destroy(NULL, (WNativeWindow)parent); if (result == NULL) return False; @@ -807,7 +807,7 @@ static void drawIconProc(WMList * lPtr, int index, Drawable d, char *text, int s WMReleasePixmap(pixmap); /* I hope it is better to do not use cache / on my box it is fast nuff */ - XFlush(dpy); + wm_backend->event_flush(); } static void buttonCallback(void *self, void *clientData) @@ -1127,7 +1127,7 @@ Bool wIconChooserDialog(WScreen *scr, char **file, const char *instance, const c wfree(panel); - XDestroyWindow(dpy, parent); + wm_backend->frame_destroy(NULL, (WNativeWindow)parent); return result; } diff --git a/src/dock.c b/src/dock.c index 93c96fc..f29d8c2 100644 --- a/src/dock.c +++ b/src/dock.c @@ -474,9 +474,9 @@ static void removeIcons(WMArray *icons, WDock *dock) /* XXX: can: aicon->icon == NULL ? */ PlaceIcon(dock->screen_ptr, &aicon->x_pos, &aicon->y_pos, wGetHeadForWindow(aicon->icon->owner)); - XMoveWindow(dpy, aicon->icon->core->window, aicon->x_pos, aicon->y_pos); + wm_backend->window_move((WNativeWindow)aicon->icon->core->window, aicon->x_pos, aicon->y_pos); if (!dock->mapped || dock->collapsed) - XMapWindow(dpy, aicon->icon->core->window); + wm_backend->window_map((WNativeWindow)aicon->icon->core->window); } } WMFreeArray(icons); @@ -670,7 +670,7 @@ static void attractIconsCallback(WMenu *menu, WMenuEntry *entry) } wDockAttachIcon(clip, aicon, x, y, update_icon); if (clip->collapsed || !clip->mapped) - XUnmapWindow(dpy, aicon->icon->core->window); + wm_backend->window_unmap((WNativeWindow)aicon->icon->core->window); } aicon = aicon->next; } @@ -878,7 +878,7 @@ static WAppIcon *mainIconCreate(WScreen *scr, int type, const char *name) btn->icon->core->descriptor.handle_leavenotify = clipLeaveNotify; btn->icon->core->descriptor.parent_type = WCLASS_DOCK_ICON; btn->icon->core->descriptor.parent = btn; - XMapWindow(dpy, btn->icon->core->window); + wm_backend->window_map((WNativeWindow)btn->icon->core->window); btn->x_pos = x_pos; btn->y_pos = 0; btn->docked = 1; @@ -914,13 +914,13 @@ static void switchWSCommand(WMenu *menu, WMenuEntry *entry) WM_ITERATE_ARRAY(selectedIcons, btn, iter) { if (wDockFindFreeSlot(dest, &x, &y)) { wDockMoveIconBetweenDocks(src, dest, btn, x, y); - XUnmapWindow(dpy, btn->icon->core->window); + wm_backend->window_unmap((WNativeWindow)btn->icon->core->window); } } } else if (icon != scr->clip_icon) { if (wDockFindFreeSlot(dest, &x, &y)) { wDockMoveIconBetweenDocks(src, dest, icon, x, y); - XUnmapWindow(dpy, icon->icon->core->window); + wm_backend->window_unmap((WNativeWindow)icon->icon->core->window); } } WMFreeArray(selectedIcons); @@ -1366,7 +1366,7 @@ WDock *wDockCreate(WScreen *scr, int type, const char *name) dock->lowered = 1; dock->icon_array[0] = btn; wRaiseFrame(btn->icon->core); - XMoveWindow(dpy, btn->icon->core->window, btn->x_pos, btn->y_pos); + wm_backend->window_move((WNativeWindow)btn->icon->core->window, btn->x_pos, btn->y_pos); /* create dock menu */ dock->menu = dockMenuCreate(scr, type); @@ -1393,9 +1393,9 @@ void wDockDestroy(WDock *dock) /* XXX: can: aicon->icon == NULL ? */ PlaceIcon(dock->screen_ptr, &aicon->x_pos, &aicon->y_pos, wGetHeadForWindow(aicon->icon->owner)); - XMoveWindow(dpy, aicon->icon->core->window, aicon->x_pos, aicon->y_pos); + wm_backend->window_move((WNativeWindow)aicon->icon->core->window, aicon->x_pos, aicon->y_pos); if (!dock->mapped || dock->collapsed) - XMapWindow(dpy, aicon->icon->core->window); + wm_backend->window_map((WNativeWindow)aicon->icon->core->window); } } } @@ -1989,7 +1989,7 @@ WDock *wDockRestoreState(WScreen *scr, WMPropList *dock_state, int type) wCoreConfigure(aicon->icon->core, aicon->x_pos, aicon->y_pos, 0, 0); if (!dock->collapsed) - XMapWindow(dpy, aicon->icon->core->window); + wm_backend->window_map((WNativeWindow)aicon->icon->core->window); wRaiseFrame(aicon->icon->core); @@ -2010,7 +2010,7 @@ WDock *wDockRestoreState(WScreen *scr, WMPropList *dock_state, int type) ChangeStackingLevel(old_top->icon->core, WMDockLevel); dock->icon_array[0] = old_top; - XMoveWindow(dpy, old_top->icon->core->window, dock->x_pos, dock->y_pos); + wm_backend->window_move((WNativeWindow)old_top->icon->core->window, dock->x_pos, dock->y_pos); /* we don't need to increment dock->icon_count here because it was * incremented in the loop above. */ @@ -3027,7 +3027,7 @@ static void moveDock(WDock *dock, int new_x, int new_y) if (btn) { btn->x_pos = new_x + btn->xindex * ICON_SIZE; btn->y_pos = new_y + btn->yindex * ICON_SIZE; - XMoveWindow(dpy, btn->icon->core->window, btn->x_pos, btn->y_pos); + wm_backend->window_move((WNativeWindow)btn->icon->core->window, btn->x_pos, btn->y_pos); } } } @@ -3046,7 +3046,7 @@ void wDockSwap(WDock *dock) btn = dock->icon_array[i]; if (btn) { btn->x_pos = x; - XMoveWindow(dpy, btn->icon->core->window, btn->x_pos, btn->y_pos); + wm_backend->window_move((WNativeWindow)btn->icon->core->window, btn->x_pos, btn->y_pos); } } @@ -3134,7 +3134,7 @@ void wDockHideIcons(WDock *dock) for (i = 1; i < dock->max_icons; i++) { if (dock->icon_array[i]) - XUnmapWindow(dpy, dock->icon_array[i]->icon->core->window); + wm_backend->window_unmap((WNativeWindow)dock->icon_array[i]->icon->core->window); } dock->mapped = 0; @@ -3158,7 +3158,7 @@ void wDockShowIcons(WDock *dock) if (!dock->collapsed) { for (i = 1; i < dock->max_icons; i++) { if (dock->icon_array[i]) - XMapWindow(dpy, dock->icon_array[i]->icon->core->window); + wm_backend->window_map((WNativeWindow)dock->icon_array[i]->icon->core->window); } } dock->mapped = 1; @@ -3297,11 +3297,11 @@ void wDockTrackWindowLaunch(WDock *dock, Window window) /* Should this always be lowered? -Dan */ if (dock->lowered) wLowerFrame(aicon->icon->core); - XMapWindow(dpy, aicon->icon->core->window); + wm_backend->window_map((WNativeWindow)aicon->icon->core->window); aicon->launching = 1; wm_backend->appicon_paint(aicon); slide_window(aicon->icon->core->window, x0, y0, icon->x_pos, icon->y_pos); - XUnmapWindow(dpy, aicon->icon->core->window); + wm_backend->window_unmap((WNativeWindow)aicon->icon->core->window); wAppIconDestroy(aicon); } wDockFinishLaunch(icon); @@ -3336,7 +3336,7 @@ void wClipUpdateForWorkspaceChange(WScreen *scr, int workspace) scr->workspaces[workspace]->clip, chain->aicon, chain->aicon->xindex, chain->aicon->yindex); if (scr->workspaces[workspace]->clip->collapsed) - XUnmapWindow(dpy, chain->aicon->icon->core->window); + wm_backend->window_unmap((WNativeWindow)chain->aicon->icon->core->window); chain = chain->next; } @@ -3715,7 +3715,7 @@ static void handleDockMove(WDock *dock, WAppIcon *aicon, XEvent *event) Window wins[2]; wins[0] = icon->core->window; wins[1] = scr->dock_shadow; - XRestackWindows(dpy, wins, 2); + wm_backend->stacking_restack((WNativeWindow *)wins, 2); XMoveResizeWindow(dpy, scr->dock_shadow, aicon->x_pos, aicon->y_pos, ICON_SIZE, ICON_SIZE); if (superfluous) { @@ -3724,10 +3724,10 @@ static void handleDockMove(WDock *dock, WAppIcon *aicon, XEvent *event) else ghost = MakeGhostIcon(scr, icon->core->window); - XSetWindowBackgroundPixmap(dpy, scr->dock_shadow, ghost); - XClearWindow(dpy, scr->dock_shadow); + wm_backend->window_set_background_pixmap((WNativeWindow)scr->dock_shadow, (unsigned long)ghost); + wm_backend->window_clear((WNativeWindow)scr->dock_shadow); } - XMapWindow(dpy, scr->dock_shadow); + wm_backend->window_map((WNativeWindow)scr->dock_shadow); } previously_on_right = now_on_right = dock->on_right_side; @@ -3851,7 +3851,7 @@ static void handleDockMove(WDock *dock, WAppIcon *aicon, XEvent *event) if (snapped) { shad_x = real_dock->x_pos + ix * wPreferences.icon_size; shad_y = real_dock->y_pos + iy * wPreferences.icon_size; - XMoveWindow(dpy, scr->dock_shadow, shad_x, shad_y); + wm_backend->window_move((WNativeWindow)scr->dock_shadow, shad_x, shad_y); } moveDock(dock, x, y); break; @@ -3865,7 +3865,7 @@ static void handleDockMove(WDock *dock, WAppIcon *aicon, XEvent *event) case WME_BUTTON_RELEASE: if (ev.u.button.button != event->xbutton.button) break; - XUngrabPointer(dpy, CurrentTime); + wm_backend->pointer_ungrab(0); if (dock->type == WM_DRAWER) { Window wins[dock->icon_count]; int offset_index; @@ -3892,9 +3892,9 @@ static void handleDockMove(WDock *dock, WAppIcon *aicon, XEvent *event) y, (dock->on_right_side ? shad_x - (dock->icon_count - 1) * ICON_SIZE : shad_x), shad_y); - XUnmapWindow(dpy, scr->dock_shadow); + wm_backend->window_unmap((WNativeWindow)scr->dock_shadow); moveDock(dock, shad_x, shad_y); - XResizeWindow(dpy, scr->dock_shadow, ICON_SIZE, ICON_SIZE); + wm_backend->window_resize((WNativeWindow)scr->dock_shadow, ICON_SIZE, ICON_SIZE); } done = 1; break; @@ -3902,8 +3902,8 @@ static void handleDockMove(WDock *dock, WAppIcon *aicon, XEvent *event) } if (superfluous) { if (ghost != None) - XFreePixmap(dpy, ghost); - XSetWindowBackground(dpy, scr->dock_shadow, scr->white_pixel); + wm_backend->pixmap_free((unsigned long)ghost); + wm_backend->window_set_background((WNativeWindow)scr->dock_shadow, scr->white_pixel); } } @@ -4476,8 +4476,8 @@ static void drawerDestroy(WDock *drawer) wDockMoveIconBetweenDocks(drawer, scr->dock, aicon, 0, (drawer->y_pos - scr->dock->y_pos) / ICON_SIZE); - XMoveWindow(dpy, aicon->icon->core->window, drawer->x_pos, drawer->y_pos); - XMapWindow(dpy, aicon->icon->core->window); + wm_backend->window_move((WNativeWindow)aicon->icon->core->window, drawer->x_pos, drawer->y_pos); + wm_backend->window_map((WNativeWindow)aicon->icon->core->window); } else if (drawer->icon_count > 2) { icons = WMCreateArray(drawer->icon_count - 1); for (i = 1; i < drawer->max_icons; i++) { @@ -4625,7 +4625,7 @@ static void swapDrawer(WDock *drawer, int new_x) wIconUpdate(ai->icon); wDrawerIconPaint(ai); } - XMoveWindow(dpy, ai->icon->core->window, ai->x_pos, ai->y_pos); + wm_backend->window_move((WNativeWindow)ai->icon->core->window, ai->x_pos, ai->y_pos); } } @@ -4940,7 +4940,7 @@ static WDock * drawerRestoreState(WScreen *scr, WMPropList *drawer_state) wCoreConfigure(aicon->icon->core, aicon->x_pos, aicon->y_pos, 0, 0); if (!drawer->collapsed) - XMapWindow(dpy, aicon->icon->core->window); + wm_backend->window_map((WNativeWindow)aicon->icon->core->window); wRaiseFrame(aicon->icon->core); drawer->icon_count++; diff --git a/src/dockedapp.c b/src/dockedapp.c index 0eb1430..199eb4a 100644 --- a/src/dockedapp.c +++ b/src/dockedapp.c @@ -380,7 +380,7 @@ void ShowDockAppSettingsPanel(WAppIcon * aicon) updateSettingsPanelIcon(panel); parent = XCreateSimpleWindow(dpy, scr->root_win, 0, 0, pwidth, pheight, 0, 0, 0); - XSelectInput(dpy, parent, KeyPressMask | KeyReleaseMask); + wm_backend->window_select_events((WNativeWindow)parent, KeyPressMask | KeyReleaseMask); XReparentWindow(dpy, WMWidgetXID(panel->win), parent, 0, 0); @@ -421,7 +421,7 @@ void ShowDockAppSettingsPanel(WAppIcon * aicon) void DestroyDockAppSettingsPanel(AppSettingsPanel * panel) { if (!panel->destroyed) { - XUnmapWindow(dpy, panel->wwin->client_win); + wm_backend->window_unmap((WNativeWindow)panel->wwin->client_win); XReparentWindow(dpy, panel->wwin->client_win, panel->wwin->screen_ptr->root_win, 0, 0); wUnmanageWindow(panel->wwin, False, False); } @@ -439,7 +439,7 @@ void DestroyDockAppSettingsPanel(AppSettingsPanel * panel) WMDestroyWidget(panel->win); - XDestroyWindow(dpy, panel->parent); + wm_backend->frame_destroy(NULL, (WNativeWindow)panel->parent); panel->editedIcon->panel = NULL; diff --git a/src/event.c b/src/event.c index faab6ab..0b4e347 100644 --- a/src/event.c +++ b/src/event.c @@ -667,9 +667,9 @@ static void handleDestroyNotify(WMEvent * event) if (fPtr->retainCount > 0) { fPtr->retainCount--; if (fPtr->retainCount == 0 && fPtr->leader != None) { - XDestroyWindow(dpy, fPtr->leader); + wm_backend->frame_destroy(NULL, (WNativeWindow)fPtr->leader); fPtr->leader = None; - XFlush(dpy); + wm_backend->event_flush(); } } fPtr->origLeader = None; @@ -837,7 +837,7 @@ static void handleButtonPress(WMEvent * event) return; if (desc->parent_type == WCLASS_WINDOW) { - XSync(dpy, 0); + wm_backend->event_sync(0); if (event->u.button.state & ( MOD_MASK | ControlMask )) { XAllowEvents(dpy, AsyncPointer, CurrentTime); @@ -849,13 +849,13 @@ static void handleButtonPress(WMEvent * event) XAllowEvents(dpy, ReplayPointer, CurrentTime); /* } */ } - XSync(dpy, 0); + wm_backend->event_sync(0); } else if (desc->parent_type == WCLASS_APPICON || desc->parent_type == WCLASS_MINIWINDOW || desc->parent_type == WCLASS_DOCK_ICON) { if (event->u.button.state & MOD_MASK) { - XSync(dpy, 0); + wm_backend->event_sync(0); XAllowEvents(dpy, AsyncPointer, CurrentTime); - XSync(dpy, 0); + wm_backend->event_sync(0); } } @@ -882,10 +882,10 @@ static void handleMapNotify(WMEvent * event) if (wwin->flags.miniaturized) { wDeiconifyWindow(wwin); } else { - XGrabServer(dpy); + wm_backend->server_grab(); wWindowMap(wwin); wClientSetState(wwin, NormalState, None); - XUngrabServer(dpy); + wm_backend->server_ungrab(); } } } @@ -917,10 +917,10 @@ static void handleUnmapNotify(WMEvent * event) && !wwin->flags.miniaturized && !wwin->flags.hidden) return; - XGrabServer(dpy); - XUnmapWindow(dpy, wwin->frame->core->window); + wm_backend->server_grab(); + wm_backend->window_unmap((WNativeWindow)wwin->frame->core->window); wwin->flags.mapped = 0; - XSync(dpy, 0); + wm_backend->event_sync(0); /* check if the window was destroyed */ if (XCheckTypedWindowEvent(dpy, wwin->client_win, DestroyNotify, &ev)) { WMEvent wev; @@ -941,7 +941,7 @@ static void handleUnmapNotify(WMEvent * event) * root window */ wUnmanageWindow(wwin, !reparented, False); } - XUngrabServer(dpy); + wm_backend->server_ungrab(); } static void handleConfigureRequest(WMEvent * event) @@ -1139,7 +1139,7 @@ static void raiseWindow(WScreen * scr) if (!wwin->flags.destroyed && wwin->flags.focused) { wRaiseFrame(wwin->frame->core); /* this is needed or a race condition will occur */ - XSync(dpy, False); + wm_backend->event_sync(False); } } @@ -1866,10 +1866,10 @@ static void handleKeyPress(WMEvent * event) } wSelectWindow(wwin, !wwin->flags.selected); - XFlush(dpy); + wm_backend->event_flush(); wusleep(3000); wSelectWindow(wwin, !wwin->flags.selected); - XFlush(dpy); + wm_backend->event_flush(); } else if (scr->selected_windows && WMGetArrayItemCount(scr->selected_windows)) { diff --git a/src/framewin.c b/src/framewin.c index 3a734b0..2b396e6 100644 --- a/src/framewin.c +++ b/src/framewin.c @@ -475,7 +475,7 @@ void wFrameWindowChangeState(WFrameWindow * fwin, int state) if (fwin->border_pixel) wm_backend->window_set_border(fwin->core->window, *fwin->border_pixel); } - wFrameWindowPaint(fwin); + wm_backend->frame_paint(fwin); } static void updateTitlebar(WFrameWindow * fwin) @@ -550,17 +550,17 @@ static void updateTitlebar(WFrameWindow * fwin) void wFrameWindowHideButton(WFrameWindow * fwin, int flags) { if ((flags & WFF_RIGHT_BUTTON) && fwin->right_button) { - if (dpy && fwin->right_button->window) XUnmapWindow(dpy, fwin->right_button->window); + if (fwin->right_button->window) wm_backend->window_unmap((WNativeWindow)fwin->right_button->window); fwin->flags.hide_right_button = 1; } if ((flags & WFF_LEFT_BUTTON) && fwin->left_button) { - if (dpy && fwin->left_button->window) XUnmapWindow(dpy, fwin->left_button->window); + if (fwin->left_button->window) wm_backend->window_unmap((WNativeWindow)fwin->left_button->window); fwin->flags.hide_left_button = 1; } #ifdef XKB_BUTTON_HINT if ((flags & WFF_LANGUAGE_BUTTON) && fwin->language_button) { - if (dpy && fwin->language_button->window) XUnmapWindow(dpy, fwin->language_button->window); + if (fwin->language_button->window) wm_backend->window_unmap((WNativeWindow)fwin->language_button->window); fwin->flags.hide_language_button = 1; } #endif @@ -572,8 +572,8 @@ void wFrameWindowHideButton(WFrameWindow * fwin, int flags) #ifdef XKB_BUTTON_HINT updateTitlebar(fwin); #else - if (dpy && fwin->titlebar->window) XClearWindow(dpy, fwin->titlebar->window); - wFrameWindowPaint(fwin); + if (fwin->titlebar->window) wm_backend->window_clear((WNativeWindow)fwin->titlebar->window); + wm_backend->frame_paint(fwin); #endif } checkTitleSize(fwin); @@ -584,16 +584,16 @@ void wFrameWindowShowButton(WFrameWindow * fwin, int flags) { if ((flags & WFF_RIGHT_BUTTON) && fwin->right_button && fwin->flags.hide_right_button) { - if (!fwin->flags.rbutton_dont_fit && dpy && fwin->right_button->window) - XMapWindow(dpy, fwin->right_button->window); + if (!fwin->flags.rbutton_dont_fit && fwin->right_button->window) + wm_backend->window_map((WNativeWindow)fwin->right_button->window); fwin->flags.hide_right_button = 0; } #ifdef XKB_BUTTON_HINT if ((flags & WFF_LANGUAGE_BUTTON) && fwin->language_button && fwin->flags.hide_language_button) { - if (!fwin->flags.languagebutton_dont_fit && dpy && fwin->language_button->window) - XMapWindow(dpy, fwin->language_button->window); + if (!fwin->flags.languagebutton_dont_fit && fwin->language_button->window) + wm_backend->window_map((WNativeWindow)fwin->language_button->window); fwin->flags.hide_language_button = 0; } @@ -601,8 +601,8 @@ void wFrameWindowShowButton(WFrameWindow * fwin, int flags) if ((flags & WFF_LEFT_BUTTON) && fwin->left_button && fwin->flags.hide_left_button) { - if (!fwin->flags.lbutton_dont_fit && dpy && fwin->left_button->window) - XMapWindow(dpy, fwin->left_button->window); + if (!fwin->flags.lbutton_dont_fit && fwin->left_button->window) + wm_backend->window_map((WNativeWindow)fwin->left_button->window); fwin->flags.hide_left_button = 0; } @@ -611,8 +611,8 @@ void wFrameWindowShowButton(WFrameWindow * fwin, int flags) if (wPreferences.new_style == TS_NEW) { updateTitlebar(fwin); } else { - if (dpy && fwin->titlebar->window) XClearWindow(dpy, fwin->titlebar->window); - wFrameWindowPaint(fwin); + if (fwin->titlebar->window) wm_backend->window_clear((WNativeWindow)fwin->titlebar->window); + wm_backend->frame_paint(fwin); } checkTitleSize(fwin); } @@ -863,10 +863,6 @@ void wFrameWindowPaint(WFrameWindow * fwin) WScreen *scr = fwin->screen_ptr; int state; - /* Let the backend handle painting if it can (Wayland: pixman rendering). */ - if (wm_backend->frame_paint && wm_backend->frame_paint(fwin)) - return; - state = fwin->flags.state; if (fwin->flags.is_client_window_frame) @@ -906,7 +902,7 @@ void wFrameWindowPaint(WFrameWindow * fwin) fwin->titlebar->height, (WTexSolid *) fwin->title_texture[state], WREL_RAISED); } - if (dpy && fwin->resizebar && fwin->resizebar->window + if (fwin->resizebar && fwin->resizebar->window && !fwin->flags.repaint_only_titlebar && fwin->resizebar_texture[0]->any.type == WTEX_SOLID) { Window win; @@ -969,7 +965,7 @@ void wFrameWindowPaint(WFrameWindow * fwin) fwin->languagebutton_image = scr->b_pixmaps[WBUT_XKBGROUP1 + fwin->languagemode]; #endif - if (dpy && fwin->title && fwin->titlebar->window) { + if (fwin->title && fwin->titlebar->window) { Drawable buf; char *title; @@ -1028,7 +1024,7 @@ void wFrameWindowPaint(WFrameWindow * fwin) XCopyArea(dpy, buf, fwin->titlebar->window, scr->copy_gc, 0, 0, w + 2, h, x - 1, y); - XFreePixmap(dpy, buf); + wm_backend->pixmap_free((unsigned long)buf); wfree(title); } @@ -1049,11 +1045,11 @@ static void reconfigure(WFrameWindow * fwin, int x, int y, int width, int height int k = (wPreferences.new_style == TS_NEW ? 4 : 3); int resizedHorizontally = 0; - if (dpy && fwin->core->window) { + if (fwin->core->window) { if (dontMove) - XResizeWindow(dpy, fwin->core->window, width, height); + wm_backend->window_resize((WNativeWindow)fwin->core->window, width, height); else - XMoveResizeWindow(dpy, fwin->core->window, x, y, width, height); + wm_backend->frame_configure((WNativeWindow)fwin->core->window, x, y, width, height); } if (fwin->core->width != width) { @@ -1070,13 +1066,13 @@ static void reconfigure(WFrameWindow * fwin, int x, int y, int width, int height */ if (fwin->left_button) { if (width < fwin->top_width * k && !fwin->flags.lbutton_dont_fit) { - if (!fwin->flags.hide_left_button && dpy && fwin->left_button->window) - XUnmapWindow(dpy, fwin->left_button->window); + if (!fwin->flags.hide_left_button && fwin->left_button->window) + wm_backend->window_unmap((WNativeWindow)fwin->left_button->window); fwin->flags.lbutton_dont_fit = 1; } else if (width >= fwin->top_width * k && fwin->flags.lbutton_dont_fit) { - if (!fwin->flags.hide_left_button && dpy && fwin->left_button->window) - XMapWindow(dpy, fwin->left_button->window); + if (!fwin->flags.hide_left_button && fwin->left_button->window) + wm_backend->window_map((WNativeWindow)fwin->left_button->window); fwin->flags.lbutton_dont_fit = 0; } @@ -1084,13 +1080,13 @@ static void reconfigure(WFrameWindow * fwin, int x, int y, int width, int height #ifdef XKB_BUTTON_HINT if (fwin->language_button) { if (width < fwin->top_width * k && !fwin->flags.languagebutton_dont_fit) { - if (!fwin->flags.hide_language_button && dpy && fwin->language_button->window) - XUnmapWindow(dpy, fwin->language_button->window); + if (!fwin->flags.hide_language_button && fwin->language_button->window) + wm_backend->window_unmap((WNativeWindow)fwin->language_button->window); fwin->flags.languagebutton_dont_fit = 1; } else if (width >= fwin->top_width * k && fwin->flags.languagebutton_dont_fit) { - if (!fwin->flags.hide_language_button && dpy && fwin->language_button->window) - XMapWindow(dpy, fwin->language_button->window); + if (!fwin->flags.hide_language_button && fwin->language_button->window) + wm_backend->window_map((WNativeWindow)fwin->language_button->window); fwin->flags.languagebutton_dont_fit = 0; } @@ -1099,13 +1095,13 @@ static void reconfigure(WFrameWindow * fwin, int x, int y, int width, int height if (fwin->right_button) { if (width < fwin->top_width * 2 && !fwin->flags.rbutton_dont_fit) { - if (!fwin->flags.hide_right_button && dpy && fwin->right_button->window) - XUnmapWindow(dpy, fwin->right_button->window); + if (!fwin->flags.hide_right_button && fwin->right_button->window) + wm_backend->window_unmap((WNativeWindow)fwin->right_button->window); fwin->flags.rbutton_dont_fit = 1; } else if (width >= fwin->top_width * 2 && fwin->flags.rbutton_dont_fit) { - if (!fwin->flags.hide_right_button && dpy && fwin->right_button->window) - XMapWindow(dpy, fwin->right_button->window); + if (!fwin->flags.hide_right_button && fwin->right_button->window) + wm_backend->window_map((WNativeWindow)fwin->right_button->window); fwin->flags.rbutton_dont_fit = 0; } @@ -1165,7 +1161,7 @@ int wFrameWindowChangeTitle(WFrameWindow *fwin, const char *new_title) if (fwin->titlebar) { wm_backend->window_clear(fwin->titlebar->window); - wFrameWindowPaint(fwin); + wm_backend->frame_paint(fwin); } checkTitleSize(fwin); @@ -1190,7 +1186,7 @@ static void handleExpose(WObjDescriptor * desc, WBackendEvent * event) fwin->flags.repaint_only_titlebar = 1; if (fwin->resizebar && fwin->resizebar->window == event->u.expose.window) fwin->flags.repaint_only_resizebar = 1; - wFrameWindowPaint(fwin); + wm_backend->frame_paint(fwin); fwin->flags.repaint_only_titlebar = 0; fwin->flags.repaint_only_resizebar = 0; } diff --git a/src/icon.c b/src/icon.c index 43bf1fa..1b45641 100644 --- a/src/icon.c +++ b/src/icon.c @@ -214,17 +214,17 @@ void wIconDestroy(WIcon *icon) x = icon->owner->icon_x; y = icon->owner->icon_y; } - XUnmapWindow(dpy, icon->icon_win); - XReparentWindow(dpy, icon->icon_win, scr->root_win, x, y); + wm_backend->window_unmap((WNativeWindow)icon->icon_win); + wm_backend->client_reparent((WNativeWindow)icon->icon_win, (WNativeWindow)scr->root_win, x, y); } if (icon->icon_name) XFree(icon->icon_name); - if (icon->pixmap && dpy) - XFreePixmap(dpy, icon->pixmap); + if (icon->pixmap) + wm_backend->pixmap_free((unsigned long)icon->pixmap); - if (icon->mini_preview && dpy) - XFreePixmap(dpy, icon->mini_preview); + if (icon->mini_preview) + wm_backend->pixmap_free((unsigned long)icon->mini_preview); unset_icon_image(icon); @@ -621,8 +621,8 @@ void set_icon_minipreview(WIcon *icon, RImage *image) wPreferences.minipreview_size - 2 * MINIPREVIEW_BORDER); if (RConvertImage(scr->rcontext, scaled_mini_preview, &tmp)) { - if (icon->mini_preview != None && dpy) - XFreePixmap(dpy, icon->mini_preview); + if (icon->mini_preview != None) + wm_backend->pixmap_free((unsigned long)icon->mini_preview); icon->mini_preview = tmp; } RReleaseImage(scaled_mini_preview); @@ -662,7 +662,7 @@ void update_icon_pixmap(WIcon *icon) { if (icon->pixmap != None) - XFreePixmap(dpy, icon->pixmap); + wm_backend->pixmap_free((unsigned long)icon->pixmap); icon->pixmap = None; @@ -679,7 +679,7 @@ void update_icon_pixmap(WIcon *icon) /* No pixmap, set default background */ if (icon->pixmap != None) - XSetWindowBackgroundPixmap(dpy, icon->core->window, icon->pixmap); + wm_backend->window_set_background_pixmap((WNativeWindow)icon->core->window, (unsigned long)icon->pixmap); /* Paint it */ wIconPaint(icon); @@ -746,10 +746,10 @@ static void set_dockapp_in_icon(WIcon *icon) getSize(icon->icon_win, &w, &h, &d); /* Set the background pixmap */ - XSetWindowBackgroundPixmap(dpy, icon->core->window, scr->icon_tile_pixmap); + wm_backend->window_set_background_pixmap((WNativeWindow)icon->core->window, (unsigned long)scr->icon_tile_pixmap); /* Set the icon border */ - XSetWindowBorderWidth(dpy, icon->icon_win, 0); + wm_backend->window_set_border_width((WNativeWindow)icon->icon_win, 0); /* Put the dock application in the icon */ XReparentWindow(dpy, icon->icon_win, icon->core->window, @@ -757,8 +757,8 @@ static void set_dockapp_in_icon(WIcon *icon) (wPreferences.icon_size - h) / 2); /* Show it and save */ - XMapWindow(dpy, icon->icon_win); - XAddToSaveSet(dpy, icon->icon_win); + wm_backend->window_map((WNativeWindow)icon->icon_win); + wm_backend->client_add_to_save_set((WNativeWindow)icon->icon_win); /* Needed to move the icon clicking on the application part */ if ((XGetWindowAttributes(dpy, icon->icon_win, &attr)) && @@ -830,7 +830,7 @@ void wIconPaint(WIcon *icon) WScreen *scr = icon->core->screen_ptr; - XClearWindow(dpy, icon->core->window); + wm_backend->window_clear((WNativeWindow)icon->core->window); update_icon_title(icon); @@ -930,7 +930,7 @@ static void miniwindowMouseDown(WObjDescriptor *desc, WBackendEvent *event) } x = ev.u.motion.x_root - dx; y = ev.u.motion.y_root - dy; - XMoveWindow(dpy, icon->core->window, x, y); + wm_backend->window_move((WNativeWindow)icon->core->window, x, y); break; case WME_BUTTON_PRESS: @@ -943,11 +943,11 @@ static void miniwindowMouseDown(WObjDescriptor *desc, WBackendEvent *event) if (wwin->icon_x != x || wwin->icon_y != y) wwin->flags.icon_moved = 1; - XMoveWindow(dpy, icon->core->window, x, y); + wm_backend->window_move((WNativeWindow)icon->core->window, x, y); wwin->icon_x = x; wwin->icon_y = y; - XUngrabPointer(dpy, CurrentTime); + wm_backend->pointer_ungrab(0); if (wPreferences.auto_arrange_icons) wArrangeIcons(wwin->screen_ptr, True); diff --git a/src/main.c b/src/main.c index 215ee4c..29c37e2 100644 --- a/src/main.c +++ b/src/main.c @@ -779,12 +779,12 @@ static int real_main(int argc, char **argv) /* open display */ dpy = (Display *)wm_backend->display_open(DisplayName); - if (dpy == NULL && wm_backend == &x11_backend) { + if (!wm_backend->is_wayland && dpy == NULL) { wfatal(_("could not open display \"%s\""), XDisplayName(DisplayName)); exit(1); } - if (dpy != NULL) { + if (!wm_backend->is_wayland) { if (getWVisualID(0) < 0) { /* * If unspecified, use default visual instead of waiting diff --git a/src/menu.c b/src/menu.c index ffe2e5c..dacdf48 100644 --- a/src/menu.c +++ b/src/menu.c @@ -107,7 +107,7 @@ static void appearanceObserver(void *self, WMNotification * notif) menu->frame->flags.need_texture_remake = 1; } if (flags & (WColorSettings | WTextureSettings)) { - wFrameWindowPaint(menu->frame); + wm_backend->frame_paint(menu->frame); } } } @@ -200,12 +200,12 @@ WMenu *wMenuCreate(WScreen *screen, const char *title, int main_menu) menu->menu_texture_data = None; wwarning("menu: wMenuCreate XMapWindow win=0x%lx", (unsigned long)menu->menu->window); - if (dpy && menu->menu->window) - XMapWindow(dpy, menu->menu->window); + if (menu->menu->window) + wm_backend->window_map((WNativeWindow)menu->menu->window); wwarning("menu: wMenuCreate XMapWindow done"); - if (dpy && menu->menu->window) - XFlush(dpy); + if (menu->menu->window) + wm_backend->event_flush(); wwarning("menu: wMenuCreate XFlush done"); if (!brother) { @@ -453,15 +453,15 @@ static void updateTexture(WMenu * menu) menu->menu_texture_data = renderTexture(menu); - XSetWindowBackgroundPixmap(dpy, menu->menu->window, menu->menu_texture_data); - XClearWindow(dpy, menu->menu->window); + wm_backend->window_set_background_pixmap((WNativeWindow)menu->menu->window, (unsigned long)menu->menu_texture_data); + wm_backend->window_clear((WNativeWindow)menu->menu->window); - XSetWindowBackgroundPixmap(dpy, menu->brother->menu->window, menu->menu_texture_data); - XClearWindow(dpy, menu->brother->menu->window); + wm_backend->window_set_background_pixmap((WNativeWindow)menu->brother->menu->window, (unsigned long)menu->menu_texture_data); + wm_backend->window_clear((WNativeWindow)menu->brother->menu->window); } } else { - XSetWindowBackground(dpy, menu->menu->window, scr->menu_item_texture->any.color.pixel); - XClearWindow(dpy, menu->menu->window); + wm_backend->window_set_background((WNativeWindow)menu->menu->window, scr->menu_item_texture->any.color.pixel); + wm_backend->window_clear((WNativeWindow)menu->menu->window); } } @@ -917,7 +917,7 @@ static int keyboardMenu(WMenu * menu) if (menu->flags.editing) return False; - XGrabKeyboard(dpy, menu->frame->core->window, True, GrabModeAsync, GrabModeAsync, CurrentTime); + wm_backend->keyboard_grab((WNativeWindow)menu->frame->core->window); if (menu->frame_y + menu->frame->top_width >= rect.pos.y + rect.size.height) new_y = rect.pos.y + rect.size.height - menu->frame->top_width; @@ -1003,7 +1003,7 @@ static int keyboardMenu(WMenu * menu) if (entry->cascade >= 0 && menu->cascades && menu->cascades[entry->cascade]->entry_no > 0) { - XUngrabKeyboard(dpy, CurrentTime); + wm_backend->keyboard_ungrab(); selectEntry(menu->cascades[entry->cascade], 0); if (!keyboardMenu(menu->cascades[entry->cascade])) @@ -1046,7 +1046,7 @@ static int keyboardMenu(WMenu * menu) } } - XUngrabKeyboard(dpy, CurrentTime); + wm_backend->keyboard_ungrab(); if (done == 2 && menu->selected_entry >= 0) { entry = menu->entries[menu->selected_entry]; @@ -1061,10 +1061,10 @@ static int keyboardMenu(WMenu * menu) for (i = 0; i < MENU_BLINK_COUNT; i++) { paintEntry(menu, sel, False); - XSync(dpy, 0); + wm_backend->event_sync(0); wusleep(MENU_BLINK_DELAY); paintEntry(menu, sel, True); - XSync(dpy, 0); + wm_backend->event_sync(0); wusleep(MENU_BLINK_DELAY); } #endif @@ -1112,12 +1112,12 @@ void wMenuMapAt(WMenu * menu, int x, int y, int keyboard) y = rect.pos.y + rect.size.height - MENUH(menu); } - if (dpy && menu->frame->core->window) - XMoveWindow(dpy, menu->frame->core->window, x, y); + if (menu->frame->core->window) + wm_backend->window_move((WNativeWindow)menu->frame->core->window, x, y); menu->frame_x = x; menu->frame_y = y; - if (dpy && menu->frame->core->window) - XMapWindow(dpy, menu->frame->core->window); + if (menu->frame->core->window) + wm_backend->window_map((WNativeWindow)menu->frame->core->window); wRaiseFrame(menu->frame->core); menu->flags.mapped = 1; } else { @@ -1137,11 +1137,11 @@ void wMenuMap(WMenu * menu) if (menu->flags.app_menu && menu->parent == NULL) { menu->frame_x = menu->frame->screen_ptr->app_menu_x; menu->frame_y = menu->frame->screen_ptr->app_menu_y; - if (dpy && menu->frame->core->window) - XMoveWindow(dpy, menu->frame->core->window, menu->frame_x, menu->frame_y); + if (menu->frame->core->window) + wm_backend->window_move((WNativeWindow)menu->frame->core->window, menu->frame_x, menu->frame_y); } - if (dpy && menu->frame->core->window) - XMapWindow(dpy, menu->frame->core->window); + if (menu->frame->core->window) + wm_backend->window_map((WNativeWindow)menu->frame->core->window); wRaiseFrame(menu->frame->core); menu->flags.mapped = 1; } @@ -1150,8 +1150,8 @@ void wMenuUnmap(WMenu * menu) { int i; - if (dpy && menu->frame->core->window) - XUnmapWindow(dpy, menu->frame->core->window); + if (menu->frame->core->window) + wm_backend->window_unmap((WNativeWindow)menu->frame->core->window); if (menu->flags.titled && menu->flags.buttoned) { wFrameWindowHideButton(menu->frame, WFF_RIGHT_BUTTON); } @@ -1339,7 +1339,7 @@ static void closeCascade(WMenu * menu) if (menu->flags.brother || (!menu->flags.buttoned && (!menu->flags.app_menu || menu->parent != NULL))) { selectEntry(menu, -1); - XSync(dpy, 0); + wm_backend->event_sync(0); #if (MENU_BLINK_DELAY > 2) wusleep(MENU_BLINK_DELAY / 2); #endif @@ -1856,7 +1856,7 @@ static void menuMouseDown(WObjDescriptor * desc, WBackendEvent * event) event->u.button.send_event = True; (*desc->handle_mousedown)(desc, event); - XUngrabPointer(dpy, CurrentTime); + wm_backend->pointer_ungrab(0); selectEntry(menu, -1); return; } else { @@ -2032,10 +2032,10 @@ static void menuMouseDown(WObjDescriptor * desc, WBackendEvent * event) for (i = 0; i < MENU_BLINK_COUNT; i++) { paintEntry(menu, sel, False); - XSync(dpy, 0); + wm_backend->event_sync(0); wusleep(MENU_BLINK_DELAY); paintEntry(menu, sel, True); - XSync(dpy, 0); + wm_backend->event_sync(0); wusleep(MENU_BLINK_DELAY); } #endif @@ -2094,8 +2094,8 @@ void wMenuMove(WMenu * menu, int x, int y, int submenus) menu->frame_x = x; menu->frame_y = y; - if (dpy && menu->frame->core->window) - XMoveWindow(dpy, menu->frame->core->window, x, y); + if (menu->frame->core->window) + wm_backend->window_move((WNativeWindow)menu->frame->core->window, x, y); if (submenus > 0 && menu->selected_entry >= 0) { i = menu->entries[menu->selected_entry]->cascade; @@ -2263,7 +2263,7 @@ static void menuTitleMouseDown(WCoreWindow * sender, void *data, XEvent * event) case WME_BUTTON_RELEASE: if (ev.u.button.button != event->xbutton.button) break; - XUngrabPointer(dpy, CurrentTime); + wm_backend->pointer_ungrab(0); return; default: diff --git a/src/monitor.c b/src/monitor.c index 6e489f2..f39ac70 100644 --- a/src/monitor.c +++ b/src/monitor.c @@ -43,7 +43,7 @@ static int showCrashDialog(int sig) if (!wm_backend->is_wayland) { dpy = XOpenDisplay(NULL); - XGrabServer(dpy); + wm_backend->server_grab(); crashAction = wShowCrashingDialogPanel(sig); XCloseDisplay(dpy); dpy = NULL; diff --git a/src/startup.c b/src/startup.c index 36d131c..ce60d2c 100644 --- a/src/startup.c +++ b/src/startup.c @@ -477,7 +477,7 @@ void StartUp(Bool defaultScreenOnly) /* set hook for our event dispatcher in WINGs event dispatcher (X11 only). * Skip for Wayland: we run a wlroots event loop, not a WINGs/X11 loop. * dpy may be set (XWayland bridge), but X11 event dispatch is not used. */ - if (dpy && !wm_backend->is_wayland) + if (!wm_backend->is_wayland) WMHookEventHandler(DispatchEvent); /* initialize defaults stuff */ @@ -619,7 +619,7 @@ void StartUp(Bool defaultScreenOnly) #ifndef HAVE_INOTIFY /* setup defaults file polling (X11/WINGs timer only) */ - if (dpy && !wPreferences.flags.noupdates) + if (!wm_backend->is_wayland && !wPreferences.flags.noupdates) WMAddTimerHandler(3000, wDefaultsCheckDomains, NULL); #endif diff --git a/src/superfluous.c b/src/superfluous.c index de0f2f0..44451b0 100644 --- a/src/superfluous.c +++ b/src/superfluous.c @@ -69,7 +69,7 @@ void DoKaboom(WScreen * scr, Window win, int x, int y) image = XGetImage(dpy, win, 0, 0, wPreferences.icon_size, wPreferences.icon_size, AllPlanes, ZPixmap); if (!image) { - XUnmapWindow(dpy, win); + wm_backend->window_unmap((WNativeWindow)win); return; } XPutImage(dpy, tmp, scr->copy_gc, image, 0, 0, 0, 0, @@ -93,7 +93,7 @@ void DoKaboom(WScreen * scr, Window win, int x, int y) } } - XUnmapWindow(dpy, win); + wm_backend->window_unmap((WNativeWindow)win); j = k; while (k > 0) { @@ -101,7 +101,7 @@ void DoKaboom(WScreen * scr, Window win, int x, int y) if (XCheckTypedEvent(dpy, ButtonPress, &foo)) { XPutBackEvent(dpy, &foo); - XClearWindow(dpy, scr->root_win); + wm_backend->window_clear((WNativeWindow)scr->root_win); break; } @@ -125,11 +125,11 @@ void DoKaboom(WScreen * scr, Window win, int x, int y) } } - XFlush(dpy); + wm_backend->event_flush(); wusleep(MINIATURIZE_ANIMATION_DELAY_Z * 2); } - XFreePixmap(dpy, tmp); + wm_backend->pixmap_free((unsigned long)tmp); #endif /* NORMAL_ICON_KABOOM */ } diff --git a/src/switchpanel.c b/src/switchpanel.c index 651e154..57e44e2 100644 --- a/src/switchpanel.c +++ b/src/switchpanel.c @@ -170,9 +170,9 @@ static void changeImage(WSwitchPanel *panel, int idecks, int selected, Bool dim, opaq); RConvertImage(panel->scr->rcontext, back, &p); - XSetWindowBackgroundPixmap(dpy, WMWidgetXID(icon), p); - XClearWindow(dpy, WMWidgetXID(icon)); - XFreePixmap(dpy, p); + wm_backend->window_set_background_pixmap((WNativeWindow)WMWidgetXID(icon), (unsigned long)p); + wm_backend->window_clear((WNativeWindow)WMWidgetXID(icon)); + wm_backend->pixmap_free((unsigned long)p); } if (!panel->bg && !panel->tile && selected) @@ -341,7 +341,7 @@ static void drawTitle(WSwitchPanel *panel, int idecks, const char *title) } } - XClearWindow(dpy, WMWidgetXID(panel->win)); + wm_backend->window_clear((WNativeWindow)WMWidgetXID(panel->win)); if (ntitle) WMDrawString(panel->scr->wmscreen, WMWidgetXID(panel->win), @@ -504,15 +504,15 @@ WSwitchPanel *wInitSwitchPanel(WScreen *scr, WWindow *curwin, Bool class_only) RConvertImageMask(scr->rcontext, panel->bg, &pixmap, &mask, 250); - XSetWindowBackgroundPixmap(dpy, WMWidgetXID(panel->win), pixmap); + wm_backend->window_set_background_pixmap((WNativeWindow)WMWidgetXID(panel->win), (unsigned long)pixmap); if (mask) wm_backend->shape_combine_mask(WMWidgetXID(panel->win), (WNativeWindow)mask); if (pixmap) - XFreePixmap(dpy, pixmap); + wm_backend->pixmap_free((unsigned long)pixmap); if (mask) - XFreePixmap(dpy, mask); + wm_backend->pixmap_free((unsigned long)mask); } { diff --git a/src/window.c b/src/window.c index 1085d78..7d35992 100644 --- a/src/window.c +++ b/src/window.c @@ -121,7 +121,7 @@ static void appearanceObserver(void *self, WMNotification * notif) if (wwin->frame->titlebar) wm_backend->window_clear(wwin->frame->titlebar->window); - wFrameWindowPaint(wwin->frame); + wm_backend->frame_paint(wwin->frame); } } @@ -1807,7 +1807,7 @@ void wWindowUnfocus(WWindow *wwin) if (owner->flags.mapped || owner->flags.shaded) { wWindowUnfocus(owner); if (owner->frame) - wFrameWindowPaint(owner->frame); + wm_backend->frame_paint(owner->frame); } } } @@ -2163,7 +2163,7 @@ void wWindowUpdateButtonImages(WWindow *wwin) /* force buttons to be redrawn */ fwin->flags.need_texture_change = 1; - wFrameWindowPaint(fwin); + wm_backend->frame_paint(fwin); } /* diff --git a/src/winmenu.c b/src/winmenu.c index 8e130f3..6153d47 100644 --- a/src/winmenu.c +++ b/src/winmenu.c @@ -355,10 +355,10 @@ static void makeShortcutCommand(WMenu * menu, WMenuEntry * entry) } wSelectWindow(wwin, !wwin->flags.selected); - XFlush(dpy); + wm_backend->event_flush(); wusleep(3000); wSelectWindow(wwin, !wwin->flags.selected); - XFlush(dpy); + wm_backend->event_flush(); } static void updateWorkspaceMenu(WMenu * menu) diff --git a/src/winspector.c b/src/winspector.c index b01e472..4ca4b29 100644 --- a/src/winspector.c +++ b/src/winspector.c @@ -347,7 +347,7 @@ static void freeInspector(InspectorPanel *panel) return; WMDestroyWidget(panel->win); - XDestroyWindow(dpy, panel->parent); + wm_backend->frame_destroy(NULL, (WNativeWindow)panel->parent); wfree(panel); } @@ -785,7 +785,7 @@ static void applySettings(WMWidget *button, void *client_data) wwin->frame->flags.need_texture_change = 1; wWindowConfigureBorders(wwin); - wFrameWindowPaint(wwin->frame); + wm_backend->frame_paint(wwin->frame); wm_backend->netwm_update_actions(wwin, 0); /* Can't apply emulate_appicon because it will probably cause problems. */ @@ -1033,7 +1033,7 @@ static void selectWindow(WMWidget *bPtr, void *data) WMSetLabelText(panel->specLbl, _("Click in the window you wish to inspect.")); WMMaskEvent(scr->wmscreen, ButtonPressMask, &event); - XUngrabPointer(dpy, CurrentTime); + wm_backend->pointer_ungrab(0); { XEvent *_xev = (XEvent *)event._x11_raw; @@ -1215,7 +1215,7 @@ static InspectorPanel *createInspectorForWindow(WWindow *wwin, int xpos, int ypo } parent = XCreateSimpleWindow(dpy, scr->root_win, 0, 0, PWIDTH, PHEIGHT, 0, 0, 0); - XSelectInput(dpy, parent, KeyPressMask | KeyReleaseMask); + wm_backend->window_select_events((WNativeWindow)parent, KeyPressMask | KeyReleaseMask); panel->parent = parent; XReparentWindow(dpy, WMWidgetXID(panel->win), parent, 0, 0); @@ -1287,8 +1287,8 @@ void wUnhideInspectorForWindow(WWindow *wwin) pwin->flags.hidden = 0; pwin->flags.mapped = 1; - XMapWindow(dpy, pwin->client_win); - XMapWindow(dpy, pwin->frame->core->window); + wm_backend->window_map((WNativeWindow)pwin->client_win); + wm_backend->window_map((WNativeWindow)pwin->frame->core->window); wClientSetState(pwin, NormalState, None); } diff --git a/src/wmspec.c b/src/wmspec.c index b449153..96c8941 100644 --- a/src/wmspec.c +++ b/src/wmspec.c @@ -1530,7 +1530,7 @@ static void updateWindowType(WWindow *wwin) ChangeStackingLevel(wwin->frame->core, layer); wwin->frame->flags.need_texture_change = 1; wWindowConfigureBorders(wwin); - wFrameWindowPaint(wwin->frame); + wm_backend->frame_paint(wwin->frame); wNETWMUpdateActions(wwin, False); } } diff --git a/src/workspace.c b/src/workspace.c index f8c1430..f280bf7 100644 --- a/src/workspace.c +++ b/src/workspace.c @@ -623,7 +623,7 @@ void wWorkspaceForceChange(WScreen * scr, int workspace) WMPostNotificationName(WMNWorkspaceChanged, scr, (void *)(uintptr_t) workspace); - /* XSync(dpy, False); */ + /* wm_backend->event_sync(False); */ } static void switchWSCommand(WMenu * menu, WMenuEntry * entry) diff --git a/src/wsmap.c b/src/wsmap.c index 2555ce1..3206eb9 100644 --- a/src/wsmap.c +++ b/src/wsmap.c @@ -170,15 +170,15 @@ static void set_workspace_map_background_image(WWorkspaceMap *wsmap) if (!pixmap) return; - XSetWindowBackgroundPixmap(dpy, WMWidgetXID(wsmap->win), pixmap); + wm_backend->window_set_background_pixmap((WNativeWindow)WMWidgetXID(wsmap->win), (unsigned long)pixmap); if (mask) wm_backend->shape_combine_mask(WMWidgetXID(wsmap->win), (WNativeWindow)mask); if (pixmap) - XFreePixmap(dpy, pixmap); + wm_backend->pixmap_free((unsigned long)pixmap); if (mask) - XFreePixmap(dpy, mask); + wm_backend->pixmap_free((unsigned long)mask); } } @@ -480,7 +480,7 @@ static void handle_event(WWorkspaceMap *wsmap, W_WorkspaceMap *wsmap_array) int modifiers; KeyCode escKey = wm_backend->keysym_to_keycode(WM_KEY_ESCAPE); - XGrabKeyboard(dpy, WMWidgetXID(wsmap->win), False, GrabModeAsync, GrabModeAsync, CurrentTime); + wm_backend->keyboard_grab((WNativeWindow)WMWidgetXID(wsmap->win)); XGrabPointer(dpy, WMWidgetXID(wsmap->win), True, ButtonMotionMask | ButtonReleaseMask | ButtonPressMask, GrabModeAsync, GrabModeAsync, WMWidgetXID(wsmap->win), None, CurrentTime); @@ -564,8 +564,8 @@ static void handle_event(WWorkspaceMap *wsmap, W_WorkspaceMap *wsmap_array) } } - XUngrabPointer(dpy, CurrentTime); - XUngrabKeyboard(dpy, CurrentTime); + wm_backend->pointer_ungrab(0); + wm_backend->keyboard_ungrab(); workspace_map_destroy(wsmap); }