Advertisement
Guest User

Untitled

a guest
Oct 1st, 2011
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.32 KB | None | 0 0
  1.  
  2.  
  3. #if       defined(_WIN32)
  4.     #include <windows.h>
  5. #elif     !defined(HEADLESS)
  6.     #include <X11/Xutil.h>
  7.     #include <SDL_syswm.h>
  8.         #include <wetwm.h>
  9. #endif // defined(_WIN32)
  10.  
  11. void WindowManagerHelper::TaskBarAlert(bool enable) {
  12. #if       defined(_WIN32)
  13.     if (enable) {
  14.         //flashAnimate(); // kick the first one immediately
  15.         FlashWindow(winId(), true);
  16.     }
  17. #elif     !defined(HEADLESS)
  18.     /* If you're looking for KDE-based solution then here it is:
  19.      * You have to include <wetwm.h> and this will work.
  20.      * Thanks go to Latem for pointing me in the right direction.
  21.         #include <wetwm.h>
  22.         NETWinInfo info(qt_xdisplay(), this->winId(), qt_xrootwin(), 0);
  23.         if (enable) { info.setState(NET::DemandsAttention, NET::DemandsAttention); }
  24.         else { info.setState(0, NET::DemandsAttention); }
  25.      */
  26.  
  27.     // KDE-based solution
  28.     /*SDL_SysWMinfo sdlinfo;
  29.     SDL_VERSION(&sdlinfo.version);
  30.     if (SDL_GetWMInfo(&sdlinfo)) {
  31.         Display* xdisplay = sdlinfo.info.x11.display;
  32.  
  33.         // Testing ...
  34.         //Window rootwin = sdlinfo.info.x11.window;
  35.         //Window winId = sdlinfo.info.x11.wmwindow;
  36.  
  37.         // Testing ...
  38.         //Window rootwin = sdlinfo.info.x11.wmwindow;
  39.         //Window winId = sdlinfo.info.x11.window;
  40.  
  41.         // Testing ...
  42.         Window rootwin = sdlinfo.info.x11.window;
  43.         Window winId = sdlinfo.info.x11.window;
  44.  
  45.         // Testing ...
  46.         //Window rootwin = sdlinfo.info.x11.wmwindow;
  47.         //Window winId = sdlinfo.info.x11.wmwindow;
  48.  
  49.         //Display* xdisplay = qt_xdisplay();
  50.         //Window rootwin = qt_xrootwin();
  51.         //Window winId = this->winId();
  52.  
  53.         sdlinfo.info.x11.lock_func();
  54.         NETWinInfo info(xdisplay, winId, rootwin, 0);
  55.         if (enable) {
  56.             info.setState(NET::DemandsAttention, NET::DemandsAttention);
  57.         } else {
  58.             info.setState(0, NET::DemandsAttention);
  59.         }
  60.         sdlinfo.info.x11.unlock_func();
  61.     }*/
  62.  
  63.     // Xlib-based solution
  64.     SDL_SysWMinfo sdlinfo;
  65.     SDL_VERSION(&sdlinfo.version);
  66.     if (SDL_GetWMInfo(&sdlinfo)) {
  67.         Display* xdisplay = sdlinfo.info.x11.display;
  68.  
  69.         // NO
  70.         //Window rootwin = sdlinfo.info.x11.window;
  71.         //Window winId = sdlinfo.info.x11.wmwindow;
  72.  
  73.         // NO
  74.         //Window rootwin = sdlinfo.info.x11.wmwindow;
  75.         //Window winId = sdlinfo.info.x11.window;
  76.  
  77.         // NO
  78.         //Window rootwin = sdlinfo.info.x11.window;
  79.         //Window winId = sdlinfo.info.x11.window;
  80.  
  81.         // Testing ...
  82.         Window rootwin = sdlinfo.info.x11.wmwindow;
  83.         Window winId = sdlinfo.info.x11.wmwindow;
  84.  
  85.         //Display* xdisplay = qt_xdisplay();
  86.         //Window rootwin = qt_xrootwin();
  87.         //Window winId = this->winId();
  88.  
  89.         sdlinfo.info.x11.lock_func();
  90.         static Atom demandsAttention = XInternAtom(xdisplay, "_NET_WM_STATE_DEMANDS_ATTENTION", true);
  91.         static Atom wmState = XInternAtom(xdisplay, "_NET_WM_STATE", true);
  92.  
  93.         XEvent e;
  94.         e.xclient.type = ClientMessage;
  95.         e.xclient.message_type = wmState;
  96.         e.xclient.display = xdisplay;
  97.         e.xclient.window = winId;
  98.         e.xclient.format = 32;
  99.         e.xclient.data.l[1] = demandsAttention;
  100.         e.xclient.data.l[2] = 0l;
  101.         e.xclient.data.l[3] = 0l;
  102.         e.xclient.data.l[4] = 0l;
  103.  
  104.         if (enable) {
  105.             e.xclient.data.l[0] = 1;
  106.         } else {
  107.             e.xclient.data.l[0] = 0;
  108.         }
  109.         XSendEvent(xdisplay, rootwin, False, (SubstructureRedirectMask | SubstructureNotifyMask), &e);
  110.         sdlinfo.info.x11.unlock_func();
  111.     }
  112. #endif // defined(_WIN32)
  113. }
  114.  
  115. /*void WindowManagerHelper::flashAnimate() {
  116. #ifdef _WIN32
  117.     FlashWindow(winId(), true);
  118. #endif
  119. }*/
  120.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement