65
57
CWColormap | CWOverrideRedirect | CWEventMask;
66
58
attrib.background_pixmap = None;
67
59
attrib.background_pixel = attrib.border_pixel =
68
screen->getBorderColor()->getPixel();
60
screen->getBorderColor()->pixel();
69
61
attrib.colormap = screen->getColormap();
70
62
attrib.override_redirect = True;
71
63
attrib.event_mask = SubstructureRedirectMask | ButtonPressMask |
72
64
EnterWindowMask | LeaveWindowMask;
74
frame.x = frame.y = 0;
75
frame.width = frame.height = 1;
66
frame.rect.setSize(1, 1);
78
XCreateWindow(display, screen->getRootWindow(), frame.x, frame.y,
79
frame.width, frame.height, screen->getBorderWidth(),
80
screen->getDepth(), InputOutput, screen->getVisual(),
81
create_mask, &attrib);
69
XCreateWindow(display, screen->getRootWindow(),
70
frame.rect.x(), frame.rect.y(),
71
frame.rect.width(), frame.rect.height(),
72
screen->getBorderWidth(), screen->getDepth(), InputOutput,
73
screen->getVisual(), create_mask, &attrib);
82
74
blackbox->saveSlitSearch(frame.window, this);
76
screen->addStrut(&strut);
91
if (timer->isTiming()) timer->stop();
87
screen->removeStrut(&strut);
88
screen->updateAvailableArea();
97
90
screen->getImageControl()->removeImage(frame.pixmap);
99
92
blackbox->removeSlitSearch(frame.window);
101
94
XDestroyWindow(display, frame.window);
107
98
void Slit::addClient(Window w) {
110
if (blackbox->validateWindow(w)) {
111
SlitClient *client = new SlitClient;
112
client->client_window = w;
114
XWMHints *wmhints = XGetWMHints(display, w);
117
if ((wmhints->flags & IconWindowHint) &&
118
(wmhints->icon_window != None)) {
119
XMoveWindow(display, client->client_window, screen->getWidth() + 10,
120
screen->getHeight() + 10);
121
XMapWindow(display, client->client_window);
123
client->icon_window = wmhints->icon_window;
124
client->window = client->icon_window;
126
client->icon_window = None;
127
client->window = client->client_window;
99
if (! blackbox->validateWindow(w))
102
SlitClient *client = new SlitClient;
103
client->client_window = w;
105
XWMHints *wmhints = XGetWMHints(display, w);
108
if ((wmhints->flags & IconWindowHint) &&
109
(wmhints->icon_window != None)) {
110
// some dock apps use separate windows, we need to hide these
111
XMoveWindow(display, client->client_window, screen->getWidth() + 10,
112
screen->getHeight() + 10);
113
XMapWindow(display, client->client_window);
115
client->icon_window = wmhints->icon_window;
116
client->window = client->icon_window;
132
118
client->icon_window = None;
133
119
client->window = client->client_window;
136
XWindowAttributes attrib;
137
if (XGetWindowAttributes(display, client->window, &attrib)) {
138
client->width = attrib.width;
139
client->height = attrib.height;
141
client->width = client->height = 64;
124
client->icon_window = None;
125
client->window = client->client_window;
128
XWindowAttributes attrib;
129
if (XGetWindowAttributes(display, client->window, &attrib)) {
130
client->rect.setSize(attrib.width, attrib.height);
132
client->rect.setSize(64, 64);
137
if (XGetWMProtocols(display, client->window, &proto, &num_return)) {
138
for (int i = 0; i < num_return; ++i) {
139
if (proto[i] == blackbox->getBlackboxStructureMessagesAtom()) {
140
screen->addNetizen(new Netizen(screen, client->window));
144
XSetWindowBorderWidth(display, client->window, 0);
146
XSelectInput(display, frame.window, NoEventMask);
147
XSelectInput(display, client->window, NoEventMask);
149
XReparentWindow(display, client->window, frame.window, 0, 0);
150
XMapRaised(display, client->window);
151
XChangeSaveSet(display, client->window, SetModeInsert);
153
XSelectInput(display, frame.window, SubstructureRedirectMask |
154
ButtonPressMask | EnterWindowMask | LeaveWindowMask);
155
XSelectInput(display, client->window, StructureNotifyMask |
156
SubstructureNotifyMask | EnterWindowMask);
159
clientList->insert(client);
161
blackbox->saveSlitSearch(client->client_window, this);
162
blackbox->saveSlitSearch(client->icon_window, this);
145
XSetWindowBorderWidth(display, client->window, 0);
147
XGrabServer(display);
148
XSelectInput(display, frame.window, NoEventMask);
149
XSelectInput(display, client->window, NoEventMask);
150
XReparentWindow(display, client->window, frame.window, 0, 0);
151
XMapRaised(display, client->window);
152
XChangeSaveSet(display, client->window, SetModeInsert);
153
XSelectInput(display, frame.window, SubstructureRedirectMask |
154
ButtonPressMask | EnterWindowMask | LeaveWindowMask);
155
XSelectInput(display, client->window, StructureNotifyMask |
156
SubstructureNotifyMask | EnterWindowMask);
158
XUngrabServer(display);
160
clientList.push_back(client);
162
blackbox->saveSlitSearch(client->client_window, this);
163
blackbox->saveSlitSearch(client->icon_window, this);
170
void Slit::removeClient(SlitClient *client, Bool remap) {
168
void Slit::removeClient(SlitClient *client, bool remap) {
171
169
blackbox->removeSlitSearch(client->client_window);
172
170
blackbox->removeSlitSearch(client->icon_window);
173
clientList->remove(client);
171
clientList.remove(client);
175
173
screen->removeNetizen(client->window);
177
175
if (remap && blackbox->validateWindow(client->window)) {
176
XGrabServer(display);
178
177
XSelectInput(display, frame.window, NoEventMask);
179
178
XSelectInput(display, client->window, NoEventMask);
180
179
XReparentWindow(display, client->window, screen->getRootWindow(),
181
client->x, client->y);
180
client->rect.x(), client->rect.y());
182
181
XChangeSaveSet(display, client->window, SetModeDelete);
183
182
XSelectInput(display, frame.window, SubstructureRedirectMask |
184
ButtonPressMask | EnterWindowMask | LeaveWindowMask);
183
ButtonPressMask | EnterWindowMask | LeaveWindowMask);
184
XUngrabServer(display);
193
void Slit::removeClient(Window w, Bool remap) {
198
LinkedListIterator<SlitClient> it(clientList);
199
for (SlitClient *tmp = it.current(); tmp; it++, tmp = it.current()) {
200
if (tmp->window == w) {
201
removeClient(tmp, remap);
208
if (reconf) reconfigure();
192
struct SlitClientMatch {
194
SlitClientMatch(Window w): window(w) {}
195
inline bool operator()(const Slit::SlitClient* client) const {
196
return (client->window == window);
201
void Slit::removeClient(Window w, bool remap) {
202
SlitClientList::iterator it = clientList.begin();
203
const SlitClientList::iterator end = clientList.end();
205
it = std::find_if(it, end, SlitClientMatch(w));
207
removeClient(*it, remap);
214
213
void Slit::reconfigure(void) {
217
LinkedListIterator<SlitClient> it(clientList);
214
SlitClientList::iterator it = clientList.begin();
215
const SlitClientList::iterator end = clientList.end();
218
216
SlitClient *client;
218
unsigned int width = 0, height = 0;
220
220
switch (screen->getSlitDirection()) {
222
for (client = it.current(); client; it++, client = it.current()) {
223
frame.height += client->height + screen->getBevelWidth();
222
for (; it != end; ++it) {
224
height += client->rect.height() + screen->getBevelWidth();
225
if (frame.width < client->width)
226
frame.width = client->width;
226
if (width < client->rect.width())
227
width = client->rect.width();
232
frame.width += (screen->getBevelWidth() * 2);
233
width += (screen->getBevelWidth() * 2);
234
if (frame.height < 1)
237
frame.height += screen->getBevelWidth();
238
height += screen->getBevelWidth();
242
for (client = it.current(); client; it++, client = it.current()) {
243
frame.width += client->width + screen->getBevelWidth();
243
for (; it != end; ++it) {
245
width += client->rect.width() + screen->getBevelWidth();
245
if (frame.height < client->height)
246
frame.height = client->height;
247
if (height < client->rect.height())
248
height = client->rect.height();
252
frame.width += screen->getBevelWidth();
254
width += screen->getBevelWidth();
254
if (frame.height < 1)
257
frame.height += (screen->getBevelWidth() * 2);
259
height += (screen->getBevelWidth() * 2);
263
frame.rect.setSize(width, height);
264
267
XSetWindowBorderWidth(display ,frame.window, screen->getBorderWidth());
265
268
XSetWindowBorder(display, frame.window,
266
screen->getBorderColor()->getPixel());
269
screen->getBorderColor()->pixel());
268
if (! clientList->count())
271
if (clientList.empty())
269
272
XUnmapWindow(display, frame.window);
271
274
XMapWindow(display, frame.window);
273
Pixmap tmp = frame.pixmap;
274
BImageControl *image_ctrl = screen->getImageControl();
275
276
BTexture *texture = &(screen->getToolbarStyle()->toolbar);
276
if (texture->getTexture() == (BImage_Flat | BImage_Solid)) {
278
XSetWindowBackground(display, frame.window,
279
texture->getColor()->getPixel());
281
frame.pixmap = image_ctrl->renderImage(frame.width, frame.height,
277
frame.pixmap = texture->render(frame.rect.width(), frame.rect.height(),
280
XSetWindowBackground(display, frame.window, texture->color().pixel());
283
282
XSetWindowBackgroundPixmap(display, frame.window, frame.pixmap);
285
if (tmp) image_ctrl->removeImage(tmp);
286
284
XClearWindow(display, frame.window);
286
it = clientList.begin();
291
290
switch (screen->getSlitDirection()) {
294
293
y = screen->getBevelWidth();
296
for (client = it.current(); client; it++, client = it.current()) {
297
x = (frame.width - client->width) / 2;
295
for (; it != end; ++it) {
297
x = (frame.rect.width() - client->rect.width()) / 2;
299
299
XMoveResizeWindow(display, client->window, x, y,
300
client->width, client->height);
300
client->rect.width(), client->rect.height());
301
301
XMapWindow(display, client->window);
303
303
// for ICCCM compliance
304
client->rect.setPos(x, y);
308
307
event.type = ConfigureNotify;
367
void Slit::updateStrut(void) {
368
strut.top = strut.bottom = strut.left = strut.right = 0;
370
if (! clientList.empty()) {
371
// when not hidden both borders are in use, when hidden only one is
372
unsigned int border_width = screen->getBorderWidth();
376
switch (screen->getSlitDirection()) {
378
switch (screen->getSlitPlacement()) {
380
strut.top = getExposedHeight() + border_width;
383
strut.bottom = getExposedHeight() + border_width;
388
strut.left = getExposedWidth() + border_width;
393
strut.right = getExposedWidth() + border_width;
398
switch (screen->getSlitPlacement()) {
402
strut.top = frame.rect.top() + getExposedHeight() + border_width;
409
pos = frame.y_hidden;
411
pos = frame.rect.y();
412
strut.bottom = (screen->getRect().bottom() - pos);
415
strut.left = getExposedWidth() + border_width;
418
strut.right = getExposedWidth() + border_width;
425
// update area with new Strut info
426
screen->updateAvailableArea();
369
430
void Slit::reposition(void) {
370
// place the slit in the appropriate place
371
433
switch (screen->getSlitPlacement()) {
375
if (screen->getSlitDirection() == Vertical) {
376
frame.x_hidden = screen->getBevelWidth() - screen->getBorderWidth()
381
frame.y_hidden = screen->getBevelWidth() - screen->getBorderWidth()
388
frame.y = (screen->getHeight() - frame.height) / 2;
389
438
frame.x_hidden = screen->getBevelWidth() - screen->getBorderWidth()
391
frame.y_hidden = frame.y;
396
frame.y = screen->getHeight() - frame.height
397
- (screen->getBorderWidth() * 2);
398
if (screen->getSlitDirection() == Vertical) {
399
frame.x_hidden = screen->getBevelWidth() - screen->getBorderWidth()
401
frame.y_hidden = frame.y;
404
frame.y_hidden = screen->getHeight() - screen->getBevelWidth()
405
- screen->getBorderWidth();
439
- frame.rect.width();
441
if (screen->getSlitPlacement() == TopLeft)
443
else if (screen->getSlitPlacement() == CenterLeft)
444
y = (screen->getHeight() - frame.rect.height()) / 2;
446
y = screen->getHeight() - frame.rect.height()
447
- (screen->getBorderWidth() * 2);
410
frame.x = (screen->getWidth() - frame.width) / 2;
412
frame.x_hidden = frame.x;
413
frame.y_hidden = screen->getBevelWidth() - screen->getBorderWidth()
417
452
case BottomCenter:
418
frame.x = (screen->getWidth() - frame.width) / 2;
419
frame.y = screen->getHeight() - frame.height
420
- (screen->getBorderWidth() * 2);
421
frame.x_hidden = frame.x;
422
frame.y_hidden = screen->getHeight() - screen->getBevelWidth()
423
- screen->getBorderWidth();
453
x = (screen->getWidth() - frame.rect.width()) / 2;
456
if (screen->getSlitPlacement() == TopCenter)
459
y = screen->getHeight() - frame.rect.height()
460
- (screen->getBorderWidth() * 2);
427
frame.x = screen->getWidth() - frame.width
428
- (screen->getBorderWidth() * 2);
430
if (screen->getSlitDirection() == Vertical) {
431
frame.x_hidden = screen->getWidth() - screen->getBevelWidth()
432
- screen->getBorderWidth();
435
frame.x_hidden = frame.x;
436
frame.y_hidden = screen->getBevelWidth() - screen->getBorderWidth()
441
465
case CenterRight:
443
frame.x = screen->getWidth() - frame.width
467
x = screen->getWidth() - frame.rect.width()
444
468
- (screen->getBorderWidth() * 2);
445
frame.y = (screen->getHeight() - frame.height) / 2;
446
469
frame.x_hidden = screen->getWidth() - screen->getBevelWidth()
447
- screen->getBorderWidth();
448
frame.y_hidden = frame.y;
452
frame.x = screen->getWidth() - frame.width
453
- (screen->getBorderWidth() * 2);
454
frame.y = screen->getHeight() - frame.height
455
- (screen->getBorderWidth() * 2);
456
if (screen->getSlitDirection() == Vertical) {
457
frame.x_hidden = screen->getWidth() - screen->getBevelWidth()
458
- screen->getBorderWidth();
459
frame.y_hidden = frame.y;
461
frame.x_hidden = frame.x;
462
frame.y_hidden = screen->getHeight() - screen->getBevelWidth()
463
- screen->getBorderWidth();
468
Toolbar *tbar = screen->getToolbar();
469
int sw = frame.width + (screen->getBorderWidth() * 2),
470
sh = frame.height + (screen->getBorderWidth() * 2),
471
tw = tbar->getWidth() + screen->getBorderWidth(),
472
th = tbar->getHeight() + screen->getBorderWidth();
474
if (tbar->getX() < frame.x + sw && tbar->getX() + tw > frame.x &&
475
tbar->getY() < frame.y + sh && tbar->getY() + th > frame.y) {
477
frame.y += tbar->getExposedHeight();
478
if (screen->getSlitDirection() == Vertical)
479
frame.y_hidden += tbar->getExposedHeight();
481
frame.y_hidden = frame.y;
483
frame.y -= tbar->getExposedHeight();
484
if (screen->getSlitDirection() == Vertical)
485
frame.y_hidden -= tbar->getExposedHeight();
487
frame.y_hidden = frame.y;
470
- screen->getBorderWidth();
472
if (screen->getSlitPlacement() == TopRight)
474
else if (screen->getSlitPlacement() == CenterRight)
475
y = (screen->getHeight() - frame.rect.height()) / 2;
477
y = screen->getHeight() - frame.rect.height()
478
- (screen->getBorderWidth() * 2);
482
frame.rect.setPos(x, y);
484
// we have to add the border to the rect as it is not accounted for
485
Rect tbar_rect = screen->getToolbar()->getRect();
486
tbar_rect.setSize(tbar_rect.width() + (screen->getBorderWidth() * 2),
487
tbar_rect.height() + (screen->getBorderWidth() * 2));
488
Rect slit_rect = frame.rect;
489
slit_rect.setSize(slit_rect.width() + (screen->getBorderWidth() * 2),
490
slit_rect.height() + (screen->getBorderWidth() * 2));
492
if (slit_rect.intersects(tbar_rect)) {
493
int delta = screen->getToolbar()->getExposedHeight() +
494
screen->getBorderWidth();
495
if (frame.rect.bottom() <= tbar_rect.bottom())
498
frame.rect.setY(frame.rect.y() + delta);
501
if (screen->getSlitPlacement() == TopCenter)
502
frame.y_hidden = 0 - frame.rect.height() + screen->getBorderWidth()
503
+ screen->getBevelWidth();
504
else if (screen->getSlitPlacement() == BottomCenter)
505
frame.y_hidden = screen->getHeight() - screen->getBorderWidth()
506
- screen->getBevelWidth();
508
frame.y_hidden = frame.rect.y();
492
XMoveResizeWindow(display, frame.window, frame.x_hidden,
493
frame.y_hidden, frame.width, frame.height);
513
XMoveResizeWindow(display, frame.window,
514
frame.x_hidden, frame.y_hidden,
515
frame.rect.width(), frame.rect.height());
495
XMoveResizeWindow(display, frame.window, frame.x,
496
frame.y, frame.width, frame.height);
517
XMoveResizeWindow(display, frame.window,
518
frame.rect.x(), frame.rect.y(),
519
frame.rect.width(), frame.rect.height());
500
523
void Slit::shutdown(void) {
501
while (clientList->count())
502
removeClient(clientList->first());
524
while (! clientList.empty())
525
removeClient(clientList.front());
506
void Slit::buttonPressEvent(XButtonEvent *e) {
529
void Slit::buttonPressEvent(const XButtonEvent *e) {
507
530
if (e->window != frame.window) return;
509
532
if (e->button == Button1 && (! on_top)) {
564
void Slit::configureRequestEvent(XConfigureRequestEvent *e) {
567
if (blackbox->validateWindow(e->window)) {
573
xwc.width = e->width;
574
xwc.height = e->height;
575
xwc.border_width = 0;
576
xwc.sibling = e->above;
577
xwc.stack_mode = e->detail;
579
XConfigureWindow(display, e->window, e->value_mask, &xwc);
581
LinkedListIterator<SlitClient> it(clientList);
582
SlitClient *client = it.current();
583
for (; client; it++, client = it.current())
584
if (client->window == e->window)
585
if (client->width != ((unsigned) e->width) ||
586
client->height != ((unsigned) e->height)) {
587
client->width = (unsigned) e->width;
588
client->height = (unsigned) e->height;
595
if (reconf) reconfigure();
587
void Slit::configureRequestEvent(const XConfigureRequestEvent *e) {
588
if (! blackbox->validateWindow(e->window))
595
xwc.width = e->width;
596
xwc.height = e->height;
597
xwc.border_width = 0;
598
xwc.sibling = e->above;
599
xwc.stack_mode = e->detail;
601
XConfigureWindow(display, e->window, e->value_mask, &xwc);
603
SlitClientList::iterator it = clientList.begin();
604
const SlitClientList::iterator end = clientList.end();
605
for (; it != end; ++it) {
606
SlitClient *client = *it;
607
if (client->window == e->window &&
608
(static_cast<signed>(client->rect.width()) != e->width ||
609
static_cast<signed>(client->rect.height()) != e->height)) {
610
client->rect.setSize(e->width, e->height);
606
622
XMoveWindow(display, frame.window, frame.x_hidden, frame.y_hidden);
608
XMoveWindow(display, frame.window, frame.x, frame.y);
624
XMoveWindow(display, frame.window, frame.rect.x(), frame.rect.y());
628
void Slit::toggleAutoHide(void) {
629
do_auto_hide = (do_auto_hide) ? False : True;
633
if (do_auto_hide == False && hidden) {
634
// force the slit to be visible
635
if (timer->isTiming()) timer->stop();
641
void Slit::unmapNotifyEvent(const XUnmapEvent *e) {
642
removeClient(e->window);
612
646
Slitmenu::Slitmenu(Slit *sl) : Basemenu(sl->screen) {
615
setLabel(i18n->getMessage(SlitSet, SlitSlitTitle, "Slit"));
649
setLabel(i18n(SlitSet, SlitSlitTitle, "Slit"));
616
650
setInternalMenu();
618
652
directionmenu = new Directionmenu(this);
619
653
placementmenu = new Placementmenu(this);
621
insert(i18n->getMessage(CommonSet, CommonDirectionTitle, "Direction"),
623
insert(i18n->getMessage(CommonSet, CommonPlacementTitle, "Placement"),
625
insert(i18n->getMessage(CommonSet, CommonAlwaysOnTop, "Always on top"), 1);
626
insert(i18n->getMessage(CommonSet, CommonAutoHide, "Auto hide"), 2);
655
insert(i18n(CommonSet, CommonDirectionTitle, "Direction"),
657
insert(i18n(CommonSet, CommonPlacementTitle, "Placement"),
659
insert(i18n(CommonSet, CommonAlwaysOnTop, "Always on top"), 1);
660
insert(i18n(CommonSet, CommonAutoHide, "Auto hide"), 2);
684
716
Slitmenu::Directionmenu::Directionmenu(Slitmenu *sm)
685
717
: Basemenu(sm->slit->screen) {
688
setLabel(i18n->getMessage(SlitSet, SlitSlitDirection, "Slit Direction"));
719
setLabel(i18n(SlitSet, SlitSlitDirection, "Slit Direction"));
689
720
setInternalMenu();
691
insert(i18n->getMessage(CommonSet, CommonDirectionHoriz, "Horizontal"),
693
insert(i18n->getMessage(CommonSet, CommonDirectionVert, "Vertical"),
722
insert(i18n(CommonSet, CommonDirectionHoriz, "Horizontal"),
724
insert(i18n(CommonSet, CommonDirectionVert, "Vertical"),
698
if (sm->slit->screen->getSlitDirection() == Slit::Horizontal)
729
if (getScreen()->getSlitDirection() == Slit::Horizontal)
699
730
setItemSelected(0, True);
701
732
setItemSelected(1, True);
705
void Slitmenu::Directionmenu::itemSelected(int button, int index) {
736
void Slitmenu::Directionmenu::itemSelected(int button, unsigned int index) {
709
740
BasemenuItem *item = find(index);
710
741
if (! item) return;
712
slitmenu->slit->screen->saveSlitDirection(item->function());
743
getScreen()->saveSlitDirection(item->function());
714
745
if (item->function() == Slit::Horizontal) {
715
746
setItemSelected(0, True);
723
slitmenu->slit->reconfigure();
754
getScreen()->getSlit()->reconfigure();
727
758
Slitmenu::Placementmenu::Placementmenu(Slitmenu *sm)
728
759
: Basemenu(sm->slit->screen) {
731
setLabel(i18n->getMessage(SlitSet, SlitSlitPlacement, "Slit Placement"));
761
setLabel(i18n(SlitSet, SlitSlitPlacement, "Slit Placement"));
732
762
setMinimumSublevels(3);
733
763
setInternalMenu();
735
insert(i18n->getMessage(CommonSet, CommonPlacementTopLeft, "Top Left"),
737
insert(i18n->getMessage(CommonSet, CommonPlacementCenterLeft, "Center Left"),
739
insert(i18n->getMessage(CommonSet, CommonPlacementBottomLeft, "Bottom Left"),
741
insert(i18n->getMessage(CommonSet, CommonPlacementTopCenter, "Top Center"),
765
insert(i18n(CommonSet, CommonPlacementTopLeft, "Top Left"),
767
insert(i18n(CommonSet, CommonPlacementCenterLeft, "Center Left"),
769
insert(i18n(CommonSet, CommonPlacementBottomLeft, "Bottom Left"),
771
insert(i18n(CommonSet, CommonPlacementTopCenter, "Top Center"),
744
insert(i18n->getMessage(CommonSet, CommonPlacementBottomCenter,
747
insert(i18n->getMessage(CommonSet, CommonPlacementTopRight, "Top Right"),
749
insert(i18n->getMessage(CommonSet, CommonPlacementCenterRight,
752
insert(i18n->getMessage(CommonSet, CommonPlacementBottomRight,
774
insert(i18n(CommonSet, CommonPlacementBottomCenter, "Bottom Center"),
776
insert(i18n(CommonSet, CommonPlacementTopRight, "Top Right"),
778
insert(i18n(CommonSet, CommonPlacementCenterRight, "Center Right"),
780
insert(i18n(CommonSet, CommonPlacementBottomRight, "Bottom Right"),
760
void Slitmenu::Placementmenu::itemSelected(int button, int index) {
787
void Slitmenu::Placementmenu::itemSelected(int button, unsigned int index) {
764
791
BasemenuItem *item = find(index);
765
792
if (! (item && item->function())) return;
767
slitmenu->slit->screen->saveSlitPlacement(item->function());
794
getScreen()->saveSlitPlacement(item->function());
769
slitmenu->slit->reconfigure();
796
getScreen()->getSlit()->reconfigure();