cleaning
This commit is contained in:
parent
cade394b91
commit
e13cb99bd0
1 changed files with 359 additions and 352 deletions
457
src/Slit.cc
457
src/Slit.cc
|
@ -1,3 +1,6 @@
|
||||||
|
// Slit.cc for fluxbox
|
||||||
|
// Copyright (c) 2002 Henrik Kinnunen (fluxgen at linuxmail.org)
|
||||||
|
//
|
||||||
// Slit.cc for Blackbox - an X11 Window manager
|
// Slit.cc for Blackbox - an X11 Window manager
|
||||||
// Copyright (c) 1997 - 2000 Brad Hughes (bhughes@tcac.net)
|
// Copyright (c) 1997 - 2000 Brad Hughes (bhughes@tcac.net)
|
||||||
//
|
//
|
||||||
|
@ -19,7 +22,7 @@
|
||||||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||||
// DEALINGS IN THE SOFTWARE.
|
// DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
// $Id: Slit.cc,v 1.23 2002/10/29 15:59:35 fluxgen Exp $
|
// $Id: Slit.cc,v 1.24 2002/11/14 00:23:19 fluxgen Exp $
|
||||||
|
|
||||||
//use GNU extensions
|
//use GNU extensions
|
||||||
#ifndef _GNU_SOURCE
|
#ifndef _GNU_SOURCE
|
||||||
|
@ -32,8 +35,6 @@
|
||||||
|
|
||||||
#ifdef SLIT
|
#ifdef SLIT
|
||||||
|
|
||||||
#include <X11/keysym.h>
|
|
||||||
|
|
||||||
#include "i18n.hh"
|
#include "i18n.hh"
|
||||||
#include "fluxbox.hh"
|
#include "fluxbox.hh"
|
||||||
#include "Image.hh"
|
#include "Image.hh"
|
||||||
|
@ -50,14 +51,18 @@
|
||||||
# include <sys/stat.h>
|
# include <sys/stat.h>
|
||||||
#endif // HAVE_SYS_STAT_H
|
#endif // HAVE_SYS_STAT_H
|
||||||
|
|
||||||
|
#include <X11/keysym.h>
|
||||||
|
|
||||||
// Utility method for extracting name from window
|
// Utility method for extracting name from window
|
||||||
namespace {
|
namespace {
|
||||||
void getWMName(BScreen *screen, Window window, std::string& name) {
|
|
||||||
|
void getWMName(BScreen *screen, Window window, std::string& name) {
|
||||||
name = "";
|
name = "";
|
||||||
|
|
||||||
if (screen != 0 && window != None) {
|
if (screen == 0 || window == None)
|
||||||
Display *display = screen->getBaseDisplay()->getXDisplay();
|
return;
|
||||||
|
|
||||||
|
Display *display = BaseDisplay::getXDisplay();
|
||||||
|
|
||||||
XTextProperty text_prop;
|
XTextProperty text_prop;
|
||||||
char **list;
|
char **list;
|
||||||
|
@ -80,27 +85,30 @@ namespace {
|
||||||
|
|
||||||
} else
|
} else
|
||||||
name = (char *)text_prop.value;
|
name = (char *)text_prop.value;
|
||||||
} else
|
} else { // default name
|
||||||
name = i18n->getMessage(
|
name = i18n->getMessage(
|
||||||
FBNLS::WindowSet, FBNLS::WindowUnnamed,
|
FBNLS::WindowSet, FBNLS::WindowUnnamed,
|
||||||
"Unnamed");
|
"Unnamed");
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
|
// default name
|
||||||
name = i18n->getMessage(
|
name = i18n->getMessage(
|
||||||
FBNLS::WindowSet, FBNLS::WindowUnnamed,
|
FBNLS::WindowSet, FBNLS::WindowUnnamed,
|
||||||
"Unnamed");
|
"Unnamed");
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}; // End anonymous namespace
|
}; // End anonymous namespace
|
||||||
|
|
||||||
Slit::Slit(BScreen *scr):screen(scr), timer(this), slitmenu(*this) {
|
Slit::Slit(BScreen *scr):m_screen(scr), timer(this), slitmenu(*this) {
|
||||||
assert(scr);
|
assert(scr);
|
||||||
fluxbox = Fluxbox::instance();
|
Fluxbox * const fluxbox = Fluxbox::instance();
|
||||||
|
|
||||||
|
on_top = screen()->isSlitOnTop();
|
||||||
|
hidden = do_auto_hide = screen()->doSlitAutoHide();
|
||||||
|
|
||||||
on_top = screen->isSlitOnTop();
|
|
||||||
hidden = do_auto_hide = screen->doSlitAutoHide();
|
|
||||||
|
|
||||||
display = screen->getBaseDisplay()->getXDisplay();
|
|
||||||
frame.window = frame.pixmap = None;
|
frame.window = frame.pixmap = None;
|
||||||
|
|
||||||
|
|
||||||
|
@ -112,8 +120,8 @@ Slit::Slit(BScreen *scr):screen(scr), timer(this), slitmenu(*this) {
|
||||||
CWColormap | CWOverrideRedirect | CWEventMask;
|
CWColormap | CWOverrideRedirect | CWEventMask;
|
||||||
attrib.background_pixmap = None;
|
attrib.background_pixmap = None;
|
||||||
attrib.background_pixel = attrib.border_pixel =
|
attrib.background_pixel = attrib.border_pixel =
|
||||||
screen->getBorderColor()->pixel();
|
screen()->getBorderColor()->pixel();
|
||||||
attrib.colormap = screen->colormap();
|
attrib.colormap = screen()->colormap();
|
||||||
attrib.override_redirect = True;
|
attrib.override_redirect = True;
|
||||||
attrib.event_mask = SubstructureRedirectMask | ButtonPressMask |
|
attrib.event_mask = SubstructureRedirectMask | ButtonPressMask |
|
||||||
EnterWindowMask | LeaveWindowMask;
|
EnterWindowMask | LeaveWindowMask;
|
||||||
|
@ -122,9 +130,9 @@ Slit::Slit(BScreen *scr):screen(scr), timer(this), slitmenu(*this) {
|
||||||
frame.width = frame.height = 1;
|
frame.width = frame.height = 1;
|
||||||
|
|
||||||
frame.window =
|
frame.window =
|
||||||
XCreateWindow(display, screen->getRootWindow(), frame.x, frame.y,
|
XCreateWindow(BaseDisplay::getXDisplay(), screen()->getRootWindow(), frame.x, frame.y,
|
||||||
frame.width, frame.height, screen->getBorderWidth(),
|
frame.width, frame.height, screen()->getBorderWidth(),
|
||||||
screen->getDepth(), InputOutput, screen->getVisual(),
|
screen()->getDepth(), InputOutput, screen()->getVisual(),
|
||||||
create_mask, &attrib);
|
create_mask, &attrib);
|
||||||
fluxbox->saveSlitSearch(frame.window, this);
|
fluxbox->saveSlitSearch(frame.window, this);
|
||||||
|
|
||||||
|
@ -136,15 +144,11 @@ Slit::Slit(BScreen *scr):screen(scr), timer(this), slitmenu(*this) {
|
||||||
|
|
||||||
|
|
||||||
Slit::~Slit() {
|
Slit::~Slit() {
|
||||||
fluxbox->grab();
|
screen()->getImageControl()->removeImage(frame.pixmap);
|
||||||
|
|
||||||
screen->getImageControl()->removeImage(frame.pixmap);
|
Fluxbox::instance()->removeSlitSearch(frame.window);
|
||||||
|
|
||||||
fluxbox->removeSlitSearch(frame.window);
|
XDestroyWindow(BaseDisplay::getXDisplay(), frame.window);
|
||||||
|
|
||||||
XDestroyWindow(display, frame.window);
|
|
||||||
|
|
||||||
fluxbox->ungrab();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -153,12 +157,13 @@ void Slit::addClient(Window w) {
|
||||||
if (w == None)
|
if (w == None)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
fluxbox->grab();
|
if (!Fluxbox::instance()->validateWindow(w))
|
||||||
if (fluxbox->validateWindow(w)) {
|
return;
|
||||||
|
|
||||||
// Look for slot in client list by name
|
// Look for slot in client list by name
|
||||||
SlitClient *client = 0;
|
SlitClient *client = 0;
|
||||||
std::string match_name;
|
std::string match_name;
|
||||||
::getWMName(screen, w, match_name);
|
::getWMName(screen(), w, match_name);
|
||||||
SlitClients::iterator it = clientList.begin();
|
SlitClients::iterator it = clientList.begin();
|
||||||
SlitClients::iterator it_end = clientList.end();
|
SlitClients::iterator it_end = clientList.end();
|
||||||
bool found_match = false;
|
bool found_match = false;
|
||||||
|
@ -168,7 +173,7 @@ void Slit::addClient(Window w) {
|
||||||
// Use the slot if no window is assigned
|
// Use the slot if no window is assigned
|
||||||
if ((*it)->window == None) {
|
if ((*it)->window == None) {
|
||||||
client = (*it);
|
client = (*it);
|
||||||
client->initialize(screen, w);
|
client->initialize(screen(), w);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
// Otherwise keep looking for an unused match or a non-match
|
// Otherwise keep looking for an unused match or a non-match
|
||||||
|
@ -176,25 +181,25 @@ void Slit::addClient(Window w) {
|
||||||
|
|
||||||
} else if (found_match) {
|
} else if (found_match) {
|
||||||
// Insert before first non-match after a previously found match?
|
// Insert before first non-match after a previously found match?
|
||||||
client = new SlitClient(screen, w);
|
client = new SlitClient(screen(), w);
|
||||||
clientList.insert(it, client);
|
clientList.insert(it, client);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Append to client list?
|
// Append to client list?
|
||||||
if (client == 0) {
|
if (client == 0) {
|
||||||
client = new SlitClient(screen, w);
|
client = new SlitClient(screen(), w);
|
||||||
clientList.push_back(client);
|
clientList.push_back(client);
|
||||||
}
|
}
|
||||||
|
Display *disp = BaseDisplay::getXDisplay();
|
||||||
XWMHints *wmhints = XGetWMHints(display, w);
|
XWMHints *wmhints = XGetWMHints(disp, w);
|
||||||
|
|
||||||
if (wmhints) {
|
if (wmhints) {
|
||||||
if ((wmhints->flags & IconWindowHint) &&
|
if ((wmhints->flags & IconWindowHint) &&
|
||||||
(wmhints->icon_window != None)) {
|
(wmhints->icon_window != None)) {
|
||||||
XMoveWindow(display, client->client_window, screen->getWidth() + 10,
|
XMoveWindow(disp, client->client_window, screen()->getWidth() + 10,
|
||||||
screen->getHeight() + 10);
|
screen()->getHeight() + 10);
|
||||||
XMapWindow(display, client->client_window);
|
XMapWindow(disp, client->client_window);
|
||||||
client->icon_window = wmhints->icon_window;
|
client->icon_window = wmhints->icon_window;
|
||||||
client->window = client->icon_window;
|
client->window = client->icon_window;
|
||||||
} else {
|
} else {
|
||||||
|
@ -208,7 +213,7 @@ void Slit::addClient(Window w) {
|
||||||
client->window = client->client_window;
|
client->window = client->client_window;
|
||||||
}
|
}
|
||||||
XWindowAttributes attrib;
|
XWindowAttributes attrib;
|
||||||
#ifdef KDE
|
#ifdef KDE
|
||||||
//Check and see if new client is a KDE dock applet
|
//Check and see if new client is a KDE dock applet
|
||||||
//If so force reasonable size
|
//If so force reasonable size
|
||||||
bool iskdedockapp=false;
|
bool iskdedockapp=false;
|
||||||
|
@ -217,7 +222,7 @@ void Slit::addClient(Window w) {
|
||||||
unsigned long *data = (unsigned long *) 0, uljunk;
|
unsigned long *data = (unsigned long *) 0, uljunk;
|
||||||
|
|
||||||
// Check if KDE v2.x dock applet
|
// Check if KDE v2.x dock applet
|
||||||
if (XGetWindowProperty(fluxbox->getXDisplay(), w,
|
if (XGetWindowProperty(disp, w,
|
||||||
fluxbox->getKWM2DockwindowAtom(), 0l, 1l, False,
|
fluxbox->getKWM2DockwindowAtom(), 0l, 1l, False,
|
||||||
fluxbox->getKWM2DockwindowAtom(),
|
fluxbox->getKWM2DockwindowAtom(),
|
||||||
&ajunk, &ijunk, &uljunk, &uljunk,
|
&ajunk, &ijunk, &uljunk, &uljunk,
|
||||||
|
@ -228,7 +233,7 @@ void Slit::addClient(Window w) {
|
||||||
|
|
||||||
// Check if KDE v1.x dock applet
|
// Check if KDE v1.x dock applet
|
||||||
if (!iskdedockapp) {
|
if (!iskdedockapp) {
|
||||||
if (XGetWindowProperty(fluxbox->getXDisplay(), w,
|
if (XGetWindowProperty(disp, w,
|
||||||
fluxbox->getKWM1DockwindowAtom(), 0l, 1l, False,
|
fluxbox->getKWM1DockwindowAtom(), 0l, 1l, False,
|
||||||
fluxbox->getKWM1DockwindowAtom(),
|
fluxbox->getKWM1DockwindowAtom(),
|
||||||
&ajunk, &ijunk, &uljunk, &uljunk,
|
&ajunk, &ijunk, &uljunk, &uljunk,
|
||||||
|
@ -241,9 +246,9 @@ void Slit::addClient(Window w) {
|
||||||
if (iskdedockapp)
|
if (iskdedockapp)
|
||||||
client->width = client->height = 24;
|
client->width = client->height = 24;
|
||||||
else
|
else
|
||||||
#endif // KDE
|
#endif // KDE
|
||||||
{
|
{
|
||||||
if (XGetWindowAttributes(display, client->window, &attrib)) {
|
if (XGetWindowAttributes(disp, client->window, &attrib)) {
|
||||||
client->width = attrib.width;
|
client->width = attrib.width;
|
||||||
client->height = attrib.height;
|
client->height = attrib.height;
|
||||||
} else {
|
} else {
|
||||||
|
@ -251,35 +256,33 @@ void Slit::addClient(Window w) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
XSetWindowBorderWidth(display, client->window, 0);
|
XSetWindowBorderWidth(disp, client->window, 0);
|
||||||
|
|
||||||
XSelectInput(display, frame.window, NoEventMask);
|
XSelectInput(disp, frame.window, NoEventMask);
|
||||||
XSelectInput(display, client->window, NoEventMask);
|
XSelectInput(disp, client->window, NoEventMask);
|
||||||
|
|
||||||
XReparentWindow(display, client->window, frame.window, 0, 0);
|
XReparentWindow(disp, client->window, frame.window, 0, 0);
|
||||||
XMapRaised(display, client->window);
|
XMapRaised(disp, client->window);
|
||||||
XChangeSaveSet(display, client->window, SetModeInsert);
|
XChangeSaveSet(disp, client->window, SetModeInsert);
|
||||||
|
|
||||||
XSelectInput(display, frame.window, SubstructureRedirectMask |
|
XSelectInput(disp, frame.window, SubstructureRedirectMask |
|
||||||
ButtonPressMask | EnterWindowMask | LeaveWindowMask);
|
ButtonPressMask | EnterWindowMask | LeaveWindowMask);
|
||||||
XSelectInput(display, client->window, StructureNotifyMask |
|
XSelectInput(disp, client->window, StructureNotifyMask |
|
||||||
SubstructureNotifyMask | EnterWindowMask);
|
SubstructureNotifyMask | EnterWindowMask);
|
||||||
XFlush(display);
|
XFlush(disp);
|
||||||
|
|
||||||
fluxbox->saveSlitSearch(client->client_window, this);
|
Fluxbox::instance()->saveSlitSearch(client->client_window, this);
|
||||||
fluxbox->saveSlitSearch(client->icon_window, this);
|
Fluxbox::instance()->saveSlitSearch(client->icon_window, this);
|
||||||
reconfigure();
|
reconfigure();
|
||||||
|
|
||||||
saveClientList();
|
saveClientList();
|
||||||
}
|
|
||||||
|
|
||||||
fluxbox->ungrab();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Slit::removeClient(SlitClient *client, bool remap, bool destroy) {
|
void Slit::removeClient(SlitClient *client, bool remap, bool destroy) {
|
||||||
fluxbox->removeSlitSearch(client->client_window);
|
Fluxbox::instance()->removeSlitSearch(client->client_window);
|
||||||
fluxbox->removeSlitSearch(client->icon_window);
|
Fluxbox::instance()->removeSlitSearch(client->icon_window);
|
||||||
|
|
||||||
// Destructive removal?
|
// Destructive removal?
|
||||||
if (destroy)
|
if (destroy)
|
||||||
|
@ -287,17 +290,18 @@ void Slit::removeClient(SlitClient *client, bool remap, bool destroy) {
|
||||||
else // Clear the window info, but keep around to help future sorting?
|
else // Clear the window info, but keep around to help future sorting?
|
||||||
client->initialize();
|
client->initialize();
|
||||||
|
|
||||||
screen->removeNetizen(client->window);
|
screen()->removeNetizen(client->window);
|
||||||
|
|
||||||
if (remap && fluxbox->validateWindow(client->window)) {
|
if (remap && Fluxbox::instance()->validateWindow(client->window)) {
|
||||||
XSelectInput(display, frame.window, NoEventMask);
|
Display *disp = BaseDisplay::getXDisplay();
|
||||||
XSelectInput(display, client->window, NoEventMask);
|
XSelectInput(disp, frame.window, NoEventMask);
|
||||||
XReparentWindow(display, client->window, screen->getRootWindow(),
|
XSelectInput(disp, client->window, NoEventMask);
|
||||||
|
XReparentWindow(disp, client->window, screen()->getRootWindow(),
|
||||||
client->x, client->y);
|
client->x, client->y);
|
||||||
XChangeSaveSet(display, client->window, SetModeDelete);
|
XChangeSaveSet(disp, client->window, SetModeDelete);
|
||||||
XSelectInput(display, frame.window, SubstructureRedirectMask |
|
XSelectInput(disp, frame.window, SubstructureRedirectMask |
|
||||||
ButtonPressMask | EnterWindowMask | LeaveWindowMask);
|
ButtonPressMask | EnterWindowMask | LeaveWindowMask);
|
||||||
XFlush(display);
|
XFlush(disp);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Destructive removal?
|
// Destructive removal?
|
||||||
|
@ -307,7 +311,6 @@ void Slit::removeClient(SlitClient *client, bool remap, bool destroy) {
|
||||||
|
|
||||||
|
|
||||||
void Slit::removeClient(Window w, bool remap) {
|
void Slit::removeClient(Window w, bool remap) {
|
||||||
fluxbox->grab();
|
|
||||||
|
|
||||||
bool reconf = false;
|
bool reconf = false;
|
||||||
|
|
||||||
|
@ -321,13 +324,13 @@ void Slit::removeClient(Window w, bool remap) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (reconf) reconfigure();
|
if (reconf)
|
||||||
|
reconfigure();
|
||||||
|
|
||||||
fluxbox->ungrab();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Slit::reconfigure(void) {
|
void Slit::reconfigure() {
|
||||||
frame.width = 0;
|
frame.width = 0;
|
||||||
frame.height = 0;
|
frame.height = 0;
|
||||||
|
|
||||||
|
@ -335,7 +338,7 @@ void Slit::reconfigure(void) {
|
||||||
// actually correspond to mapped windows.
|
// actually correspond to mapped windows.
|
||||||
int num_windows = 0;
|
int num_windows = 0;
|
||||||
|
|
||||||
switch (screen->getSlitDirection()) {
|
switch (screen()->getSlitDirection()) {
|
||||||
case VERTICAL:
|
case VERTICAL:
|
||||||
{
|
{
|
||||||
SlitClients::iterator it = clientList.begin();
|
SlitClients::iterator it = clientList.begin();
|
||||||
|
@ -344,7 +347,7 @@ void Slit::reconfigure(void) {
|
||||||
//client created window?
|
//client created window?
|
||||||
if ((*it)->window != None) {
|
if ((*it)->window != None) {
|
||||||
num_windows++;
|
num_windows++;
|
||||||
frame.height += (*it)->height + screen->getBevelWidth();
|
frame.height += (*it)->height + screen()->getBevelWidth();
|
||||||
|
|
||||||
//frame width < client window?
|
//frame width < client window?
|
||||||
if (frame.width < (*it)->width)
|
if (frame.width < (*it)->width)
|
||||||
|
@ -356,12 +359,12 @@ void Slit::reconfigure(void) {
|
||||||
if (frame.width < 1)
|
if (frame.width < 1)
|
||||||
frame.width = 1;
|
frame.width = 1;
|
||||||
else
|
else
|
||||||
frame.width += (screen->getBevelWidth() * 2);
|
frame.width += (screen()->getBevelWidth() * 2);
|
||||||
|
|
||||||
if (frame.height < 1)
|
if (frame.height < 1)
|
||||||
frame.height = 1;
|
frame.height = 1;
|
||||||
else
|
else
|
||||||
frame.height += screen->getBevelWidth();
|
frame.height += screen()->getBevelWidth();
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -373,7 +376,7 @@ void Slit::reconfigure(void) {
|
||||||
//client created window?
|
//client created window?
|
||||||
if ((*it)->window != None) {
|
if ((*it)->window != None) {
|
||||||
num_windows++;
|
num_windows++;
|
||||||
frame.width += (*it)->width + screen->getBevelWidth();
|
frame.width += (*it)->width + screen()->getBevelWidth();
|
||||||
//frame height < client height?
|
//frame height < client height?
|
||||||
if (frame.height < (*it)->height)
|
if (frame.height < (*it)->height)
|
||||||
frame.height = (*it)->height;
|
frame.height = (*it)->height;
|
||||||
|
@ -384,51 +387,52 @@ void Slit::reconfigure(void) {
|
||||||
if (frame.width < 1)
|
if (frame.width < 1)
|
||||||
frame.width = 1;
|
frame.width = 1;
|
||||||
else
|
else
|
||||||
frame.width += screen->getBevelWidth();
|
frame.width += screen()->getBevelWidth();
|
||||||
|
|
||||||
if (frame.height < 1)
|
if (frame.height < 1)
|
||||||
frame.height = 1;
|
frame.height = 1;
|
||||||
else
|
else
|
||||||
frame.height += (screen->getBevelWidth() * 2);
|
frame.height += (screen()->getBevelWidth() * 2);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
reposition();
|
reposition();
|
||||||
|
Display *disp = BaseDisplay::getXDisplay();
|
||||||
|
|
||||||
XSetWindowBorderWidth(display ,frame.window, screen->getBorderWidth());
|
XSetWindowBorderWidth(disp, frame.window, screen()->getBorderWidth());
|
||||||
XSetWindowBorder(display, frame.window,
|
XSetWindowBorder(disp, frame.window,
|
||||||
screen->getBorderColor()->pixel());
|
screen()->getBorderColor()->pixel());
|
||||||
|
|
||||||
//did we actually use slit slots
|
//did we actually use slit slots
|
||||||
if (num_windows == 0)
|
if (num_windows == 0)
|
||||||
XUnmapWindow(display, frame.window);
|
XUnmapWindow(disp, frame.window);
|
||||||
else
|
else
|
||||||
XMapWindow(display, frame.window);
|
XMapWindow(disp, frame.window);
|
||||||
|
|
||||||
Pixmap tmp = frame.pixmap;
|
Pixmap tmp = frame.pixmap;
|
||||||
BImageControl *image_ctrl = screen->getImageControl();
|
BImageControl *image_ctrl = screen()->getImageControl();
|
||||||
const FbTk::Texture *texture = &(screen->getTheme()->getSlitTexture());
|
const FbTk::Texture *texture = &(screen()->getTheme()->getSlitTexture());
|
||||||
if (texture->type() == (FbTk::Texture::FLAT | FbTk::Texture::SOLID)) {
|
if (texture->type() == (FbTk::Texture::FLAT | FbTk::Texture::SOLID)) {
|
||||||
frame.pixmap = None;
|
frame.pixmap = None;
|
||||||
XSetWindowBackground(display, frame.window,
|
XSetWindowBackground(disp, frame.window,
|
||||||
texture->color().pixel());
|
texture->color().pixel());
|
||||||
} else {
|
} else {
|
||||||
frame.pixmap = image_ctrl->renderImage(frame.width, frame.height,
|
frame.pixmap = image_ctrl->renderImage(frame.width, frame.height,
|
||||||
texture);
|
texture);
|
||||||
XSetWindowBackgroundPixmap(display, frame.window, frame.pixmap);
|
XSetWindowBackgroundPixmap(disp, frame.window, frame.pixmap);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tmp)
|
if (tmp)
|
||||||
image_ctrl->removeImage(tmp);
|
image_ctrl->removeImage(tmp);
|
||||||
XClearWindow(display, frame.window);
|
XClearWindow(disp, frame.window);
|
||||||
|
|
||||||
int x, y;
|
int x, y;
|
||||||
|
|
||||||
switch (screen->getSlitDirection()) {
|
switch (screen()->getSlitDirection()) {
|
||||||
case VERTICAL:
|
case VERTICAL:
|
||||||
x = 0;
|
x = 0;
|
||||||
y = screen->getBevelWidth();
|
y = screen()->getBevelWidth();
|
||||||
|
|
||||||
{
|
{
|
||||||
SlitClients::iterator it = clientList.begin();
|
SlitClients::iterator it = clientList.begin();
|
||||||
|
@ -439,10 +443,10 @@ void Slit::reconfigure(void) {
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
x = (frame.width - (*it)->width) / 2;
|
x = (frame.width - (*it)->width) / 2;
|
||||||
|
Display *disp = BaseDisplay::getXDisplay();
|
||||||
XMoveResizeWindow(display, (*it)->window, x, y,
|
XMoveResizeWindow(disp, (*it)->window, x, y,
|
||||||
(*it)->width, (*it)->height);
|
(*it)->width, (*it)->height);
|
||||||
XMapWindow(display, (*it)->window);
|
XMapWindow(disp, (*it)->window);
|
||||||
|
|
||||||
// for ICCCM compliance
|
// for ICCCM compliance
|
||||||
(*it)->x = x;
|
(*it)->x = x;
|
||||||
|
@ -451,7 +455,7 @@ void Slit::reconfigure(void) {
|
||||||
XEvent event;
|
XEvent event;
|
||||||
event.type = ConfigureNotify;
|
event.type = ConfigureNotify;
|
||||||
|
|
||||||
event.xconfigure.display = display;
|
event.xconfigure.display = disp;
|
||||||
event.xconfigure.event = (*it)->window;
|
event.xconfigure.event = (*it)->window;
|
||||||
event.xconfigure.window = (*it)->window;
|
event.xconfigure.window = (*it)->window;
|
||||||
event.xconfigure.x = x;
|
event.xconfigure.x = x;
|
||||||
|
@ -462,17 +466,17 @@ void Slit::reconfigure(void) {
|
||||||
event.xconfigure.above = frame.window;
|
event.xconfigure.above = frame.window;
|
||||||
event.xconfigure.override_redirect = False;
|
event.xconfigure.override_redirect = False;
|
||||||
|
|
||||||
XSendEvent(display, (*it)->window, False, StructureNotifyMask,
|
XSendEvent(disp, (*it)->window, False, StructureNotifyMask,
|
||||||
&event);
|
&event);
|
||||||
|
|
||||||
y += (*it)->height + screen->getBevelWidth();
|
y += (*it)->height + screen()->getBevelWidth();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case HORIZONTAL:
|
case HORIZONTAL:
|
||||||
x = screen->getBevelWidth();
|
x = screen()->getBevelWidth();
|
||||||
y = 0;
|
y = 0;
|
||||||
|
|
||||||
{
|
{
|
||||||
|
@ -485,9 +489,9 @@ void Slit::reconfigure(void) {
|
||||||
|
|
||||||
y = (frame.height - (*it)->height) / 2;
|
y = (frame.height - (*it)->height) / 2;
|
||||||
|
|
||||||
XMoveResizeWindow(display, (*it)->window, x, y,
|
XMoveResizeWindow(disp, (*it)->window, x, y,
|
||||||
(*it)->width, (*it)->height);
|
(*it)->width, (*it)->height);
|
||||||
XMapWindow(display, (*it)->window);
|
XMapWindow(disp, (*it)->window);
|
||||||
|
|
||||||
// for ICCCM compliance
|
// for ICCCM compliance
|
||||||
(*it)->x = x;
|
(*it)->x = x;
|
||||||
|
@ -496,21 +500,21 @@ void Slit::reconfigure(void) {
|
||||||
XEvent event;
|
XEvent event;
|
||||||
event.type = ConfigureNotify;
|
event.type = ConfigureNotify;
|
||||||
|
|
||||||
event.xconfigure.display = display;
|
event.xconfigure.display = disp;
|
||||||
event.xconfigure.event = (*it)->window;
|
event.xconfigure.event = (*it)->window;
|
||||||
event.xconfigure.window = (*it)->window;
|
event.xconfigure.window = (*it)->window;
|
||||||
event.xconfigure.x = frame.x + x + screen->getBorderWidth();
|
event.xconfigure.x = frame.x + x + screen()->getBorderWidth();
|
||||||
event.xconfigure.y = frame.y + y + screen->getBorderWidth();
|
event.xconfigure.y = frame.y + y + screen()->getBorderWidth();
|
||||||
event.xconfigure.width = (*it)->width;
|
event.xconfigure.width = (*it)->width;
|
||||||
event.xconfigure.height = (*it)->height;
|
event.xconfigure.height = (*it)->height;
|
||||||
event.xconfigure.border_width = 0;
|
event.xconfigure.border_width = 0;
|
||||||
event.xconfigure.above = frame.window;
|
event.xconfigure.above = frame.window;
|
||||||
event.xconfigure.override_redirect = False;
|
event.xconfigure.override_redirect = False;
|
||||||
|
|
||||||
XSendEvent(display, (*it)->window, False, StructureNotifyMask,
|
XSendEvent(disp, (*it)->window, False, StructureNotifyMask,
|
||||||
&event);
|
&event);
|
||||||
|
|
||||||
x += (*it)->width + screen->getBevelWidth();
|
x += (*it)->width + screen()->getBevelWidth();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -527,57 +531,57 @@ void Slit::reposition() {
|
||||||
head_w,
|
head_w,
|
||||||
head_h;
|
head_h;
|
||||||
#ifdef XINERAMA
|
#ifdef XINERAMA
|
||||||
if (screen->hasXinerama()) {
|
if (screen()->hasXinerama()) {
|
||||||
unsigned int head = screen->getSlitOnHead();
|
unsigned int head = screen()->getSlitOnHead();
|
||||||
|
|
||||||
head_x = screen->getHeadX(head);
|
head_x = screen()->getHeadX(head);
|
||||||
head_y = screen->getHeadY(head);
|
head_y = screen()->getHeadY(head);
|
||||||
head_w = screen->getHeadWidth(head);
|
head_w = screen()->getHeadWidth(head);
|
||||||
head_h = screen->getHeadHeight(head);
|
head_h = screen()->getHeadHeight(head);
|
||||||
} else {
|
} else {
|
||||||
head_w = screen->getWidth();
|
head_w = screen()->getWidth();
|
||||||
head_h = screen->getHeight();
|
head_h = screen()->getHeight();
|
||||||
}
|
}
|
||||||
#else // !XINERAMA
|
#else // !XINERAMA
|
||||||
head_w = screen->getWidth();
|
head_w = screen()->getWidth();
|
||||||
head_h = screen->getHeight();
|
head_h = screen()->getHeight();
|
||||||
#endif // XINERAMA
|
#endif // XINERAMA
|
||||||
|
|
||||||
// place the slit in the appropriate place
|
// place the slit in the appropriate place
|
||||||
switch (screen->getSlitPlacement()) {
|
switch (screen()->getSlitPlacement()) {
|
||||||
case TOPLEFT:
|
case TOPLEFT:
|
||||||
frame.x = head_x;
|
frame.x = head_x;
|
||||||
frame.y = head_y;
|
frame.y = head_y;
|
||||||
if (screen->getSlitDirection() == VERTICAL) {
|
if (screen()->getSlitDirection() == VERTICAL) {
|
||||||
frame.x_hidden = screen->getBevelWidth() -
|
frame.x_hidden = screen()->getBevelWidth() -
|
||||||
screen->getBorderWidth() - frame.width;
|
screen()->getBorderWidth() - frame.width;
|
||||||
frame.y_hidden = head_y;
|
frame.y_hidden = head_y;
|
||||||
} else {
|
} else {
|
||||||
frame.x_hidden = head_x;
|
frame.x_hidden = head_x;
|
||||||
frame.y_hidden = screen->getBevelWidth() -
|
frame.y_hidden = screen()->getBevelWidth() -
|
||||||
screen->getBorderWidth() - frame.height;
|
screen()->getBorderWidth() - frame.height;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CENTERLEFT:
|
case CENTERLEFT:
|
||||||
frame.x = head_x;
|
frame.x = head_x;
|
||||||
frame.y = head_y + (head_h - frame.height) / 2;
|
frame.y = head_y + (head_h - frame.height) / 2;
|
||||||
frame.x_hidden = head_x + screen->getBevelWidth() -
|
frame.x_hidden = head_x + screen()->getBevelWidth() -
|
||||||
screen->getBorderWidth() - frame.width;
|
screen()->getBorderWidth() - frame.width;
|
||||||
frame.y_hidden = frame.y;
|
frame.y_hidden = frame.y;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case BOTTOMLEFT:
|
case BOTTOMLEFT:
|
||||||
frame.x = head_x;
|
frame.x = head_x;
|
||||||
frame.y = head_h - frame.height - screen->getBorderWidth2x();
|
frame.y = head_h - frame.height - screen()->getBorderWidth2x();
|
||||||
if (screen->getSlitDirection() == VERTICAL) {
|
if (screen()->getSlitDirection() == VERTICAL) {
|
||||||
frame.x_hidden = head_x + screen->getBevelWidth() -
|
frame.x_hidden = head_x + screen()->getBevelWidth() -
|
||||||
screen->getBorderWidth() - frame.width;
|
screen()->getBorderWidth() - frame.width;
|
||||||
frame.y_hidden = frame.y;
|
frame.y_hidden = frame.y;
|
||||||
} else {
|
} else {
|
||||||
frame.x_hidden = head_x;
|
frame.x_hidden = head_x;
|
||||||
frame.y_hidden = head_y + head_h -
|
frame.y_hidden = head_y + head_h -
|
||||||
screen->getBevelWidth() - screen->getBorderWidth();
|
screen()->getBevelWidth() - screen()->getBorderWidth();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -585,85 +589,88 @@ void Slit::reposition() {
|
||||||
frame.x = head_x + ((head_w - frame.width) / 2);
|
frame.x = head_x + ((head_w - frame.width) / 2);
|
||||||
frame.y = head_y;
|
frame.y = head_y;
|
||||||
frame.x_hidden = frame.x;
|
frame.x_hidden = frame.x;
|
||||||
frame.y_hidden = head_y + screen->getBevelWidth() -
|
frame.y_hidden = head_y + screen()->getBevelWidth() -
|
||||||
screen->getBorderWidth() - frame.height;
|
screen()->getBorderWidth() - frame.height;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case BOTTOMCENTER:
|
case BOTTOMCENTER:
|
||||||
frame.x = head_x + ((head_w - frame.width) / 2);
|
frame.x = head_x + ((head_w - frame.width) / 2);
|
||||||
frame.y = head_y + head_h - frame.height - screen->getBorderWidth2x();
|
frame.y = head_y + head_h - frame.height - screen()->getBorderWidth2x();
|
||||||
frame.x_hidden = frame.x;
|
frame.x_hidden = frame.x;
|
||||||
frame.y_hidden = head_y + head_h -
|
frame.y_hidden = head_y + head_h -
|
||||||
screen->getBevelWidth() - screen->getBorderWidth();
|
screen()->getBevelWidth() - screen()->getBorderWidth();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TOPRIGHT:
|
case TOPRIGHT:
|
||||||
frame.x = head_x + head_w - frame.width - screen->getBorderWidth2x();
|
frame.x = head_x + head_w - frame.width - screen()->getBorderWidth2x();
|
||||||
frame.y = head_y;
|
frame.y = head_y;
|
||||||
if (screen->getSlitDirection() == VERTICAL) {
|
if (screen()->getSlitDirection() == VERTICAL) {
|
||||||
frame.x_hidden = head_x + head_w -
|
frame.x_hidden = head_x + head_w -
|
||||||
screen->getBevelWidth() - screen->getBorderWidth();
|
screen()->getBevelWidth() - screen()->getBorderWidth();
|
||||||
frame.y_hidden = head_y;
|
frame.y_hidden = head_y;
|
||||||
} else {
|
} else {
|
||||||
frame.x_hidden = frame.x;
|
frame.x_hidden = frame.x;
|
||||||
frame.y_hidden = head_y + screen->getBevelWidth() -
|
frame.y_hidden = head_y + screen()->getBevelWidth() -
|
||||||
screen->getBorderWidth() - frame.height;
|
screen()->getBorderWidth() - frame.height;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CENTERRIGHT:
|
case CENTERRIGHT:
|
||||||
default:
|
default:
|
||||||
frame.x = head_x + head_w - frame.width - screen->getBorderWidth2x();
|
frame.x = head_x + head_w - frame.width - screen()->getBorderWidth2x();
|
||||||
frame.y = head_y + ((head_h - frame.height) / 2);
|
frame.y = head_y + ((head_h - frame.height) / 2);
|
||||||
frame.x_hidden = head_x + head_w -
|
frame.x_hidden = head_x + head_w -
|
||||||
screen->getBevelWidth() - screen->getBorderWidth();
|
screen()->getBevelWidth() - screen()->getBorderWidth();
|
||||||
frame.y_hidden = frame.y;
|
frame.y_hidden = frame.y;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case BOTTOMRIGHT:
|
case BOTTOMRIGHT:
|
||||||
frame.x = head_x + head_w - frame.width - screen->getBorderWidth2x();
|
frame.x = head_x + head_w - frame.width - screen()->getBorderWidth2x();
|
||||||
frame.y = head_y + head_h - frame.height - screen->getBorderWidth2x();
|
frame.y = head_y + head_h - frame.height - screen()->getBorderWidth2x();
|
||||||
if (screen->getSlitDirection() == VERTICAL) {
|
if (screen()->getSlitDirection() == VERTICAL) {
|
||||||
frame.x_hidden = head_x + head_w -
|
frame.x_hidden = head_x + head_w -
|
||||||
screen->getBevelWidth() - screen->getBorderWidth();
|
screen()->getBevelWidth() - screen()->getBorderWidth();
|
||||||
frame.y_hidden = frame.y;
|
frame.y_hidden = frame.y;
|
||||||
} else {
|
} else {
|
||||||
frame.x_hidden = frame.x;
|
frame.x_hidden = frame.x;
|
||||||
frame.y_hidden = head_y + head_h -
|
frame.y_hidden = head_y + head_h -
|
||||||
screen->getBevelWidth() - screen->getBorderWidth();
|
screen()->getBevelWidth() - screen()->getBorderWidth();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
const Toolbar * const tbar = screen->getToolbar();
|
const Toolbar * const tbar = screen()->getToolbar();
|
||||||
int sw = frame.width + screen->getBorderWidth2x(),
|
int sw = frame.width + screen()->getBorderWidth2x(),
|
||||||
sh = frame.height + screen->getBorderWidth2x(),
|
sh = frame.height + screen()->getBorderWidth2x(),
|
||||||
tw = tbar->width() + screen->getBorderWidth(),
|
tw = tbar->width() + screen()->getBorderWidth(),
|
||||||
th = tbar->height() + screen->getBorderWidth();
|
th = tbar->height() + screen()->getBorderWidth();
|
||||||
|
|
||||||
if (tbar->x() < frame.x + sw && tbar->x() + tw > frame.x &&
|
if (tbar->x() < frame.x + sw && tbar->x() + tw > frame.x &&
|
||||||
tbar->y() < frame.y + sh && tbar->y() + th > frame.y) {
|
tbar->y() < frame.y + sh && tbar->y() + th > frame.y) {
|
||||||
if (frame.y < th) {
|
if (frame.y < th) {
|
||||||
frame.y += tbar->getExposedHeight();
|
frame.y += tbar->getExposedHeight();
|
||||||
if (screen->getSlitDirection() == VERTICAL)
|
if (screen()->getSlitDirection() == VERTICAL)
|
||||||
frame.y_hidden += tbar->getExposedHeight();
|
frame.y_hidden += tbar->getExposedHeight();
|
||||||
else
|
else
|
||||||
frame.y_hidden = frame.y;
|
frame.y_hidden = frame.y;
|
||||||
} else {
|
} else {
|
||||||
frame.y -= tbar->getExposedHeight();
|
frame.y -= tbar->getExposedHeight();
|
||||||
if (screen->getSlitDirection() == VERTICAL)
|
if (screen()->getSlitDirection() == VERTICAL)
|
||||||
frame.y_hidden -= tbar->getExposedHeight();
|
frame.y_hidden -= tbar->getExposedHeight();
|
||||||
else
|
else
|
||||||
frame.y_hidden = frame.y;
|
frame.y_hidden = frame.y;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hidden)
|
Display *disp = BaseDisplay::getXDisplay();
|
||||||
XMoveResizeWindow(display, frame.window, frame.x_hidden,
|
|
||||||
|
if (hidden) {
|
||||||
|
XMoveResizeWindow(disp, frame.window, frame.x_hidden,
|
||||||
frame.y_hidden, frame.width, frame.height);
|
frame.y_hidden, frame.width, frame.height);
|
||||||
else
|
} else {
|
||||||
XMoveResizeWindow(display, frame.window, frame.x,
|
XMoveResizeWindow(disp, frame.window, frame.x,
|
||||||
frame.y, frame.width, frame.height);
|
frame.y, frame.width, frame.height);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -675,14 +682,15 @@ void Slit::shutdown() {
|
||||||
|
|
||||||
|
|
||||||
void Slit::buttonPressEvent(XButtonEvent *e) {
|
void Slit::buttonPressEvent(XButtonEvent *e) {
|
||||||
if (e->window != frame.window) return;
|
if (e->window != frame.window)
|
||||||
|
return;
|
||||||
|
|
||||||
if (e->button == Button1 && (! on_top)) {
|
if (e->button == Button1 && (! on_top)) {
|
||||||
Workspace::Stack st;
|
Workspace::Stack st;
|
||||||
st.push_back(frame.window);
|
st.push_back(frame.window);
|
||||||
screen->raiseWindows(st);
|
screen()->raiseWindows(st);
|
||||||
} else if (e->button == Button2 && (! on_top)) {
|
} else if (e->button == Button2 && (! on_top)) {
|
||||||
XLowerWindow(display, frame.window);
|
XLowerWindow(BaseDisplay::getXDisplay(), frame.window);
|
||||||
} else if (e->button == Button3) {
|
} else if (e->button == Button3) {
|
||||||
if (! slitmenu.isVisible()) {
|
if (! slitmenu.isVisible()) {
|
||||||
int x = e->x_root - (slitmenu.width() / 2),
|
int x = e->x_root - (slitmenu.width() / 2),
|
||||||
|
@ -690,13 +698,13 @@ void Slit::buttonPressEvent(XButtonEvent *e) {
|
||||||
|
|
||||||
if (x < 0)
|
if (x < 0)
|
||||||
x = 0;
|
x = 0;
|
||||||
else if (x + slitmenu.width() > screen->getWidth())
|
else if (x + slitmenu.width() > screen()->getWidth())
|
||||||
x = screen->getWidth() - slitmenu.width();
|
x = screen()->getWidth() - slitmenu.width();
|
||||||
|
|
||||||
if (y < 0)
|
if (y < 0)
|
||||||
y = 0;
|
y = 0;
|
||||||
else if (y + slitmenu.height() > screen->getHeight())
|
else if (y + slitmenu.height() > screen()->getHeight())
|
||||||
y = screen->getHeight() - slitmenu.height();
|
y = screen()->getHeight() - slitmenu.height();
|
||||||
|
|
||||||
slitmenu.move(x, y);
|
slitmenu.move(x, y);
|
||||||
slitmenu.show();
|
slitmenu.show();
|
||||||
|
@ -735,9 +743,10 @@ void Slit::leaveNotifyEvent(XCrossingEvent *) {
|
||||||
|
|
||||||
|
|
||||||
void Slit::configureRequestEvent(XConfigureRequestEvent *e) {
|
void Slit::configureRequestEvent(XConfigureRequestEvent *e) {
|
||||||
fluxbox->grab();
|
|
||||||
|
|
||||||
if (fluxbox->validateWindow(e->window)) {
|
if (!Fluxbox::instance()->validateWindow(e->window))
|
||||||
|
return;
|
||||||
|
|
||||||
bool reconf = false;
|
bool reconf = false;
|
||||||
XWindowChanges xwc;
|
XWindowChanges xwc;
|
||||||
|
|
||||||
|
@ -749,43 +758,43 @@ void Slit::configureRequestEvent(XConfigureRequestEvent *e) {
|
||||||
xwc.sibling = e->above;
|
xwc.sibling = e->above;
|
||||||
xwc.stack_mode = e->detail;
|
xwc.stack_mode = e->detail;
|
||||||
|
|
||||||
XConfigureWindow(display, e->window, e->value_mask, &xwc);
|
XConfigureWindow(BaseDisplay::getXDisplay(), e->window, e->value_mask, &xwc);
|
||||||
|
|
||||||
SlitClients::iterator it = clientList.begin();
|
SlitClients::iterator it = clientList.begin();
|
||||||
SlitClients::iterator it_end = clientList.end();
|
SlitClients::iterator it_end = clientList.end();
|
||||||
for (; it != it_end; ++it)
|
for (; it != it_end; ++it) {
|
||||||
if ((*it)->window == e->window)
|
if ((*it)->window == e->window) {
|
||||||
if ((*it)->width != ((unsigned) e->width) ||
|
if ((*it)->width != ((unsigned) e->width) ||
|
||||||
(*it)->height != ((unsigned) e->height)) {
|
(*it)->height != ((unsigned) e->height)) {
|
||||||
(*it)->width = (unsigned) e->width;
|
(*it)->width = (unsigned) e->width;
|
||||||
(*it)->height = (unsigned) e->height;
|
(*it)->height = (unsigned) e->height;
|
||||||
|
|
||||||
reconf = true;
|
reconf = true; //requires reconfiguration
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if (reconf) reconfigure();
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fluxbox->ungrab();
|
if (reconf)
|
||||||
|
reconfigure();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Slit::timeout() {
|
void Slit::timeout() {
|
||||||
hidden = ! hidden;
|
hidden = ! hidden;
|
||||||
|
Display *disp = BaseDisplay::getXDisplay();
|
||||||
if (hidden)
|
if (hidden)
|
||||||
XMoveWindow(display, frame.window, frame.x_hidden, frame.y_hidden);
|
XMoveWindow(disp, frame.window, frame.x_hidden, frame.y_hidden);
|
||||||
else
|
else
|
||||||
XMoveWindow(display, frame.window, frame.x, frame.y);
|
XMoveWindow(disp, frame.window, frame.x, frame.y);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Slit::loadClientList() {
|
void Slit::loadClientList() {
|
||||||
const std::string &filename = fluxbox->getSlitlistFilename();
|
const std::string &filename = Fluxbox::instance()->getSlitlistFilename();
|
||||||
struct stat buf;
|
struct stat buf;
|
||||||
if (!stat(filename.c_str(), &buf)) {
|
if (!stat(filename.c_str(), &buf)) {
|
||||||
std::ifstream file(fluxbox->getSlitlistFilename().c_str());
|
std::ifstream file(Fluxbox::instance()->getSlitlistFilename().c_str());
|
||||||
std::string name;
|
std::string name;
|
||||||
while (! file.eof()) {
|
while (! file.eof()) {
|
||||||
name = "";
|
name = "";
|
||||||
|
@ -798,8 +807,8 @@ void Slit::loadClientList() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Slit::saveClientList(void) {
|
void Slit::saveClientList() {
|
||||||
const std::string &filename = fluxbox->getSlitlistFilename();
|
const std::string &filename = Fluxbox::instance()->getSlitlistFilename();
|
||||||
std::ofstream file(filename.c_str());
|
std::ofstream file(filename.c_str());
|
||||||
SlitClients::iterator it = clientList.begin();
|
SlitClients::iterator it = clientList.begin();
|
||||||
SlitClients::iterator it_end = clientList.end();
|
SlitClients::iterator it_end = clientList.end();
|
||||||
|
@ -813,10 +822,28 @@ void Slit::saveClientList(void) {
|
||||||
prevName = name;
|
prevName = name;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
void Slit::setOnTop(bool val) {
|
||||||
|
on_top = val;
|
||||||
|
screen()->saveSlitOnTop(val);
|
||||||
|
|
||||||
|
if (isOnTop())
|
||||||
|
screen()->raiseWindows(Workspace::Stack());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
Slitmenu::Slitmenu(Slit &sl) : Basemenu(sl.screen),
|
void Slit::setAutoHide(bool val) {
|
||||||
slit(sl) {
|
do_auto_hide = val;
|
||||||
|
screen()->saveSlitAutoHide(val);
|
||||||
|
}
|
||||||
|
|
||||||
|
Slitmenu::Slitmenu(Slit &sl) : Basemenu(sl.screen()),
|
||||||
|
slit(sl),
|
||||||
|
#ifdef XINERAMA
|
||||||
|
m_headmenu(0),
|
||||||
|
#endif // XINERAMA
|
||||||
|
m_placementmenu(*this),
|
||||||
|
m_directionmenu(*this) {
|
||||||
|
|
||||||
I18n *i18n = I18n::instance();
|
I18n *i18n = I18n::instance();
|
||||||
using namespace FBNLS;
|
using namespace FBNLS;
|
||||||
|
@ -825,27 +852,25 @@ slit(sl) {
|
||||||
"Slit"));
|
"Slit"));
|
||||||
setInternalMenu();
|
setInternalMenu();
|
||||||
|
|
||||||
directionmenu = new Directionmenu(this);
|
|
||||||
placementmenu = new Placementmenu(this);
|
|
||||||
#ifdef XINERAMA
|
#ifdef XINERAMA
|
||||||
if (screen()->hasXinerama()) { // only create if we need
|
if (screen()->hasXinerama()) { // only create if we need
|
||||||
headmenu = new Headmenu(this);
|
m_headmenu.reset(new Headmenu(this));
|
||||||
}
|
}
|
||||||
#endif // XINERAMA
|
#endif // XINERAMA
|
||||||
|
|
||||||
insert(i18n->getMessage(
|
insert(i18n->getMessage(
|
||||||
CommonSet, CommonDirectionTitle,
|
CommonSet, CommonDirectionTitle,
|
||||||
"Direction"),
|
"Direction"),
|
||||||
directionmenu);
|
&m_directionmenu);
|
||||||
insert(i18n->getMessage(
|
insert(i18n->getMessage(
|
||||||
CommonSet, CommonPlacementTitle,
|
CommonSet, CommonPlacementTitle,
|
||||||
"Placement"),
|
"Placement"),
|
||||||
placementmenu);
|
&m_placementmenu);
|
||||||
|
|
||||||
#ifdef XINERAMA
|
#ifdef XINERAMA
|
||||||
//TODO: NLS
|
|
||||||
if (screen()->hasXinerama()) {
|
if (screen()->hasXinerama()) {
|
||||||
insert(i18n->getMessage(0, 0, "Place on Head"), headmenu);
|
insert(i18n->getMessage(0, 0, "Place on Head"), m_headmenu.get());
|
||||||
}
|
}
|
||||||
#endif // XINERAMA
|
#endif // XINERAMA
|
||||||
|
|
||||||
|
@ -865,13 +890,7 @@ slit(sl) {
|
||||||
|
|
||||||
|
|
||||||
Slitmenu::~Slitmenu() {
|
Slitmenu::~Slitmenu() {
|
||||||
delete directionmenu;
|
|
||||||
delete placementmenu;
|
|
||||||
#ifdef XINERAMA
|
|
||||||
if (screen()->hasXinerama()) {
|
|
||||||
delete headmenu;
|
|
||||||
}
|
|
||||||
#endif // XINERAMA
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -881,28 +900,17 @@ void Slitmenu::itemSelected(int button, unsigned int index) {
|
||||||
if (! item) return;
|
if (! item) return;
|
||||||
|
|
||||||
switch (item->function()) {
|
switch (item->function()) {
|
||||||
case 1: // always on top
|
case 1:
|
||||||
{
|
// toggle on top
|
||||||
bool change = ((slit.isOnTop()) ? false : true);
|
slit.setOnTop(slit.isOnTop() ? false : true);
|
||||||
slit.on_top = change;
|
setItemSelected(2, slit.isOnTop());
|
||||||
screen()->saveSlitOnTop(change);
|
|
||||||
setItemSelected(2, change);
|
|
||||||
|
|
||||||
if (slit.isOnTop())
|
|
||||||
screen()->raiseWindows(Workspace::Stack());
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
|
|
||||||
case 2: // auto hide
|
case 2: // auto hide
|
||||||
{
|
slit.setAutoHide(slit.doAutoHide() ? false : true);
|
||||||
bool change = (slit.doAutoHide() ? false : true);
|
setItemSelected(3, slit.doAutoHide());
|
||||||
slit.do_auto_hide = change;
|
|
||||||
screen()->saveSlitAutoHide(change);
|
|
||||||
setItemSelected(3, change);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
//save the new configuration
|
//save the new configuration
|
||||||
Fluxbox::instance()->save_rc();
|
Fluxbox::instance()->save_rc();
|
||||||
update();
|
update();
|
||||||
|
@ -910,19 +918,19 @@ void Slitmenu::itemSelected(int button, unsigned int index) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Slitmenu::internal_hide(void) {
|
void Slitmenu::internal_hide() {
|
||||||
Basemenu::internal_hide();
|
Basemenu::internal_hide();
|
||||||
if (slit.doAutoHide())
|
if (slit.doAutoHide())
|
||||||
slit.timeout();
|
slit.timeout();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Slitmenu::reconfigure(void) {
|
void Slitmenu::reconfigure() {
|
||||||
directionmenu->reconfigure();
|
m_directionmenu.reconfigure();
|
||||||
placementmenu->reconfigure();
|
m_placementmenu.reconfigure();
|
||||||
#ifdef XINERAMA
|
#ifdef XINERAMA
|
||||||
if (screen()->hasXinerama()) {
|
if (m_headmenu.get() != 0) {
|
||||||
headmenu->reconfigure();
|
m_headmenu->reconfigure();
|
||||||
}
|
}
|
||||||
#endif // XINERAMA
|
#endif // XINERAMA
|
||||||
setItemSelected(2, slit.isOnTop());
|
setItemSelected(2, slit.isOnTop());
|
||||||
|
@ -932,7 +940,7 @@ void Slitmenu::reconfigure(void) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Slitmenu::Directionmenu::Directionmenu(Slitmenu *sm) : Basemenu(sm->screen()),
|
Slitmenu::Directionmenu::Directionmenu(Slitmenu &sm) : Basemenu(sm.screen()),
|
||||||
slitmenu(sm) {
|
slitmenu(sm) {
|
||||||
|
|
||||||
I18n *i18n = I18n::instance();
|
I18n *i18n = I18n::instance();
|
||||||
|
@ -963,7 +971,8 @@ slitmenu(sm) {
|
||||||
void Slitmenu::Directionmenu::itemSelected(int button, unsigned int index) {
|
void Slitmenu::Directionmenu::itemSelected(int button, unsigned int index) {
|
||||||
if (button == 1) {
|
if (button == 1) {
|
||||||
BasemenuItem *item = find(index);
|
BasemenuItem *item = find(index);
|
||||||
if (! item) return;
|
if (item == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
screen()->saveSlitDirection(item->function());
|
screen()->saveSlitDirection(item->function());
|
||||||
|
|
||||||
|
@ -976,12 +985,12 @@ void Slitmenu::Directionmenu::itemSelected(int button, unsigned int index) {
|
||||||
}
|
}
|
||||||
Fluxbox::instance()->save_rc();
|
Fluxbox::instance()->save_rc();
|
||||||
hide();
|
hide();
|
||||||
slitmenu->slit.reconfigure();
|
slitmenu.slit.reconfigure();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Slitmenu::Placementmenu::Placementmenu(Slitmenu *sm) : Basemenu(sm->screen()),
|
Slitmenu::Placementmenu::Placementmenu(Slitmenu &sm) : Basemenu(sm.screen()),
|
||||||
slitmenu(sm) {
|
slitmenu(sm) {
|
||||||
|
|
||||||
I18n *i18n = I18n::instance();
|
I18n *i18n = I18n::instance();
|
||||||
|
@ -1038,7 +1047,7 @@ void Slitmenu::Placementmenu::itemSelected(int button, unsigned int index) {
|
||||||
if (item->function()) {
|
if (item->function()) {
|
||||||
screen()->saveSlitPlacement(item->function());
|
screen()->saveSlitPlacement(item->function());
|
||||||
hide();
|
hide();
|
||||||
slitmenu->slit.reconfigure();
|
slitmenu.slit.reconfigure();
|
||||||
Fluxbox::instance()->save_rc();
|
Fluxbox::instance()->save_rc();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1080,14 +1089,12 @@ void Slitmenu::Headmenu::itemSelected(int button, unsigned int index) {
|
||||||
|
|
||||||
#endif // XINERAMA
|
#endif // XINERAMA
|
||||||
|
|
||||||
Slit::SlitClient::SlitClient(const char *name)
|
Slit::SlitClient::SlitClient(const char *name) {
|
||||||
{
|
|
||||||
initialize();
|
initialize();
|
||||||
match_name = name;
|
match_name = (name == 0 ? "" : name);
|
||||||
}
|
}
|
||||||
|
|
||||||
Slit::SlitClient::SlitClient(BScreen *screen, Window w)
|
Slit::SlitClient::SlitClient(BScreen *screen, Window w) {
|
||||||
{
|
|
||||||
initialize(screen, w);
|
initialize(screen, w);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue