memset(label, 0, 1024);
while (fgets(line, 1024, menu_file) && ! feof(menu_file)) {
- if (line[0] != '#') {
- int i, key = 0, index = -1, len = strlen(line);
-
- for (i = 0; i < len; i++) {
- if (line[i] == '[') index = 0;
- else if (line[i] == ']') break;
- else if (line[i] != ' ')
- if (index++ >= 0)
- key += tolower(line[i]);
- }
+ if (line[0] == '#')
+ continue;
- if (key == 517) { // [begin]
- index = -1;
- for (i = index; i < len; i++) {
- if (line[i] == '(') index = 0;
- else if (line[i] == ')') break;
- else if (index++ >= 0) {
- if (line[i] == '\\' && i < len - 1) i++;
- label[index - 1] = line[i];
- }
- }
+ int i, key = 0, index = -1, len = strlen(line);
- if (index == -1) index = 0;
- label[index] = '\0';
+ for (i = 0; i < len; i++) {
+ if (line[i] == '[') index = 0;
+ else if (line[i] == ']') break;
+ else if (line[i] != ' ')
+ if (index++ >= 0)
+ key += tolower(line[i]);
+ }
- rootmenu->setLabel(label);
- defaultMenu = parseMenuFile(menu_file, rootmenu);
- if (! defaultMenu)
- blackbox->addMenuTimestamp(menu_filename);
- break;
+ if (key == 517) { // [begin]
+ index = -1;
+ for (i = index; i < len; i++) {
+ if (line[i] == '(') index = 0;
+ else if (line[i] == ')') break;
+ else if (index++ >= 0) {
+ if (line[i] == '\\' && i < len - 1) i++;
+ label[index - 1] = line[i];
+ }
}
+
+ if (index == -1) index = 0;
+ label[index] = '\0';
+
+ rootmenu->setLabel(label);
+ defaultMenu = parseMenuFile(menu_file, rootmenu);
+ if (! defaultMenu)
+ blackbox->addMenuTimestamp(menu_filename);
+ break;
}
}
}
}
+static
+void string_within(char begin, char end, const char *input, size_t length,
+ char *output) {
+ bool parse = False;
+ size_t index = 0;
+
+ for (size_t i = 0; i < length; ++i) {
+ if (input[i] == begin) {
+ parse = True;
+ } else if (input[i] == end) {
+ break;
+ } else if (parse) {
+ if (input[i] == '\\' && i < length - 1) i++;
+ output[index++] = input[i];
+ }
+ }
+
+ if (parse)
+ output[index] = '\0';
+ else
+ output[0] = '\0';
+}
+
+
bool BScreen::parseMenuFile(FILE *file, Rootmenu *menu) {
- char line[1024], label[1024], command[1024];
+ char line[1024], keyword[1024], label[1024], command[1024];
+ bool done = False;
- while (! feof(file)) {
+ while (! (done || feof(file))) {
memset(line, 0, 1024);
memset(label, 0, 1024);
memset(command, 0, 1024);
- if (fgets(line, 1024, file)) {
- if (line[0] != '#') {
- int i, key = 0, parse = 0, index = -1, line_length = strlen(line);
+ if (! fgets(line, 1024, file))
+ continue;
- // determine the keyword
- for (i = 0; i < line_length; i++) {
- if (line[i] == '[') parse = 1;
- else if (line[i] == ']') break;
- else if (line[i] != ' ')
- if (parse)
- key += tolower(line[i]);
- }
+ if (line[0] == '#') // comment, skip it
+ continue;
- // get the label enclosed in ()'s
- parse = 0;
-
- for (i = 0; i < line_length; i++) {
- if (line[i] == '(') {
- index = 0;
- parse = 1;
- } else if (line[i] == ')') break;
- else if (index++ >= 0) {
- if (line[i] == '\\' && i < line_length - 1) i++;
- label[index - 1] = line[i];
- }
- }
+ size_t line_length = strlen(line);
+ unsigned int key = 0;
- if (parse) {
- label[index] = '\0';
- } else {
- label[0] = '\0';
- }
+ // get the keyword enclosed in []'s
+ string_within('[', ']', line, line_length, keyword);
- // get the command enclosed in {}'s
- parse = 0;
- index = -1;
- for (i = 0; i < line_length; i++) {
- if (line[i] == '{') {
- index = 0;
- parse = 1;
- } else if (line[i] == '}') break;
- else if (index++ >= 0) {
- if (line[i] == '\\' && i < line_length - 1) i++;
- command[index - 1] = line[i];
- }
- }
+ if (keyword[0] == '\0') { // no keyword, no menu entry
+ continue;
+ } else {
+ size_t len = strlen(keyword);
+ for (size_t i = 0; i < len; ++i) {
+ if (keyword[i] != ' ')
+ key += tolower(keyword[i]);
+ }
+ }
- if (parse) {
- command[index] = '\0';
- } else {
- command[0] = '\0';
- }
+ // get the label enclosed in ()'s
+ string_within('(', ')', line, line_length, label);
- switch (key) {
- case 311: // end
- return ((menu->getCount() == 0) ? True : False);
+ // get the command enclosed in {}'s
+ string_within('{', '}', line, line_length, command);
- break;
+ switch (key) {
+ case 311: // end
+ done = True;
- case 333: // nop
- if (! *label)
- label[0] = '\0';
- menu->insert(label);
+ break;
- break;
+ case 333: // nop
+ if (! *label)
+ label[0] = '\0';
+ menu->insert(label);
- case 421: // exec
- if (! (*label && *command)) {
- fprintf(stderr, i18n(ScreenSet, ScreenEXECError,
- "BScreen::parseMenuFile: [exec] error, "
- "no menu label and/or command defined\n"));
- continue;
- }
+ break;
- menu->insert(label, BScreen::Execute, command);
+ case 421: // exec
+ if (! (*label && *command)) {
+ fprintf(stderr, i18n(ScreenSet, ScreenEXECError,
+ "BScreen::parseMenuFile: [exec] error, "
+ "no menu label and/or command defined\n"));
+ continue;
+ }
- break;
+ menu->insert(label, BScreen::Execute, command);
- case 442: // exit
- if (! *label) {
- fprintf(stderr, i18n(ScreenSet, ScreenEXITError,
- "BScreen::parseMenuFile: [exit] error, "
- "no menu label defined\n"));
- continue;
- }
+ break;
- menu->insert(label, BScreen::Exit);
+ case 442: // exit
+ if (! *label) {
+ fprintf(stderr, i18n(ScreenSet, ScreenEXITError,
+ "BScreen::parseMenuFile: [exit] error, "
+ "no menu label defined\n"));
+ continue;
+ }
- break;
+ menu->insert(label, BScreen::Exit);
- case 561: { // style
- if (! (*label && *command)) {
- fprintf(stderr,
- i18n(ScreenSet, ScreenSTYLEError,
- "BScreen::parseMenuFile: [style] error, "
- "no menu label and/or filename defined\n"));
- continue;
- }
+ break;
- string style = expandTilde(command);
+ case 561: { // style
+ if (! (*label && *command)) {
+ fprintf(stderr,
+ i18n(ScreenSet, ScreenSTYLEError,
+ "BScreen::parseMenuFile: [style] error, "
+ "no menu label and/or filename defined\n"));
+ continue;
+ }
- menu->insert(label, BScreen::SetStyle, style.c_str());
- }
- break;
+ string style = expandTilde(command);
- case 630: // config
- if (! *label) {
- fprintf(stderr, i18n(ScreenSet, ScreenCONFIGError,
- "BScreen::parseMenufile: [config] error, "
- "no label defined"));
- continue;
- }
+ menu->insert(label, BScreen::SetStyle, style.c_str());
+ }
+ break;
- menu->insert(label, configmenu);
+ case 630: // config
+ if (! *label) {
+ fprintf(stderr, i18n(ScreenSet, ScreenCONFIGError,
+ "BScreen::parseMenufile: [config] error, "
+ "no label defined"));
+ continue;
+ }
- break;
+ menu->insert(label, configmenu);
- case 740: // include
- {
- if (! *label) {
- fprintf(stderr, i18n(ScreenSet, ScreenINCLUDEError,
- "BScreen::parseMenuFile: [include] error, "
- "no filename defined\n"));
- continue;
- }
+ break;
- string newfile = expandTilde(label);
- FILE *submenufile = fopen(newfile.c_str(), "r");
-
- if (submenufile) {
- struct stat buf;
- if (fstat(fileno(submenufile), &buf) ||
- ! S_ISREG(buf.st_mode)) {
- fprintf(stderr,
- i18n(ScreenSet, ScreenINCLUDEErrorReg,
- "BScreen::parseMenuFile: [include] error: "
- "'%s' is not a regular file\n"), newfile.c_str());
- break;
- }
-
- if (! feof(submenufile)) {
- if (! parseMenuFile(submenufile, menu))
- blackbox->addMenuTimestamp(newfile);
-
- fclose(submenufile);
- }
- } else {
- perror(newfile.c_str());
- }
- }
+ case 740: { // include
+ if (! *label) {
+ fprintf(stderr, i18n(ScreenSet, ScreenINCLUDEError,
+ "BScreen::parseMenuFile: [include] error, "
+ "no filename defined\n"));
+ continue;
+ }
- break;
+ string newfile = expandTilde(label);
+ FILE *submenufile = fopen(newfile.c_str(), "r");
- case 767: // submenu
- {
- if (! *label) {
- fprintf(stderr, i18n(ScreenSet, ScreenSUBMENUError,
- "BScreen::parseMenuFile: [submenu] error, "
- "no menu label defined\n"));
- continue;
- }
+ if (! submenufile) {
+ perror(newfile.c_str());
+ continue;
+ }
- Rootmenu *submenu = new Rootmenu(this);
+ struct stat buf;
+ if (fstat(fileno(submenufile), &buf) ||
+ ! S_ISREG(buf.st_mode)) {
+ fprintf(stderr,
+ i18n(ScreenSet, ScreenINCLUDEErrorReg,
+ "BScreen::parseMenuFile: [include] error: "
+ "'%s' is not a regular file\n"), newfile.c_str());
+ break;
+ }
- if (*command)
- submenu->setLabel(command);
- else
- submenu->setLabel(label);
+ if (! feof(submenufile)) {
+ if (! parseMenuFile(submenufile, menu))
+ blackbox->addMenuTimestamp(newfile);
- parseMenuFile(file, submenu);
- submenu->update();
- menu->insert(label, submenu);
- rootmenuList.push_back(submenu);
- }
+ fclose(submenufile);
+ }
+ }
- break;
+ break;
- case 773: // restart
- {
- if (! *label) {
- fprintf(stderr, i18n(ScreenSet, ScreenRESTARTError,
- "BScreen::parseMenuFile: [restart] error, "
- "no menu label defined\n"));
- continue;
- }
+ case 767: { // submenu
+ if (! *label) {
+ fprintf(stderr, i18n(ScreenSet, ScreenSUBMENUError,
+ "BScreen::parseMenuFile: [submenu] error, "
+ "no menu label defined\n"));
+ continue;
+ }
- if (*command)
- menu->insert(label, BScreen::RestartOther, command);
- else
- menu->insert(label, BScreen::Restart);
- }
+ Rootmenu *submenu = new Rootmenu(this);
- break;
+ if (*command)
+ submenu->setLabel(command);
+ else
+ submenu->setLabel(label);
- case 845: // reconfig
- {
- if (! *label) {
- fprintf(stderr,
- i18n(ScreenSet, ScreenRECONFIGError,
- "BScreen::parseMenuFile: [reconfig] error, "
- "no menu label defined\n"));
- continue;
- }
+ parseMenuFile(file, submenu);
+ submenu->update();
+ menu->insert(label, submenu);
+ rootmenuList.push_back(submenu);
+ }
- menu->insert(label, BScreen::Reconfigure);
- }
+ break;
- break;
+ case 773: { // restart
+ if (! *label) {
+ fprintf(stderr, i18n(ScreenSet, ScreenRESTARTError,
+ "BScreen::parseMenuFile: [restart] error, "
+ "no menu label defined\n"));
+ continue;
+ }
- case 995: // stylesdir
- case 1113: // stylesmenu
- {
- bool newmenu = ((key == 1113) ? True : False);
-
- if (! *label || (! *command && newmenu)) {
- fprintf(stderr,
- i18n(ScreenSet, ScreenSTYLESDIRError,
- "BScreen::parseMenuFile: [stylesdir/stylesmenu]"
- " error, no directory defined\n"));
- continue;
- }
+ if (*command)
+ menu->insert(label, BScreen::RestartOther, command);
+ else
+ menu->insert(label, BScreen::Restart);
+ }
- char *directory = ((newmenu) ? command : label);
+ break;
- string stylesdir = expandTilde(directory);
+ case 845: { // reconfig
+ if (! *label) {
+ fprintf(stderr,
+ i18n(ScreenSet, ScreenRECONFIGError,
+ "BScreen::parseMenuFile: [reconfig] error, "
+ "no menu label defined\n"));
+ continue;
+ }
- struct stat statbuf;
+ menu->insert(label, BScreen::Reconfigure);
+ }
- if (! stat(stylesdir.c_str(), &statbuf)) {
- if (S_ISDIR(statbuf.st_mode)) {
- Rootmenu *stylesmenu;
+ break;
- if (newmenu)
- stylesmenu = new Rootmenu(this);
- else
- stylesmenu = menu;
+ case 995: // stylesdir
+ case 1113: { // stylesmenu
+ bool newmenu = ((key == 1113) ? True : False);
- DIR *d = opendir(stylesdir.c_str());
- struct dirent *p;
- std::vector<string> ls;
+ if (! *label || (! *command && newmenu)) {
+ fprintf(stderr,
+ i18n(ScreenSet, ScreenSTYLESDIRError,
+ "BScreen::parseMenuFile: [stylesdir/stylesmenu]"
+ " error, no directory defined\n"));
+ continue;
+ }
- while((p = readdir(d)))
- ls.push_back(p->d_name);
+ char *directory = ((newmenu) ? command : label);
- closedir(d);
+ string stylesdir = expandTilde(directory);
- std::sort(ls.begin(), ls.end());
+ struct stat statbuf;
- std::vector<string>::iterator it = ls.begin(),
- end = ls.end();
- for (; it != end; ++it) {
- const string& fname = *it;
+ if (stat(stylesdir.c_str(), &statbuf) == -1) {
+ fprintf(stderr,
+ i18n(ScreenSet, ScreenSTYLESDIRErrorNoExist,
+ "BScreen::parseMenuFile: [stylesdir/stylesmenu]"
+ " error, %s does not exist\n"), stylesdir.c_str());
+ continue;
+ }
+ if (! S_ISDIR(statbuf.st_mode)) {
+ fprintf(stderr,
+ i18n(ScreenSet, ScreenSTYLESDIRErrorNotDir,
+ "BScreen::parseMenuFile:"
+ " [stylesdir/stylesmenu] error, %s is not a"
+ " directory\n"), stylesdir.c_str());
+ continue;
+ }
- if (fname[fname.size()-1] == '~')
- continue;
+ Rootmenu *stylesmenu;
- string style = stylesdir;
- style += '/';
- style += fname;
+ if (newmenu)
+ stylesmenu = new Rootmenu(this);
+ else
+ stylesmenu = menu;
- if (! stat(style.c_str(), &statbuf) &&
- S_ISREG(statbuf.st_mode))
- stylesmenu->insert(fname, BScreen::SetStyle, style);
- }
+ DIR *d = opendir(stylesdir.c_str());
+ struct dirent *p;
+ std::vector<string> ls;
- stylesmenu->update();
+ while((p = readdir(d)))
+ ls.push_back(p->d_name);
- if (newmenu) {
- stylesmenu->setLabel(label);
- menu->insert(label, stylesmenu);
- rootmenuList.push_back(stylesmenu);
- }
+ closedir(d);
- blackbox->addMenuTimestamp(stylesdir);
- } else {
- fprintf(stderr,
- i18n(ScreenSet, ScreenSTYLESDIRErrorNotDir,
- "BScreen::parseMenuFile:"
- " [stylesdir/stylesmenu] error, %s is not a"
- " directory\n"), stylesdir.c_str());
- }
- } else {
- fprintf(stderr,
- i18n(ScreenSet, ScreenSTYLESDIRErrorNoExist,
- "BScreen::parseMenuFile: [stylesdir/stylesmenu]"
- " error, %s does not exist\n"), stylesdir.c_str());
- }
- break;
- }
+ std::sort(ls.begin(), ls.end());
- case 1090: // workspaces
- {
- if (! *label) {
- fprintf(stderr,
- i18n(ScreenSet, ScreenWORKSPACESError,
- "BScreen:parseMenuFile: [workspaces] error, "
- "no menu label defined\n"));
- continue;
- }
+ std::vector<string>::iterator it = ls.begin(),
+ end = ls.end();
+ for (; it != end; ++it) {
+ const string& fname = *it;
- menu->insert(label, workspacemenu);
+ if (fname[fname.size()-1] == '~')
+ continue;
- break;
- }
- }
+ string style = stylesdir;
+ style += '/';
+ style += fname;
+
+ if (! stat(style.c_str(), &statbuf) && S_ISREG(statbuf.st_mode))
+ stylesmenu->insert(fname, BScreen::SetStyle, style);
}
+
+ stylesmenu->update();
+
+ if (newmenu) {
+ stylesmenu->setLabel(label);
+ menu->insert(label, stylesmenu);
+ rootmenuList.push_back(stylesmenu);
+ }
+
+ blackbox->addMenuTimestamp(stylesdir);
+ }
+ break;
+
+ case 1090: { // workspaces
+ if (! *label) {
+ fprintf(stderr,
+ i18n(ScreenSet, ScreenWORKSPACESError,
+ "BScreen:parseMenuFile: [workspaces] error, "
+ "no menu label defined\n"));
+ continue;
+ }
+
+ menu->insert(label, workspacemenu);
+ }
+ break;
}
}
return;
}
-#ifdef DEBUG
- fprintf(stderr, "0x%lx: initial (%d, %d) w: %d, h: %d\n", client.window,
- wattrib.x, wattrib.y, wattrib.width, wattrib.height);
-#endif // DEBUG
-
// set the eventmask early in the game so that we make sure we get
// all the events we are interested in
XSetWindowAttributes attrib_set;
client.rect.setRect(wattrib.x, wattrib.y, wattrib.width, wattrib.height);
client.old_bw = wattrib.border_width;
- windowmenu = 0;
lastButtonPressTime = 0;
timer = new BTimer(blackbox, this);
timer->setTimeout(blackbox->getAutoRaiseDelay());
+ windowmenu = new Windowmenu(this);
+
+ // get size, aspect, minimum/maximum size and other hints set by the
+ // client
+
if (! getBlackboxHints()) {
getMWMHints();
getNetWMHints();
}
- // get size, aspect, minimum/maximum size and other hints set by the
- // client
getWMProtocols();
getWMHints();
getWMNormalHints();
-#ifdef DEBUG
- fprintf(stderr, "0x%lx: after hints (%d, %d) w: %d, h: %d\n", client.window,
- client.rect.x(), client.rect.y(),
- client.rect.width(), client.rect.height());
-#endif // DEBUG
-
frame.window = createToplevelWindow();
- frame.plate = createChildWindow(frame.window);
- associateClientWindow();
blackbox->saveWindowSearch(frame.window, this);
+
+ frame.plate = createChildWindow(frame.window);
blackbox->saveWindowSearch(frame.plate, this);
- blackbox->saveWindowSearch(client.window, this);
// determine if this is a transient window
getTransientInfo();
getWindowType();
// adjust the window decorations/behavior based on the window type
+
switch (window_type) {
case Type_Desktop:
case Type_Dock:
// normal windows retain all of the possible decorations and functionality
break;
}
+
+ setAllowedActions();
// further adjeust the window's decorations/behavior based on window sizes
if ((client.normal_hint_flags & PMinSize) &&
decorations &= ~(Decor_Maximize | Decor_Handle);
functions &= ~(Func_Resize | Func_Maximize);
}
- upsize();
+
+ if (decorations & Decor_Titlebar)
+ createTitlebar();
-#ifdef DFEBUG
- fprintf(stderr, "0x%lx: sizes reflect the frame from now on\n",
- client.window);
- fprintf(stderr, "0x%lx: after upsize (%d, %d) w: %d, h: %d\n", client.window,
- frame.rect.x(), frame.rect.y(),
- frame.rect.width(), frame.rect.height());
-#endif // DEBUG
+ if (decorations & Decor_Handle)
+ createHandle();
- setAllowedActions();
+ // apply the size and gravity hint to the frame
+
+ upsize();
bool place_window = True;
if (blackbox->isStartup() || isTransient() ||
place_window = False;
}
-#ifdef DEBUG
- fprintf(stderr, "0x%lx: after gravity (%d, %d) w: %d, h: %d\n",
- client.window,
- frame.rect.x(), frame.rect.y(),
- frame.rect.width(), frame.rect.height());
-#endif // DEBUG
-
// add the window's strut. note this is done *after* placing the window.
screen->addStrut(&client.strut);
updateStrut();
- if (decorations & Decor_Titlebar)
- createTitlebar();
-
- if (decorations & Decor_Handle)
- createHandle();
-
#ifdef SHAPE
- if (blackbox->hasShapeExtensions() && flags.shaped) {
+ if (blackbox->hasShapeExtensions() && flags.shaped)
configureShape();
- }
#endif // SHAPE
- windowmenu = new Windowmenu(this);
-
if (blackbox_attrib.workspace >= screen->getWorkspaceCount())
screen->getCurrentWorkspace()->addWindow(this, place_window);
else
screen->getWorkspace(blackbox_attrib.workspace)->
addWindow(this, place_window);
+ /*
+ the server needs to be grabbed here to prevent client's from sending
+ events while we are in the process of configuring their window.
+ We hold the grab until after we are done moving the window around.
+ */
+
+ XGrabServer(blackbox->getXDisplay());
+
+ associateClientWindow();
+
+ blackbox->saveWindowSearch(client.window, this);
+
if (! place_window) {
// don't need to call configure if we are letting the workspace
// place the window
configure(frame.rect.x(), frame.rect.y(),
frame.rect.width(), frame.rect.height());
-#ifdef DEBUG
- fprintf(stderr, "0x%lx: after configure (%d, %d) w: %d, h: %d\n",
- client.window,
- frame.rect.x(), frame.rect.y(),
- frame.rect.width(), frame.rect.height());
-#endif // DEBUG
}
+ positionWindows();
+
+ XUngrabServer(blackbox->getXDisplay());
+
+ // now that we know where to put the window and what it should look like
+ // we apply the decorations
+ decorate();
+
+ grabButtons();
+
+ XMapSubwindows(blackbox->getXDisplay(), frame.window);
+
+ // this ensures the title, buttons, and other decor are properly displayed
+ redrawWindowFrame();
+
// preserve the window's initial state on first map, and its current state
// across a restart
unsigned long initial_state = current_state;
client.transient_for->isStuck() != flags.stuck)
stick();
+ // the following flags are set by blackbox native apps only
if (flags.shaded) {
flags.shaded = False;
initial_state = current_state;
if (flags.maximized && (functions & Func_Maximize))
remaximize();
-
- /*
- When the window is mapped (and also when its attributes are restored), the
- current_state that was set here will be used.
- It is set to Normal if the window is to be mapped or it is set to Iconic
- if the window is to be iconified.
- *Note* that for sticky windows, the same rules apply here, they are in
- fact never set to Iconic since there is no way for us to tell if a sticky
- window was iconified previously.
- */
-
- positionWindows();
- decorate();
- grabButtons();
-
- XMapSubwindows(blackbox->getXDisplay(), frame.window);
-
- redrawWindowFrame();
-
-#ifdef DEBUG
- fprintf(stderr, "0x%lx: end of constructor (%d, %d) w: %d, h: %d\n",
- client.window,
- frame.rect.x(), frame.rect.y(),
- frame.rect.width(), frame.rect.height());
-#endif // DEBUG
}
XSelectInput(blackbox->getXDisplay(), frame.plate, SubstructureRedirectMask);
- XGrabServer(blackbox->getXDisplay());
-
+ /*
+ note we used to grab around this call to XReparentWindow however the
+ server is now grabbed before this method is called
+ */
unsigned long event_mask = PropertyChangeMask | FocusChangeMask |
StructureNotifyMask;
XSelectInput(blackbox->getXDisplay(), client.window,
XReparentWindow(blackbox->getXDisplay(), client.window, frame.plate, 0, 0);
XSelectInput(blackbox->getXDisplay(), client.window, event_mask);
- XUngrabServer(blackbox->getXDisplay());
-
XRaiseWindow(blackbox->getXDisplay(), frame.plate);
XMapSubwindows(blackbox->getXDisplay(), frame.plate);
-
#ifdef SHAPE
if (blackbox->hasShapeExtensions()) {
XShapeSelectInput(blackbox->getXDisplay(), client.window,
void BlackboxWindow::ungrabButtons(void) {
- if (! screen->isSloppyFocus() || screen->doClickRaise())
- blackbox->ungrabButton(Button1, 0, frame.plate);
-
+ blackbox->ungrabButton(Button1, 0, frame.plate);
blackbox->ungrabButton(Button1, ModMask, frame.window);
blackbox->ungrabButton(Button2, ModMask, frame.window);
blackbox->ungrabButton(Button3, ModMask, frame.window);
case InactiveState:
case ZoomState:
default:
-#ifdef DEBUG
- fprintf(stderr, "0x%lx: just before show (%d, %d) w: %d, h: %d\n",
- client.window,
- frame.rect.x(), frame.rect.y(),
- frame.rect.width(), frame.rect.height());
-#endif // DEBUG
show();
screen->getWorkspace(blackbox_attrib.workspace)->raiseWindow(this);
if (isNormal()) {
}
reconfigure();
-#ifdef DEBUG
- fprintf(stderr, "0x%lx: transient hint (%d, %d) w: %d, h: %d\n",
- client.window,
- frame.rect.x(), frame.rect.y(),
- frame.rect.width(), frame.rect.height());
-#endif
}
break;
if (old_rect != frame.rect)
reconfigure();
-#ifdef DEBUG
- fprintf(stderr, "0x%lx: normal hint (%d, %d) w: %d, h: %d\n",
- client.window,
- frame.rect.x(), frame.rect.y(),
- frame.rect.width(), frame.rect.height());
-#endif // DEBUG
break;
}
applyGravity(req);
}
- if (cr->value_mask & CWWidth) {
+ if (cr->value_mask & CWWidth)
req.setWidth(cr->width + frame.margin.left + frame.margin.right);
-#ifdef DEBUG
- fprintf(stderr, "0x%lx: new width - %d\n", client.window, cr->width);
-#endif // DEBUG
- }
- if (cr->value_mask & CWHeight) {
+ if (cr->value_mask & CWHeight)
req.setHeight(cr->height + frame.margin.top + frame.margin.bottom);
-#ifdef DEBUG
- fprintf(stderr, "0x%lx: new height - %d\n", client.window, cr->height);
-#endif // DEBUG
- }
configure(req.x(), req.y(), req.width(), req.height());
}
break;
}
}
-
-#ifdef DEBUG
- fprintf(stderr, "0x%lx: change request (%d, %d) w: %d, h: %d\n",
- client.window,
- frame.rect.x(), frame.rect.y(),
- frame.rect.width(), frame.rect.height());
-#endif // DEBUG
}
XSelectInput(blackbox->getXDisplay(), frame.plate, NoEventMask);
// do not leave a shaded window as an icon unless it was an icon
- if (flags.shaded && ! flags.iconic) setState(NormalState);
+ if (flags.shaded && ! flags.iconic)
+ setState(NormalState);
restoreGravity(client.rect);