void OnTopPlugin::getState() { #ifdef USE_KDE QWidget *main = getMainWindow(); if (main == NULL) return; setOnTop(KWin::info(main->winId()).state & NET::StaysOnTop); #endif }
OnTopPlugin::~OnTopPlugin() { Event eCmd(EventCommandRemove, (void*)CmdOnTop); eCmd.process(); setOnTop(false); setState(); free_data(onTopData, &data); }
void *OnTopPlugin::processEvent(Event *e) { if (e->type() == EventInit) setState(); if (e->type() == EventCommandExec){ CommandDef *cmd = (CommandDef*)(e->param()); if (cmd->id == CmdOnTop){ setOnTop(!getOnTop()); setState(); return cmd; } } if (e->type() == EventCheckState){ CommandDef *cmd = (CommandDef*)(e->param()); if (cmd->id == CmdOnTop){ getState(); cmd->flags &= ~COMMAND_CHECKED; if (getOnTop()) cmd->flags |= COMMAND_CHECKED; return cmd; } } return NULL; }
void WindowManager::toggleOnTop() { VarBoolImpl *pVarOnTop = (VarBoolImpl*)m_cVarOnTop.get(); setOnTop( !pVarOnTop->get() ); }
void *OnTopPlugin::processEvent(Event *e) { if (e->type() == EventInit) setState(); if (e->type() == EventCommandExec){ CommandDef *cmd = (CommandDef*)(e->param()); if (cmd->id == CmdOnTop){ setOnTop(!getOnTop()); setState(); return cmd; } } if (e->type() == EventCheckState){ CommandDef *cmd = (CommandDef*)(e->param()); if (cmd->id == CmdOnTop){ getState(); cmd->flags &= ~COMMAND_CHECKED; if (getOnTop()) cmd->flags |= COMMAND_CHECKED; return cmd; } } if (e->type() == EventOnTop){ QWidget *main = getMainWindow(); if (main == NULL) return NULL; #ifdef WIN32 HWND hState = HWND_NOTOPMOST; if (getOnTop()) hState = HWND_TOPMOST; if (e->param()) hState = HWND_BOTTOM; SetWindowPos(main->winId(), hState, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE); #endif } if (e->type() == EventInTaskManager){ QWidget *main = getMainWindow(); if (main == NULL) return NULL; #ifdef WIN32 if (IsWindowUnicode(main->winId())){ if (e->param() && getInTask()){ SetWindowLongW(main->winId(), GWL_EXSTYLE, (GetWindowLongW(main->winId(), GWL_EXSTYLE) | WS_EX_APPWINDOW) & (~WS_EX_TOOLWINDOW)); }else{ DWORD exStyle = GetWindowLongW(main->winId(), GWL_EXSTYLE); if ((exStyle & WS_EX_TOOLWINDOW) == 0){ SetWindowLongW(main->winId(), GWL_EXSTYLE, (exStyle & ~WS_EX_APPWINDOW) | WS_EX_TOOLWINDOW); QPoint p = main->pos(); QSize s = main->size(); main->resize(s.width() + 1, s.height()); main->resize(s.width(), s.height()); main->move(p); } } }else{ if (e->param() && getInTask()){ SetWindowLongA(main->winId(), GWL_EXSTYLE, (GetWindowLongA(main->winId(), GWL_EXSTYLE) | WS_EX_APPWINDOW) & (~WS_EX_TOOLWINDOW)); }else{ DWORD exStyle = GetWindowLongA(main->winId(), GWL_EXSTYLE); if ((exStyle & WS_EX_TOOLWINDOW) == 0){ SetWindowLongA(main->winId(), GWL_EXSTYLE, (exStyle & ~WS_EX_APPWINDOW) | WS_EX_TOOLWINDOW); QSize s = main->size(); main->resize(s.width() + 1, s.height()); main->resize(s.width(), s.height()); } } } #endif } return NULL; }