diff --git a/ChangeLog b/ChangeLog index 04870532..f03dc726 100644 --- a/ChangeLog +++ b/ChangeLog @@ -34,6 +34,7 @@ Changes since version 0.51.0: - fixed crash with internal dialogs and multi-heads - added standard colormap support to wrlib (taken from libXmu sources) - fixed memory leak in attribute panel +- fixed bug with window that can get focus if both shaded and hidden. Changes since version 0.50.2: ............................. diff --git a/WINGs/wbrowser.c b/WINGs/wbrowser.c index b2eaaec6..6d8687f8 100644 --- a/WINGs/wbrowser.c +++ b/WINGs/wbrowser.c @@ -267,7 +267,7 @@ WMSetBrowserColumnTitle(WMBrowser *bPtr, int column, char *title) if (bPtr->titles[column]) free(bPtr->titles[column]); - bPtr->titles[column] = wstrdup(title); + bPtr->titles[column] = (title!=NULL) ? wstrdup(title) : wstrdup(""); if (COLUMN_IS_VISIBLE(bPtr, column) && bPtr->flags.isTitled) { drawTitleOfColumn(bPtr, column); @@ -893,27 +893,31 @@ listCallback(void *self, void *clientData) int i; item = WMGetListSelectedItem(lPtr); - if (!item || oldItem == item) - return; - - for (i=0; icolumnCount; i++) { - if (lPtr == bPtr->columns[i]) - break; + if (!item) { + oldItem = item; + return; } - assert(icolumnCount); - /* columns at right must be cleared */ - removeColumn(bPtr, i+1); - /* open directory */ - if (item->isBranch) { - WMAddBrowserColumn(bPtr); - loadColumn(bPtr, bPtr->usedColumnCount-1); + if (oldItem != item) { + for (i=0; icolumnCount; i++) { + if (lPtr == bPtr->columns[i]) + break; + } + assert(icolumnCount); + + /* columns at right must be cleared */ + removeColumn(bPtr, i+1); + /* open directory */ + if (item->isBranch) { + WMAddBrowserColumn(bPtr); + loadColumn(bPtr, bPtr->usedColumnCount-1); + } + if (bPtr->usedColumnCount < bPtr->maxVisibleColumns) + i = 0; + else + i = bPtr->usedColumnCount-bPtr->maxVisibleColumns; + scrollToColumn(bPtr, i, True); } - if (bPtr->usedColumnCount < bPtr->maxVisibleColumns) - i = 0; - else - i = bPtr->usedColumnCount-bPtr->maxVisibleColumns; - scrollToColumn(bPtr, i, True); /* call callback for click */ if (bPtr->action) diff --git a/WINGs/wfilepanel.c b/WINGs/wfilepanel.c index 4a445f85..02a106d0 100644 --- a/WINGs/wfilepanel.c +++ b/WINGs/wfilepanel.c @@ -104,22 +104,16 @@ textChangedObserver(void *observerData, WMNotification *notification) char *text; WMList *list; int col = WMGetBrowserNumberOfColumns(panel->browser) - 1; - int i, j, textEvent = (int)WMGetNotificationClientData(notification); - static int running = 0; - - if (running) - return; - - running = 1; + int i, j, textEvent; if (panel->flags.ignoreTextChangeNotification) return; - list = WMGetBrowserListInColumn(panel->browser, col); - if (!list) - return; + if (!(list = WMGetBrowserListInColumn(panel->browser, col))) + return; text = WMGetTextFieldText(panel->fileField); + textEvent = (int)WMGetNotificationClientData(notification); if (panel->flags.autoCompletion && textEvent!=WMDeleteTextEvent) i = closestListItem(list, text, False); @@ -132,14 +126,16 @@ textChangedObserver(void *observerData, WMNotification *notification) int textLen = strlen(text), itemTextLen = strlen(item->text); int visibleItems = WMWidgetHeight(list)/WMGetListItemHeight(list); - if (textEvent!=WMSetTextEvent || textLenflags.ignoreTextChangeNotification = 1; WMInsertTextFieldText(panel->fileField, &item->text[textLen], - textLen); + textLen); + panel->flags.ignoreTextChangeNotification = 0; + WMSetTextFieldCursorPosition(panel->fileField, itemTextLen); range.position = textLen; range.count = itemTextLen - textLen; @@ -148,7 +144,6 @@ textChangedObserver(void *observerData, WMNotification *notification) } free(text); - running = 0; } diff --git a/WINGs/wtextfield.c b/WINGs/wtextfield.c index 47043f79..8cf5bc49 100644 --- a/WINGs/wtextfield.c +++ b/WINGs/wtextfield.c @@ -820,7 +820,8 @@ handleTextFieldKeyPress(TextField *tPtr, XEvent *event) switch (ksym) { case XK_Tab: if (event->xkey.state & ShiftMask) { - if (tPtr->view->prevFocusChain) { + if (tPtr->view->prevFocusChain && + tPtr->view->prevFocusChain->flags.mapped) { W_SetFocusOfTopLevel(W_TopLevelOfView(tPtr->view), tPtr->view->prevFocusChain); tPtr->flags.notIllegalMovement = 1; @@ -828,7 +829,8 @@ handleTextFieldKeyPress(TextField *tPtr, XEvent *event) WMPostNotificationName(WMTextDidEndEditingNotification, tPtr, (void*)WMBacktabTextMovement); } else { - if (tPtr->view->nextFocusChain) { + if (tPtr->view->nextFocusChain && + tPtr->view->nextFocusChain->flags.mapped) { W_SetFocusOfTopLevel(W_TopLevelOfView(tPtr->view), tPtr->view->nextFocusChain); tPtr->flags.notIllegalMovement = 1; diff --git a/WPrefs.app/editmenu.c b/WPrefs.app/editmenu.c index 01948129..1fe5d112 100644 --- a/WPrefs.app/editmenu.c +++ b/WPrefs.app/editmenu.c @@ -366,7 +366,7 @@ WInsertMenuItemWithTitle(WEditMenu *mPtr, char *title, int index) index = mPtr->itemCount; if (mPtr->itemCount == mPtr->itemsAlloced) { - WEditMenuItem *newList; + WEditMenuItem **newList; newList = wmalloc(sizeof(WEditMenuItem*)*(mPtr->itemsAlloced+10)); memset(newList, 0, sizeof(WEditMenuItem*)*(mPtr->itemsAlloced+10)); diff --git a/WindowMaker/Defaults/WindowMaker b/WindowMaker/Defaults/WindowMaker index 0ff6b3c4..85365819 100755 --- a/WindowMaker/Defaults/WindowMaker +++ b/WindowMaker/Defaults/WindowMaker @@ -48,9 +48,7 @@ AutoArrangeIcons = NO; AdvanceToNewWorkspace = NO; CycleWorkspaces = NO; -#ifdef WEENDOZE_CYCLE - WindozeCycling = YES; -#endif /* WEENDOZE_CYCLE */ + WindozeCycling = NO; ResizeDisplay = line; MoveDisplay = floating; OpaqueMove = YES; diff --git a/WindowMaker/Defaults/WindowMaker.in b/WindowMaker/Defaults/WindowMaker.in index ef76e5ba..5e52b81e 100644 --- a/WindowMaker/Defaults/WindowMaker.in +++ b/WindowMaker/Defaults/WindowMaker.in @@ -48,9 +48,7 @@ AutoArrangeIcons = NO; AdvanceToNewWorkspace = NO; CycleWorkspaces = NO; -#ifdef WEENDOZE_CYCLE - WindozeCycling = YES; -#endif /* WEENDOZE_CYCLE */ + WindozeCycling = NO; ResizeDisplay = line; MoveDisplay = floating; OpaqueMove = YES; diff --git a/src/window.c b/src/window.c index 0b387bf9..bea3ef03 100644 --- a/src/window.c +++ b/src/window.c @@ -425,7 +425,7 @@ wWindowSetupInitialAttributes(WWindow *wwin, int *level, int *workspace) Bool wWindowCanReceiveFocus(WWindow *wwin) { - if (!wwin->flags.mapped && !wwin->flags.shaded) + if (!wwin->flags.mapped && (!wwin->flags.shaded || wwin->flags.hidden)) return False; if (WFLAGP(wwin, no_focusable) || wwin->flags.miniaturized) return False;