Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #if defined(_WIN32)
- #include <windows.h>
- #elif !defined(HEADLESS)
- #include <X11/Xutil.h>
- #include <SDL_syswm.h>
- #include <wetwm.h>
- #endif // defined(_WIN32)
- void WindowManagerHelper::TaskBarAlert(bool enable) {
- #if defined(_WIN32)
- if (enable) {
- //flashAnimate(); // kick the first one immediately
- FlashWindow(winId(), true);
- }
- #elif !defined(HEADLESS)
- /* If you're looking for KDE-based solution then here it is:
- * You have to include <wetwm.h> and this will work.
- * Thanks go to Latem for pointing me in the right direction.
- #include <wetwm.h>
- NETWinInfo info(qt_xdisplay(), this->winId(), qt_xrootwin(), 0);
- if (enable) { info.setState(NET::DemandsAttention, NET::DemandsAttention); }
- else { info.setState(0, NET::DemandsAttention); }
- */
- // KDE-based solution
- /*SDL_SysWMinfo sdlinfo;
- SDL_VERSION(&sdlinfo.version);
- if (SDL_GetWMInfo(&sdlinfo)) {
- Display* xdisplay = sdlinfo.info.x11.display;
- // Testing ...
- //Window rootwin = sdlinfo.info.x11.window;
- //Window winId = sdlinfo.info.x11.wmwindow;
- // Testing ...
- //Window rootwin = sdlinfo.info.x11.wmwindow;
- //Window winId = sdlinfo.info.x11.window;
- // Testing ...
- Window rootwin = sdlinfo.info.x11.window;
- Window winId = sdlinfo.info.x11.window;
- // Testing ...
- //Window rootwin = sdlinfo.info.x11.wmwindow;
- //Window winId = sdlinfo.info.x11.wmwindow;
- //Display* xdisplay = qt_xdisplay();
- //Window rootwin = qt_xrootwin();
- //Window winId = this->winId();
- sdlinfo.info.x11.lock_func();
- NETWinInfo info(xdisplay, winId, rootwin, 0);
- if (enable) {
- info.setState(NET::DemandsAttention, NET::DemandsAttention);
- } else {
- info.setState(0, NET::DemandsAttention);
- }
- sdlinfo.info.x11.unlock_func();
- }*/
- // Xlib-based solution
- SDL_SysWMinfo sdlinfo;
- SDL_VERSION(&sdlinfo.version);
- if (SDL_GetWMInfo(&sdlinfo)) {
- Display* xdisplay = sdlinfo.info.x11.display;
- // NO
- //Window rootwin = sdlinfo.info.x11.window;
- //Window winId = sdlinfo.info.x11.wmwindow;
- // NO
- //Window rootwin = sdlinfo.info.x11.wmwindow;
- //Window winId = sdlinfo.info.x11.window;
- // NO
- //Window rootwin = sdlinfo.info.x11.window;
- //Window winId = sdlinfo.info.x11.window;
- // Testing ...
- Window rootwin = sdlinfo.info.x11.wmwindow;
- Window winId = sdlinfo.info.x11.wmwindow;
- //Display* xdisplay = qt_xdisplay();
- //Window rootwin = qt_xrootwin();
- //Window winId = this->winId();
- sdlinfo.info.x11.lock_func();
- static Atom demandsAttention = XInternAtom(xdisplay, "_NET_WM_STATE_DEMANDS_ATTENTION", true);
- static Atom wmState = XInternAtom(xdisplay, "_NET_WM_STATE", true);
- XEvent e;
- e.xclient.type = ClientMessage;
- e.xclient.message_type = wmState;
- e.xclient.display = xdisplay;
- e.xclient.window = winId;
- e.xclient.format = 32;
- e.xclient.data.l[1] = demandsAttention;
- e.xclient.data.l[2] = 0l;
- e.xclient.data.l[3] = 0l;
- e.xclient.data.l[4] = 0l;
- if (enable) {
- e.xclient.data.l[0] = 1;
- } else {
- e.xclient.data.l[0] = 0;
- }
- XSendEvent(xdisplay, rootwin, False, (SubstructureRedirectMask | SubstructureNotifyMask), &e);
- sdlinfo.info.x11.unlock_func();
- }
- #endif // defined(_WIN32)
- }
- /*void WindowManagerHelper::flashAnimate() {
- #ifdef _WIN32
- FlashWindow(winId(), true);
- #endif
- }*/
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement