void Client::showhide()
{
- if (!_iconic &&
- (_desktop == openbox->screen(_screen)->desktop() ||
- _desktop == 0xffffffff))
- frame->show();
- else
- frame->hide();
+ bool show;
+ Screen *s = openbox->screen(_screen);
+
+ if (_iconic) show = false;
+ else if (!(_desktop == s->desktop() ||
+ _desktop == 0xffffffff)) show = false;
+ else if (normal() && s->showingDesktop()) show = false;
+ else show = true;
+
+ if (show) frame->show();
+ else frame->hide();
}
#ifdef DEBUG
printf("net_active_window for 0x%lx\n", _window);
#endif
+ if (openbox->screen(_screen)->showingDesktop())
+ openbox->screen(_screen)->showDesktop(false);
if (_iconic)
iconify(false);
+ else if (!frame->visible()) // if its not visible for other reasons, then
+ return; // don't mess with it
if (_shaded)
shade(false);
focus();
openbox->screen(_screen)->raiseWindow(this);
} else if (e.message_type == otk::Property::atoms.openbox_active_window) {
+ if (openbox->screen(_screen)->showingDesktop())
+ openbox->screen(_screen)->showDesktop(false);
if (_iconic)
iconify(false);
+ else if (!frame->visible()) // if its not visible for other reasons, then
+ return; // don't mess with it
if (e.data.l[0] && _shaded)
shade(false);
focus();
void Client::remaximize()
{
- printf("REMAXIMIZE!!!!!!!!!!!!!!!!!!!\n");
int dir;
if (_max_horz && _max_vert)
dir = 0;
{
if (_iconic == iconic) return; // nothing to do
+#ifdef DEBUG
+ printf("%sconifying window: 0x%lx\n", (iconic ? "I" : "Uni"), _window);
+#endif
+
_iconic = iconic;
if (_iconic) {