This week only. Pastebin PRO Accounts Christmas Special! Don't miss out!Want more features on Pastebin? Sign Up, it's FREE!
Guest

Untitled

By: a guest on Oct 1st, 2011  |  syntax: C++  |  size: 3.32 KB  |  views: 63  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  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.  
clone this paste RAW Paste Data