1
0
mirror of https://github.com/gryf/wmaker.git synced 2025-12-19 12:28:22 +01:00

added patch with bugfixes for wings/textfield/panel exit with escape/bag etc

changed iconchooser to center icons/text
updated po files
This commit is contained in:
kojima
1999-10-02 20:24:41 +00:00
parent 4545d536bd
commit dbdb44a4db
19 changed files with 3651 additions and 3014 deletions

View File

@@ -2,6 +2,9 @@ changes since wmaker 0.61.0:
............................ ............................
- added WMGetTextFieldFont() - added WMGetTextFieldFont()
- escape key in panels (craig nellist <crn@ozemail.com.au>)
- applied patch with fixes and enhancements to textfield
(Franck Wolff <wolff@cybercable.fr>)
changes since wmaker 0.60.0: changes since wmaker 0.60.0:

View File

@@ -211,7 +211,7 @@ DIST_COMMON = README ChangeLog Makefile.am Makefile.in TODO
DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
TAR = tar TAR = gtar
GZIP_ENV = --best GZIP_ENV = --best
SOURCES = $(libWINGs_a_SOURCES) $(libWUtil_a_SOURCES) $(wtest_SOURCES) $(wmquery_SOURCES) $(wmfile_SOURCES) $(fontl_SOURCES) $(testmywidget_SOURCES) $(testcolorpanel_SOURCES) $(testnot_SOURCES) SOURCES = $(libWINGs_a_SOURCES) $(libWUtil_a_SOURCES) $(wtest_SOURCES) $(wmquery_SOURCES) $(wmfile_SOURCES) $(fontl_SOURCES) $(testmywidget_SOURCES) $(testcolorpanel_SOURCES) $(testnot_SOURCES)
OBJECTS = $(libWINGs_a_OBJECTS) $(libWUtil_a_OBJECTS) $(wtest_OBJECTS) $(wmquery_OBJECTS) $(wmfile_OBJECTS) $(fontl_OBJECTS) $(testmywidget_OBJECTS) $(testcolorpanel_OBJECTS) $(testnot_OBJECTS) OBJECTS = $(libWINGs_a_OBJECTS) $(libWUtil_a_OBJECTS) $(wtest_OBJECTS) $(wmquery_OBJECTS) $(wmfile_OBJECTS) $(fontl_OBJECTS) $(testmywidget_OBJECTS) $(testcolorpanel_OBJECTS) $(testnot_OBJECTS)

View File

@@ -180,6 +180,7 @@ typedef enum {
enum { enum {
WMIllegalTextMovement, WMIllegalTextMovement,
WMReturnTextMovement, WMReturnTextMovement,
WMEscapeTextMovement,
WMTabTextMovement, WMTabTextMovement,
WMBacktabTextMovement, WMBacktabTextMovement,
WMLeftTextMovement, WMLeftTextMovement,
@@ -350,6 +351,7 @@ typedef struct WMAlertPanel {
short done; short done;
KeyCode retKey; KeyCode retKey;
KeyCode escKey;
} WMAlertPanel; } WMAlertPanel;
@@ -364,6 +366,7 @@ typedef struct WMInputPanel {
short done; short done;
KeyCode retKey; KeyCode retKey;
KeyCode escKey;
} WMInputPanel; } WMInputPanel;

View File

@@ -355,7 +355,7 @@ typedef struct _WINGsConfiguration {
unsigned doubleClickDelay; unsigned doubleClickDelay;
} _WINGsConfiguration; } _WINGsConfiguration;
_WINGsConfiguration WINGsConfiguration; extern _WINGsConfiguration WINGsConfiguration;
@@ -460,11 +460,6 @@ char *W_GetTextSelection(WMScreen *scr, Atom selection);
void W_HandleSelectionEvent(XEvent *event); void W_HandleSelectionEvent(XEvent *event);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* _WINGSP_H_ */
void W_FlushASAPNotificationQueue(); void W_FlushASAPNotificationQueue();
@@ -475,3 +470,9 @@ struct W_Balloon *W_CreateBalloon(WMScreen *scr);
void W_BalloonHandleEnterView(WMView *view); void W_BalloonHandleEnterView(WMView *view);
void W_BalloonHandleLeaveView(WMView *view); void W_BalloonHandleLeaveView(WMView *view);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* _WINGSP_H_ */

View File

@@ -49,9 +49,11 @@ WMAppendBag(WMBag *bag, WMBag *appendedBag)
bag->items = wrealloc(bag->items, bag->items = wrealloc(bag->items,
sizeof(void*) * (bag->size+appendedBag->count)); sizeof(void*) * (bag->size+appendedBag->count));
memcpy(bag->items + bag->count, appendedBag->items, appendedBag->count); memcpy(bag->items + bag->count, appendedBag->items,
sizeof(void*) * appendedBag->count);
bag->count += appendedBag->count; bag->count += appendedBag->count;
bag->size += appendedBag->count;
} }

View File

@@ -30,7 +30,6 @@
extern _WINGsConfiguration WINGsConfiguration;

View File

@@ -27,9 +27,17 @@ handleKeyPress(XEvent *event, void *clientData)
{ {
WMAlertPanel *panel = (WMAlertPanel*)clientData; WMAlertPanel *panel = (WMAlertPanel*)clientData;
if (event->xkey.keycode == panel->retKey) { if (event->xkey.keycode == panel->retKey && panel->defBtn) {
WMPerformButtonClick(panel->defBtn); WMPerformButtonClick(panel->defBtn);
} }
if (event->xkey.keycode == panel->escKey) {
if (panel->altBtn || panel->othBtn) {
WMPerformButtonClick(panel->othBtn ? panel->othBtn : panel->altBtn);
} else {
panel->result = WAPRDefault;
panel->done=1;
}
}
} }
@@ -87,6 +95,7 @@ WMCreateAlertPanel(WMScreen *scrPtr, WMWindow *owner,
panel->retKey = XKeysymToKeycode(scrPtr->display, XK_Return); panel->retKey = XKeysymToKeycode(scrPtr->display, XK_Return);
panel->escKey = XKeysymToKeycode(scrPtr->display, XK_Escape);
if (owner) if (owner)
panel->win = WMCreatePanelWithStyleForWindow(owner, "alertPanel", panel->win = WMCreatePanelWithStyleForWindow(owner, "alertPanel",
@@ -231,9 +240,18 @@ handleKeyPress2(XEvent *event, void *clientData)
{ {
WMInputPanel *panel = (WMInputPanel*)clientData; WMInputPanel *panel = (WMInputPanel*)clientData;
if (event->xkey.keycode == panel->retKey) { if (event->xkey.keycode == panel->retKey && panel->defBtn) {
WMPerformButtonClick(panel->defBtn); WMPerformButtonClick(panel->defBtn);
} }
if (event->xkey.keycode == panel->escKey) {
if (panel->altBtn) {
WMPerformButtonClick(panel->altBtn);
} else {
/* printf("got esc\n");*/
panel->done = 1;
panel->result = WAPRDefault;
}
}
} }
@@ -285,8 +303,21 @@ endedEditingObserver(void *observerData, WMNotification *notification)
{ {
WMInputPanel *panel = (WMInputPanel*)observerData; WMInputPanel *panel = (WMInputPanel*)observerData;
if ((int)WMGetNotificationClientData(notification) == WMReturnTextMovement) { switch ((int)WMGetNotificationClientData(notification)) {
WMPerformButtonClick(panel->defBtn); case WMReturnTextMovement:
if (panel->defBtn)
WMPerformButtonClick(panel->defBtn);
break;
case WMEscapeTextMovement:
if (panel->altBtn)
WMPerformButtonClick(panel->altBtn);
else {
panel->done = 1;
panel->result = WAPRDefault;
}
break;
default:
break;
} }
} }
@@ -303,6 +334,7 @@ WMCreateInputPanel(WMScreen *scrPtr, WMWindow *owner, char *title, char *msg,
memset(panel, 0, sizeof(WMInputPanel)); memset(panel, 0, sizeof(WMInputPanel));
panel->retKey = XKeysymToKeycode(scrPtr->display, XK_Return); panel->retKey = XKeysymToKeycode(scrPtr->display, XK_Return);
panel->escKey = XKeysymToKeycode(scrPtr->display, XK_Escape);
if (owner) if (owner)
panel->win = WMCreatePanelWithStyleForWindow(owner, "inputPanel", panel->win = WMCreatePanelWithStyleForWindow(owner, "inputPanel",

View File

@@ -40,7 +40,6 @@ typedef struct W_TextField {
short offsetWidth; /* offset of text from border */ short offsetWidth; /* offset of text from border */
WMRange selection; WMRange selection;
WMRange prevselection;
WMFont *font; WMFont *font;
@@ -124,6 +123,40 @@ struct W_ViewDelegate _TextFieldViewDelegate = {
&((tPtr)->text[(start)]), (end) - (start) + 1)) &((tPtr)->text[(start)]), (end) - (start) + 1))
static void
normalizeRange(TextField *tPtr, WMRange *range)
{
if (range->position < 0 && range->count < 0)
range->count = 0;
if (range->count == 0) {
range->position = 0;
return;
}
/* (1,-2) ~> (0,1) ; (1,-1) ~> (0,1) ; (2,-1) ~> (1,1) */
if (range->count < 0) { /* && range->position >= 0 */
if (range->position + range->count < 0) {
range->count = range->position;
range->position = 0;
} else {
range->count = -range->count;
range->position -= range->count;
}
/* (-2,1) ~> (0,0) ; (-1,1) ~> (0,0) ; (-1,2) ~> (0,1) */
} else if (range->position < 0) { /* && range->count > 0 */
if (range->position + range->count < 0) {
range->position = range->count = 0;
} else {
range->count += range->position;
range->position = 0;
}
}
if (range->position + range->count > tPtr->textLen)
range->count = tPtr->textLen - range->position;
}
static void static void
memmv(char *dest, char *src, int size) memmv(char *dest, char *src, int size)
{ {
@@ -308,6 +341,8 @@ WMCreateTextField(WMWidget *parent)
void void
WMSetTextFieldDelegate(WMTextField *tPtr, WMTextFieldDelegate *delegate) WMSetTextFieldDelegate(WMTextField *tPtr, WMTextFieldDelegate *delegate)
{ {
CHECK_CLASS(tPtr, WC_TextField);
tPtr->delegate = delegate; tPtr->delegate = delegate;
} }
@@ -357,35 +392,28 @@ WMInsertTextFieldText(WMTextField *tPtr, char *text, int position)
paintTextField(tPtr); paintTextField(tPtr);
} }
void void
WMDeleteTextFieldRange(WMTextField *tPtr, WMRange range) WMDeleteTextFieldRange(WMTextField *tPtr, WMRange range)
{ {
CHECK_CLASS(tPtr, WC_TextField); CHECK_CLASS(tPtr, WC_TextField);
if (range.position >= tPtr->textLen) normalizeRange(tPtr, &range);
return;
if (range.count < 1) { if (!range.count)
if (range.position < 0) return;
range.position = 0;
tPtr->text[range.position] = 0;
tPtr->textLen = range.position;
tPtr->cursorPosition = 0; memmv(&(tPtr->text[range.position]), &(tPtr->text[range.position+range.count]),
tPtr->viewPosition = 0; tPtr->textLen - (range.position+range.count) + 1);
} else {
if (range.position + range.count > tPtr->textLen)
range.count = tPtr->textLen - range.position;
memmv(&(tPtr->text[range.position]), &(tPtr->text[range.position+range.count]),
tPtr->textLen - (range.position+range.count) + 1);
tPtr->textLen -= range.count;
if (tPtr->cursorPosition > range.position) tPtr->textLen -= range.count;
tPtr->cursorPosition -= range.count;
decrToFit(tPtr); /* try to keep cursorPosition at the same place */
} tPtr->viewPosition -= range.count;
if (tPtr->viewPosition < 0)
tPtr->viewPosition = 0;
tPtr->cursorPosition = range.position;
decrToFit(tPtr);
paintTextField(tPtr); paintTextField(tPtr);
} }
@@ -404,6 +432,8 @@ WMGetTextFieldText(WMTextField *tPtr)
void void
WMSetTextFieldText(WMTextField *tPtr, char *text) WMSetTextFieldText(WMTextField *tPtr, char *text)
{ {
CHECK_CLASS(tPtr, WC_TextField);
if ((text && strcmp(tPtr->text, text) == 0) || if ((text && strcmp(tPtr->text, text) == 0) ||
(!text && tPtr->textLen == 0)) (!text && tPtr->textLen == 0))
return; return;
@@ -420,11 +450,8 @@ WMSetTextFieldText(WMTextField *tPtr, char *text)
} }
strcpy(tPtr->text, text); strcpy(tPtr->text, text);
} }
/*
if (tPtr->textLen < tPtr->cursorPosition) tPtr->cursorPosition = tPtr->selection.position = tPtr->textLen;
tPtr->cursorPosition = tPtr->textLen;
*/
tPtr->cursorPosition = tPtr->textLen;
tPtr->viewPosition = 0; tPtr->viewPosition = 0;
tPtr->selection.count = 0; tPtr->selection.count = 0;
@@ -436,7 +463,10 @@ WMSetTextFieldText(WMTextField *tPtr, char *text)
void void
WMSetTextFieldAlignment(WMTextField *tPtr, WMAlignment alignment) WMSetTextFieldAlignment(WMTextField *tPtr, WMAlignment alignment)
{ {
CHECK_CLASS(tPtr, WC_TextField);
tPtr->flags.alignment = alignment; tPtr->flags.alignment = alignment;
if (alignment!=WALeft) { if (alignment!=WALeft) {
wwarning("only left alignment is supported in textfields"); wwarning("only left alignment is supported in textfields");
return; return;
@@ -451,6 +481,8 @@ WMSetTextFieldAlignment(WMTextField *tPtr, WMAlignment alignment)
void void
WMSetTextFieldBordered(WMTextField *tPtr, Bool bordered) WMSetTextFieldBordered(WMTextField *tPtr, Bool bordered)
{ {
CHECK_CLASS(tPtr, WC_TextField);
tPtr->flags.bordered = bordered; tPtr->flags.bordered = bordered;
if (tPtr->view->flags.realized) { if (tPtr->view->flags.realized) {
@@ -462,6 +494,8 @@ WMSetTextFieldBordered(WMTextField *tPtr, Bool bordered)
void void
WMSetTextFieldBeveled(WMTextField *tPtr, Bool flag) WMSetTextFieldBeveled(WMTextField *tPtr, Bool flag)
{ {
CHECK_CLASS(tPtr, WC_TextField);
tPtr->flags.beveled = flag; tPtr->flags.beveled = flag;
if (tPtr->view->flags.realized) { if (tPtr->view->flags.realized) {
@@ -474,6 +508,8 @@ WMSetTextFieldBeveled(WMTextField *tPtr, Bool flag)
void void
WMSetTextFieldSecure(WMTextField *tPtr, Bool flag) WMSetTextFieldSecure(WMTextField *tPtr, Bool flag)
{ {
CHECK_CLASS(tPtr, WC_TextField);
tPtr->flags.secure = flag; tPtr->flags.secure = flag;
if (tPtr->view->flags.realized) { if (tPtr->view->flags.realized) {
@@ -485,6 +521,8 @@ WMSetTextFieldSecure(WMTextField *tPtr, Bool flag)
Bool Bool
WMGetTextFieldEditable(WMTextField *tPtr) WMGetTextFieldEditable(WMTextField *tPtr)
{ {
CHECK_CLASS(tPtr, WC_TextField);
return tPtr->flags.enabled; return tPtr->flags.enabled;
} }
@@ -492,6 +530,8 @@ WMGetTextFieldEditable(WMTextField *tPtr)
void void
WMSetTextFieldEditable(WMTextField *tPtr, Bool flag) WMSetTextFieldEditable(WMTextField *tPtr, Bool flag)
{ {
CHECK_CLASS(tPtr, WC_TextField);
tPtr->flags.enabled = flag; tPtr->flags.enabled = flag;
if (tPtr->view->flags.realized) { if (tPtr->view->flags.realized) {
@@ -503,20 +543,10 @@ WMSetTextFieldEditable(WMTextField *tPtr, Bool flag)
void void
WMSelectTextFieldRange(WMTextField *tPtr, WMRange range) WMSelectTextFieldRange(WMTextField *tPtr, WMRange range)
{ {
CHECK_CLASS(tPtr, WC_TextField);
if (tPtr->flags.enabled) { if (tPtr->flags.enabled) {
if (range.position < 0) { normalizeRange(tPtr, &range);
range.count += range.position;
range.count = (range.count < 0) ? 0 : range.count;
range.position = 0;
} else if (range.position > tPtr->textLen) {
range.position = tPtr->textLen;
range.count = 0;
}
if (range.position + range.count > tPtr->textLen)
range.count = tPtr->textLen - range.position;
tPtr->prevselection = tPtr->selection; /* check if this is needed */
tPtr->selection = range; tPtr->selection = range;
@@ -530,6 +560,8 @@ WMSelectTextFieldRange(WMTextField *tPtr, WMRange range)
void void
WMSetTextFieldCursorPosition(WMTextField *tPtr, unsigned int position) WMSetTextFieldCursorPosition(WMTextField *tPtr, unsigned int position)
{ {
CHECK_CLASS(tPtr, WC_TextField);
if (tPtr->flags.enabled) { if (tPtr->flags.enabled) {
if (position > tPtr->textLen) if (position > tPtr->textLen)
position = tPtr->textLen; position = tPtr->textLen;
@@ -591,6 +623,8 @@ WMSetTextFieldPrevTextField(WMTextField *tPtr, WMTextField *prev)
void void
WMSetTextFieldFont(WMTextField *tPtr, WMFont *font) WMSetTextFieldFont(WMTextField *tPtr, WMFont *font)
{ {
CHECK_CLASS(tPtr, WC_TextField);
if (tPtr->font) if (tPtr->font)
WMReleaseFont(tPtr->font); WMReleaseFont(tPtr->font);
tPtr->font = WMRetainFont(font); tPtr->font = WMRetainFont(font);
@@ -604,6 +638,7 @@ WMSetTextFieldFont(WMTextField *tPtr, WMFont *font)
} }
WMFont* WMFont*
WMGetTextFieldFont(WMTextField *tPtr) WMGetTextFieldFont(WMTextField *tPtr)
{ {
@@ -611,7 +646,6 @@ WMGetTextFieldFont(WMTextField *tPtr)
} }
static void static void
didResizeTextField(W_ViewDelegate *self, WMView *view) didResizeTextField(W_ViewDelegate *self, WMView *view)
{ {
@@ -941,22 +975,15 @@ handleTextFieldKeyPress(TextField *tPtr, XEvent *event)
KeySym ksym; KeySym ksym;
int count, refresh = 0; int count, refresh = 0;
int control_pressed = 0; int control_pressed = 0;
int cancelSelection = 1;
if (((XKeyEvent *) event)->state & WM_EMACSKEYMASK) { /*printf("(%d,%d) -> ", tPtr->selection.position, tPtr->selection.count);*/
if (((XKeyEvent *) event)->state & WM_EMACSKEYMASK)
control_pressed = 1; control_pressed = 1;
}
count = XLookupString(&event->xkey, buffer, 63, &ksym, NULL); count = XLookupString(&event->xkey, buffer, 63, &ksym, NULL);
buffer[count] = '\0'; buffer[count] = '\0';
if (!(event->xkey.state & ShiftMask)) {
if (tPtr->selection.count)
refresh = 1;
tPtr->prevselection = tPtr->selection;
tPtr->selection.position = tPtr->cursorPosition;
tPtr->selection.count = 0;
}
/* Be careful in any case in this switch statement, never to call /* Be careful in any case in this switch statement, never to call
* to more than a function that can generate text change notifications. * to more than a function that can generate text change notifications.
* Only one text change notification should be sent in any case. * Only one text change notification should be sent in any case.
@@ -1005,22 +1032,23 @@ handleTextFieldKeyPress(TextField *tPtr, XEvent *event)
if (tPtr->cursorPosition > 0) { if (tPtr->cursorPosition > 0) {
paintCursor(tPtr); paintCursor(tPtr);
if (event->xkey.state & ControlMask) { if (event->xkey.state & ControlMask) {
int i; int i = tPtr->cursorPosition - 1;
for (i = tPtr->cursorPosition - 1; i >= 0; i--)
if (tPtr->text[i] == ' ' || i == 0) { while (i > 0 && tPtr->text[i] != ' ') i--;
tPtr->cursorPosition = i; while (i > 0 && tPtr->text[i] == ' ') i--;
break;
} tPtr->cursorPosition = (i > 0) ? i + 1 : 0;
} else { } else
tPtr->cursorPosition--; tPtr->cursorPosition--;
}
if (tPtr->cursorPosition < tPtr->viewPosition) { if (tPtr->cursorPosition < tPtr->viewPosition) {
tPtr->viewPosition = tPtr->cursorPosition; tPtr->viewPosition = tPtr->cursorPosition;
refresh = 1; refresh = 1;
} else { } else
paintCursor(tPtr); paintCursor(tPtr);
}
} }
if (event->xkey.state & ShiftMask)
cancelSelection = 0;
break; break;
case WM_EMACSKEY_RIGHT: case WM_EMACSKEY_RIGHT:
@@ -1034,12 +1062,12 @@ handleTextFieldKeyPress(TextField *tPtr, XEvent *event)
if (tPtr->cursorPosition < tPtr->textLen) { if (tPtr->cursorPosition < tPtr->textLen) {
paintCursor(tPtr); paintCursor(tPtr);
if (event->xkey.state & ControlMask) { if (event->xkey.state & ControlMask) {
int i; int i = tPtr->cursorPosition;
for (i = tPtr->cursorPosition + 1; i <= tPtr->textLen; i++)
if (tPtr->text[i] == ' ' || i == tPtr->textLen) { while (tPtr->text[i] && tPtr->text[i] != ' ') i++;
tPtr->cursorPosition = i; while (tPtr->text[i] == ' ') i++;
break;
} tPtr->cursorPosition = i;
} else { } else {
tPtr->cursorPosition++; tPtr->cursorPosition++;
} }
@@ -1053,6 +1081,8 @@ handleTextFieldKeyPress(TextField *tPtr, XEvent *event)
if (!refresh) if (!refresh)
paintCursor(tPtr); paintCursor(tPtr);
} }
if (event->xkey.state & ShiftMask)
cancelSelection = 0;
break; break;
case WM_EMACSKEY_HOME: case WM_EMACSKEY_HOME:
@@ -1069,10 +1099,11 @@ handleTextFieldKeyPress(TextField *tPtr, XEvent *event)
if (tPtr->viewPosition > 0) { if (tPtr->viewPosition > 0) {
tPtr->viewPosition = 0; tPtr->viewPosition = 0;
refresh = 1; refresh = 1;
} else { } else
paintCursor(tPtr); paintCursor(tPtr);
}
} }
if (event->xkey.state & ShiftMask)
cancelSelection = 0;
break; break;
case WM_EMACSKEY_END: case WM_EMACSKEY_END:
@@ -1097,6 +1128,8 @@ handleTextFieldKeyPress(TextField *tPtr, XEvent *event)
if (!refresh) if (!refresh)
paintCursor(tPtr); paintCursor(tPtr);
} }
if (event->xkey.state & ShiftMask)
cancelSelection = 0;
break; break;
case WM_EMACSKEY_BS: case WM_EMACSKEY_BS:
@@ -1104,19 +1137,14 @@ handleTextFieldKeyPress(TextField *tPtr, XEvent *event)
goto normal_key; goto normal_key;
} }
case XK_BackSpace: case XK_BackSpace:
if (tPtr->cursorPosition > 0) { if (tPtr->selection.count) {
WMDeleteTextFieldRange(tPtr, tPtr->selection);
NOTIFY(tPtr, didChange, WMTextDidChangeNotification,
(void*)WMDeleteTextEvent);
} else if (tPtr->cursorPosition > 0) {
WMRange range; WMRange range;
range.position = tPtr->cursorPosition - 1;
if (tPtr->prevselection.count) { range.count = 1;
range.position = tPtr->prevselection.count < 0
? tPtr->prevselection.position + tPtr->prevselection.count
: tPtr->prevselection.position;
range.count = abs(tPtr->prevselection.count);
} else {
range.position = tPtr->cursorPosition - 1;
range.count = 1;
}
WMDeleteTextFieldRange(tPtr, range); WMDeleteTextFieldRange(tPtr, range);
NOTIFY(tPtr, didChange, WMTextDidChangeNotification, NOTIFY(tPtr, didChange, WMTextDidChangeNotification,
(void*)WMDeleteTextEvent); (void*)WMDeleteTextEvent);
@@ -1131,19 +1159,14 @@ handleTextFieldKeyPress(TextField *tPtr, XEvent *event)
case XK_KP_Delete: case XK_KP_Delete:
#endif #endif
case XK_Delete: case XK_Delete:
if (tPtr->cursorPosition < tPtr->textLen || tPtr->prevselection.count) { if (tPtr->selection.count) {
WMDeleteTextFieldRange(tPtr, tPtr->selection);
NOTIFY(tPtr, didChange, WMTextDidChangeNotification,
(void*)WMDeleteTextEvent);
} else if (tPtr->cursorPosition < tPtr->textLen) {
WMRange range; WMRange range;
range.position = tPtr->cursorPosition;
if (tPtr->prevselection.count) { range.count = 1;
range.position = tPtr->prevselection.count < 0
? tPtr->prevselection.position + tPtr->prevselection.count
: tPtr->prevselection.position;
range.count = abs(tPtr->prevselection.count);
} else {
range.position = tPtr->cursorPosition;
range.count = 1;
}
WMDeleteTextFieldRange(tPtr, range); WMDeleteTextFieldRange(tPtr, range);
NOTIFY(tPtr, didChange, WMTextDidChangeNotification, NOTIFY(tPtr, didChange, WMTextDidChangeNotification,
(void*)WMDeleteTextEvent); (void*)WMDeleteTextEvent);
@@ -1153,38 +1176,43 @@ handleTextFieldKeyPress(TextField *tPtr, XEvent *event)
normal_key: normal_key:
default: default:
if (count > 0 && !iscntrl(buffer[0])) { if (count > 0 && !iscntrl(buffer[0])) {
WMRange range; if (tPtr->selection.count)
WMDeleteTextFieldRange(tPtr, tPtr->selection);
if (tPtr->prevselection.count) {
range.position = tPtr->prevselection.count < 0
? tPtr->prevselection.position + tPtr->prevselection.count
: tPtr->prevselection.position;
range.count = abs(tPtr->prevselection.count);
} else {
range.position = tPtr->cursorPosition;
range.count = 1;
}
if (tPtr->prevselection.count)
WMDeleteTextFieldRange(tPtr, range);
WMInsertTextFieldText(tPtr, buffer, tPtr->cursorPosition); WMInsertTextFieldText(tPtr, buffer, tPtr->cursorPosition);
NOTIFY(tPtr, didChange, WMTextDidChangeNotification, NOTIFY(tPtr, didChange, WMTextDidChangeNotification,
(void*)WMInsertTextEvent); (void*)WMInsertTextEvent);
} else { } else
return; return;
}
break; break;
} }
if (event->xkey.state & ShiftMask) {
if (tPtr->selection.count == 0) if (!cancelSelection) {
tPtr->selection.position = tPtr->cursorPosition; if (tPtr->selection.count != tPtr->cursorPosition - tPtr->selection.position) {
tPtr->selection.count = tPtr->cursorPosition - tPtr->selection.position; WMNotification *notif;
refresh = 1;
tPtr->selection.count = tPtr->cursorPosition - tPtr->selection.position;
XSetSelectionOwner(tPtr->view->screen->display,
XA_PRIMARY, tPtr->view->window,
event->xbutton.time);
notif = WMCreateNotification("_lostOwnership", NULL,tPtr);
WMPostNotification(notif);
WMReleaseNotification(notif);
refresh = 1;
}
} else {
if (tPtr->selection.count) {
tPtr->selection.count = 0;
refresh = 1;
}
tPtr->selection.position = tPtr->cursorPosition;
} }
tPtr->prevselection.count = 0;
if (refresh) { if (refresh)
paintTextField(tPtr); paintTextField(tPtr);
}
/*printf("(%d,%d)\n", tPtr->selection.position, tPtr->selection.count);*/
} }
@@ -1222,7 +1250,8 @@ static void
handleTextFieldActionEvents(XEvent *event, void *data) handleTextFieldActionEvents(XEvent *event, void *data)
{ {
TextField *tPtr = (TextField*)data; TextField *tPtr = (TextField*)data;
static int move; static int move = 0;
static Time lastButtonReleasedEvent = 0;
CHECK_CLASS(data, WC_TextField); CHECK_CLASS(data, WC_TextField);
@@ -1262,14 +1291,15 @@ handleTextFieldActionEvents(XEvent *event, void *data)
tPtr->viewPosition--; tPtr->viewPosition--;
} }
if (!tPtr->selection.count) { /*if (!tPtr->selection.count) {
tPtr->selection.position = tPtr->cursorPosition; tPtr->selection.position = tPtr->cursorPosition;
} }*/
tPtr->cursorPosition = tPtr->cursorPosition =
pointToCursorPosition(tPtr, event->xmotion.x); pointToCursorPosition(tPtr, event->xmotion.x);
tPtr->selection.count = tPtr->cursorPosition - tPtr->selection.position; tPtr->selection.count = tPtr->cursorPosition - tPtr->selection.position;
/*printf("(%d,%d)\n", tPtr->selection.position, tPtr->selection.count);*/
/* /*
printf("notify %d %d\n",event->xmotion.x,tPtr->usableWidth); printf("notify %d %d\n",event->xmotion.x,tPtr->usableWidth);
@@ -1306,6 +1336,7 @@ handleTextFieldActionEvents(XEvent *event, void *data)
if (tPtr->flags.enabled && !tPtr->flags.focused) { if (tPtr->flags.enabled && !tPtr->flags.focused) {
WMSetFocusToWidget(tPtr); WMSetFocusToWidget(tPtr);
} else if (tPtr->flags.focused) { } else if (tPtr->flags.focused) {
tPtr->selection.position = tPtr->cursorPosition;
tPtr->selection.count = 0; tPtr->selection.count = 0;
} }
if(textWidth < tPtr->usableWidth){ if(textWidth < tPtr->usableWidth){
@@ -1336,6 +1367,7 @@ handleTextFieldActionEvents(XEvent *event, void *data)
} else if (tPtr->flags.focused) { } else if (tPtr->flags.focused) {
tPtr->cursorPosition = pointToCursorPosition(tPtr, tPtr->cursorPosition = pointToCursorPosition(tPtr,
event->xbutton.x); event->xbutton.x);
tPtr->selection.position = tPtr->cursorPosition;
tPtr->selection.count = 0; tPtr->selection.count = 0;
paintTextField(tPtr); paintTextField(tPtr);
} }
@@ -1345,7 +1377,7 @@ handleTextFieldActionEvents(XEvent *event, void *data)
text = W_GetTextSelection(tPtr->view->screen, XA_PRIMARY); text = W_GetTextSelection(tPtr->view->screen, XA_PRIMARY);
if (!text) { if (!text) {
text = W_GetTextSelection(tPtr->view->screen, text = W_GetTextSelection(tPtr->view->screen,
tPtr->view->screen->clipboardAtom); tPtr->view->screen->clipboardAtom);
} }
if (!text) { if (!text) {
@@ -1363,13 +1395,30 @@ handleTextFieldActionEvents(XEvent *event, void *data)
} }
break; break;
case ButtonRelease: case ButtonRelease:
if (tPtr->flags.pointerGrabbed) { if (tPtr->flags.pointerGrabbed) {
tPtr->flags.pointerGrabbed = 0; tPtr->flags.pointerGrabbed = 0;
XUngrabPointer(WMScreenDisplay(W_VIEW(tPtr)->screen), CurrentTime); XUngrabPointer(WMScreenDisplay(W_VIEW(tPtr)->screen), CurrentTime);
} }
move = 0;
if (event->xbutton.time - lastButtonReleasedEvent
<= WINGsConfiguration.doubleClickDelay) {
tPtr->selection.position = 0;
tPtr->selection.count = tPtr->textLen;
paintTextField(tPtr);
XSetSelectionOwner(tPtr->view->screen->display,
XA_PRIMARY, tPtr->view->window, event->xbutton.time);
{
WMNotification *notif = WMCreateNotification("_lostOwnership",
NULL,tPtr);
WMPostNotification(notif);
WMReleaseNotification(notif);
}
}
lastButtonReleasedEvent = event->xbutton.time;
move = 0;
break; break;
} }
} }

View File

@@ -441,7 +441,7 @@ msgstr ""
"\"Gimmicks\" und Animationen ein-/ausschalten. Z.B.\n" "\"Gimmicks\" und Animationen ein-/ausschalten. Z.B.\n"
"das \"Ghosting\" einen bewegten Docks wenn es aus die\n" "das \"Ghosting\" einen bewegten Docks wenn es aus die\n"
"andere Seite gezogen wird und die \"Explosion\" für\n" "andere Seite gezogen wird und die \"Explosion\" für\n"
"aus dem Dock genommene Icons.\n" "aus dem Dock genommene Icons."
#: ../../WPrefs.app/Configurations.c:396 #: ../../WPrefs.app/Configurations.c:396
msgid "Sounds" msgid "Sounds"
@@ -504,7 +504,7 @@ msgid ""
msgstr "" msgstr ""
"Animationsgeschwindigkeit, Titelzeilen-Stil, diverse\n" "Animationsgeschwindigkeit, Titelzeilen-Stil, diverse\n"
"Optionen und für Window Maker reservierte Farbtiefe\n" "Optionen und für Window Maker reservierte Farbtiefe\n"
"bei 8bit-Displays\n" "bei 8bit-Displays"
#: ../../WPrefs.app/Expert.c:74 #: ../../WPrefs.app/Expert.c:74
msgid "Disable miniwindows (icons for miniaturized windows). For use with KDE/GNOME." msgid "Disable miniwindows (icons for miniaturized windows). For use with KDE/GNOME."
@@ -1184,7 +1184,7 @@ msgstr "konnte tempor
#: ../../WPrefs.app/MouseSettings.c:843 #: ../../WPrefs.app/MouseSettings.c:843
msgid "could not rename file %s to %s\n" msgid "could not rename file %s to %s\n"
msgstr "konnte Datei %s nicht in Datei %s umbenennen" msgstr "konnte Datei %s nicht in Datei %s umbenennen\n"
#: ../../WPrefs.app/MouseSettings.c:927 #: ../../WPrefs.app/MouseSettings.c:927
msgid "Mouse Preferences" msgid "Mouse Preferences"
@@ -1531,7 +1531,7 @@ msgid ""
"frame should be displayed.\n" "frame should be displayed.\n"
msgstr "" msgstr ""
"Ob die Fenster mit Inhalt verschoben werden\n" "Ob die Fenster mit Inhalt verschoben werden\n"
"oder nur ein Rahmen angezeigt werden soll." "oder nur ein Rahmen angezeigt werden soll.\n"
#: ../../WPrefs.app/WindowHandling.c:341 #: ../../WPrefs.app/WindowHandling.c:341
msgid "When maximizing..." msgid "When maximizing..."

View File

@@ -826,7 +826,7 @@ msgid ""
"Always open submenus inside the screen, instead of scrolling.\n" "Always open submenus inside the screen, instead of scrolling.\n"
"Note: this can be an annoyance at some circumstances.\n" "Note: this can be an annoyance at some circumstances.\n"
msgstr "" msgstr ""
"÷ÓÅÇÄÁ ÏÔËÒÙ×ÁÔØ ÐÏÄÍÅÎÀ ×ÎÕÔÒÉ ÜËÒÁÎÁ, ×ÍÅÓÔÏ ÐÒÏËÒÕÔËÉ." "÷ÓÅÇÄÁ ÏÔËÒÙ×ÁÔØ ÐÏÄÍÅÎÀ ×ÎÕÔÒÉ ÜËÒÁÎÁ, ×ÍÅÓÔÏ ÐÒÏËÒÕÔËÉ.\n"
#: ../../WPrefs.app/MenuPreferences.c:209 #: ../../WPrefs.app/MenuPreferences.c:209
msgid "Scroll off-screen menus when pointer is moved over them." msgid "Scroll off-screen menus when pointer is moved over them."

View File

@@ -10,7 +10,7 @@ CLEANFILES = Default.iconset
Default.iconset: $(top_srcdir)/WindowMaker/Defaults/WMWindowAttributes Default.iconset: $(top_srcdir)/WindowMaker/Defaults/WMWindowAttributes
-rm -f Default.iconset -rm -f Default.iconset
echo '{' > Default.iconset echo '{' > Default.iconset
grep Icon $(top_srcdir)/WindowMaker/Defaults/WMWindowAttributes >> Default.iconset grep Icon $(top_builddir)/WindowMaker/Defaults/WMWindowAttributes >> Default.iconset
echo '}' >> Default.iconset echo '}' >> Default.iconset
chmod 644 Default.iconset chmod 644 Default.iconset

View File

@@ -25,6 +25,7 @@ prefsdata_DATA =\
menu.ko\ menu.ko\
menu.nl\ menu.nl\
menu.no\ menu.no\
menu.pl\
menu.pt\ menu.pt\
menu.ru\ menu.ru\
menu.se\ menu.se\

View File

@@ -1,5 +1,5 @@
/* /*
* Το Root μενού του WindowMaker * Το Μητρικό μενού του Window Maker
* *
* Η σύνταξη είναι: * Η σύνταξη είναι:
* *
@@ -16,72 +16,79 @@
* Δεν μπορεί να δηλωθεί ένα shortcut για MENU και για OPEN_MENU εντολή. * Δεν μπορεί να δηλωθεί ένα shortcut για MENU και για OPEN_MENU εντολή.
* *
* <Command> μία από τις εντολές: * <Command> μία από τις εντολές:
* MENU - το σημείο που ξεκινά ένα (υπο)μενού * MENU - το σημείο που ξεκινά ένα υπομενού
* END - το σημείο που τελειώνει ένα (υπο)μενού * END - το σημείο που τελειώνει ένα υπομενού
* OPEN_MENU - ανοίγει ένα μενού από ένα αρχείο, pipe ή τα περιεχόμενα ενός * OPEN_MENU - ανοίγει ένα μενού από ένα αρχείο, pipe ή τα περιεχόμενα ενός
* καταλόγου(ων) και αντιστοιχεί μια εντολή στο καθένα. * καταλόγου(ων) και αντιστοιχεί μια εντολή στο καθένα.
* WORKSPACE_MENU - προσθέτει ένα υπομενού για τη διαχείρηση των Επιφανειών. * WORKSPACE_MENU - προσθέτει το υπομενού για τη διαχείρηση των Επιφανειών.
* Μόνο ένα workspace_menu επιτρέπεται. * Μόνο ένα workspace_menu επιτρέπεται.
* EXEC <program> - εκτέλεση προγράμματος * EXEC <program> - εκτέλεση προγράμματος
* EXIT - έξοδος από τον window manager * SHEXEC <command> - εκτέλεση εντολής κέλυφους (όπως gimp > /dev/null)
* RESTART [<window manager>] - επανεκκινεί τον Window Maker ή ξεκινάει ένας * EXIT - έξοδος από τον Διαχειριστή Παραθύρων
* άλλος window manager * RESTART [<window manager>] - επανεκκινεί τον Window Maker ή ξεκινάει
* ένας άλλος window manager
* REFRESH - ανανεώνει την προβολή της Επιφάνειας στην οθόνη * REFRESH - ανανεώνει την προβολή της Επιφάνειας στην οθόνη
* ARRANGE_ICONS - τακτοποίηση των εικονιδίων στην Επιφάνεια * ARRANGE_ICONS - τακτοποίηση των εικονιδίων στην Επιφάνεια
* SHUTDOWN - τερματίζει βίαια όλους τους clients (και τερματίζει το X window * SHUTDOWN - τερματίζει βίαια όλους τους clients
* session) * (και τερματίζει το X window session)
* SHOW_ALL - εμφανίζει όλα τα "κρυμένα" παράθυρα στην Επιφάνεια * SHOW_ALL - εμφανίζει όλα τα "κρυμμένα" παράθυρα στην Επιφάνεια
* HIDE_OTHERS - "κρύβει" όλα τα παράθυρα στην Επιφάνεια, εκτός από * HIDE_OTHERS - "κρύβει" όλα τα παράθυρα στην Επιφάνεια, εκτός από
* αυτό που είναι "ενεργό" (ή το τελευταίο που ήταν "ενεργό") * αυτό που είναι "ενεργό" (ή το τελευταίο που ήταν "ενεργό")
* SAVE_SESSION - αποθηκεύει το εκάστοτε "κατάσταση" της Επιφάνειας, το οποίο * SAVE_SESSION - αποθηκεύει την εκάστοτε "κατάσταση" της Επιφάνειας, το
* σημαίνει, όλα τα προγράμματα που εκτελούνται εκείνη τη * οποίο σημαίνει, όλα τα προγράμματα που εκτελούνται εκείνη τη
* στιγμή με όλες τους τις ιδιότητες (γεωμετρία, θέση στην * στιγμή με όλες τους τις ιδιότητες (γεωμετρία, θέση στην
* οθόνη, επιφάνεια εργασίας στην οποία έχουν εκτελεστεί, Dock ή * οθόνη, επιφάνεια εργασίας στην οποία έχουν εκτελεστεί, Dock ή
* Clip από όπου εκτελέστηκαν, αν είναι ελαχιστοποιημένα, * Clip από όπου εκτελέστηκαν, αν είναι ελαχιστοποιημένα,
* αναδιπλωμένα ή κρυμμένα). Επίσης αποθηκεύει σε πια Επιφάνεια * αναδιπλωμένα ή κρυμμένα). Επίσης αποθηκεύει σε πια Επιφάνεια
* εργασίας ήταν ο χρήστης την τελευταία φορά. Όλες οι * εργασίας ήταν ο χρήστης την τελευταία φορά. Όλες οι
* θα ανακληθούν την επόμενη φορά που ο χρήστης * θα ανακληθούν την επόμενη φορά που ο χρήστης
* εκκινίσει τον Window Maker μέχρι η εντολή SAVE_SESSION ή * εκκινήσει τον Window Maker μέχρι η εντολή SAVE_SESSION ή
* CLEAR_SESSION χρησιμοποιηθούν. Αν στο αρχείο Window Maker του * CLEAR_SESSION χρησιμοποιηθούν. Αν στο αρχείο Window Maker του
* καταλόγου "$HOME/GNUstep/Defaults/" υπάρχει η εντολή: * καταλόγου "$HOME/GNUstep/Defaults/" υπάρχει η εντολή:
* "SaveSessionOnExit = Yes;", τότε όλα τα παραπάνω γίνονται * "SaveSessionOnExit = Yes;", τότε όλα τα παραπάνω γίνονται
* αυτόματα με κάθε έξοδο του χρήστη από τον Window Maker, * αυτόματα με κάθε έξοδο του χρήστη από τον Window Maker,
* ακυρώνοντας ουσιαστικά κάθε προηγούμενη χρήση τως εντολών * ακυρώνοντας ουσιαστικά κάθε προηγούμενη χρήση τως εντολών
* SAVE_SESSION ή CLEAR_SESSION (βλέπε παρακάτω). * SAVE_SESSION ή CLEAR_SESSION (βλέπε παρακάτω).
* CLEAR_SESSION - σβήνει όλες τις πληροφορίες που έχουν αποθηκευθεί σύμφωνα με * CLEAR_SESSION - σβήνει όλες τις πληροφορίες που έχουν αποθηκευθεί
* τα παραπάνω. Δεν θα έχει όμως κανένα αποτέλεσμα αν η εντολή * σύμφωνα με τα παραπάνω. Δεν θα έχει όμως κανένα αποτέλεσμα
* SaveSessionOnExit=Yes. * αν η εντολή SaveSessionOnExit=Yes.
* INFO - Πληροφορίες σχετικά με τον Window Mmaker * INFO - Πληροφορίες σχετικά με τον Window Maker
* *
* OPEN_MENU σύνταξη: * OPEN_MENU σύνταξη:
* 1. Χειρισμός ενός αρχείου-μενού. * 1. Χειρισμός ενός αρχείου-μενού.
* // ανοίγει το "αρχείο.μενού" το οποίο περιέχει ένα έγκυρο αρχείο-μενού και * // ανοίγει το "αρχείο.μενού" το οποίο περιέχει ένα έγκυρο αρχείο-μενού
* // το εισάγει στην εκάστοτε θέση * // καιτο εισάγει στην εκάστοτε θέση
* OPEN_MENU αρχείο.μενού * OPEN_MENU αρχείο.μενού
* 2. Χειρισμός ενός Pipe μενού. * 2. Χειρισμός ενός Pipe μενού.
* // τρέχει μια εντολή και χρησιμοποιεί την stdout αυτής για την κατασκευή του * // τρέχει μια εντολή και χρησιμοποιεί την stdout αυτής για την κατασκευή
* // μενού. Το αποτέλεσμα της εντολής πρέπει να έχει έγκυρη σύνταξη για χρήση * // του μενού. Το αποτέλεσμα της εντολής πρέπει να έχει έγκυρη σύνταξη
* // ως μενού. Το κενό διάστημα μεταξύ "|" και "εντολής" είναι προεραιτικό. * // για χρήση ως μενού. Το κενό διάστημα μεταξύ "|" και "εντολής" είναι
* // προεραιτικό.
* OPEN_MENU | εντολή * OPEN_MENU | εντολή
* 3. Χειρισμός ενός καταλόγου. * 3. Χειρισμός ενός καταλόγου.
* // Ανοίγει έναν ή περισσότερους καταλόγους και κατασκευάζει ένα μενού με * // Ανοίγει έναν ή περισσότερους καταλόγους και κατασκευάζει ένα μενού με
* // όλους τους υποκαταλόγους και τα εκτελέσιμα αρχεία σε αυτούς κατανεμημένα * // όλους τους υποκαταλόγους και τα εκτελέσιμα αρχεία σε αυτούς
* // αλφαβητικά. * // κατανεμημένα αλφαβητικά.
* OPEN_MENU /κάποιος/κατάλογος [/κάποιος/άλλος/κατάλογος ...] * OPEN_MENU /κάποιος/κατάλογος [/κάποιος/άλλος/κατάλογος ...]
* 4. Χειρισμός ενός καταλόγου με κάποια εντολή. * 4. Χειρισμός ενός καταλόγου με κάποια εντολή.
* // Ανοίγει έναν ή περισσότερους καταλόγους και κατασκευάζει ένα μενού με * // Ανοίγει έναν ή περισσότερους καταλόγους και κατασκευάζει ένα μενού με
* // όλους τους υποκαταλόγους και τα αναγνώσιμα αρχεία σε αυτούς κατανεμημένα * // όλους τους υποκαταλόγους και τα αναγνώσιμα αρχεία σε αυτούς
* // αλφαβητικά, τα οποία μπορούν να εκτελεστούν με μία εντολή. * // κατανεμημένα αλφαβητικά, τα οποία μπορούν να εκτελεστούν με μία
* // εντολή.
* OPEN_MENU /κάποιος/κατάλογος [/κάποιος/άλλος/κατάλογος ...] WITH εντολή -παράμετροι * OPEN_MENU /κάποιος/κατάλογος [/κάποιος/άλλος/κατάλογος ...] WITH εντολή -παράμετροι
* * Παράμετροι:
* -noext αφαιρεί ότι βρίσκεται μετά την τελευταία τελεία του
* ονόματος του αρχείου.
* *
* <Parameters> είναι το πρόγραμμα προς εκτέλεση. * <Parameters> είναι το πρόγραμμα προς εκτέλεση.
* *
* ** Παράμετροι για την εντολή EXEC: * ** Παράμετροι για την εντολή EXEC:
* %s - Αντικατάσταση με την εκάστοτε επιλογή. * %s - Αντικατάσταση με την εκάστοτε επιλογή.
* %a(μύνημα) - Ανοίγει ένα παράθυρο εισαγωγής δεδομένων και αντικαθιστά με αυτό * %a(τίτλος[,προτροπή]) - Ανοίγει ένα παράθυρο εισαγωγής δεδομένων με τον
* που πληκτρολογήθηκε. * προκαθορισμένο τίτλο και την προεραιτική προτροπή
* και αντικαθιστά με αυτό που πληκτρολογήθηκε.
* %w - Αντικατάσταση με την XID του εκάστοτε ενεργού παραθύρου * %w - Αντικατάσταση με την XID του εκάστοτε ενεργού παραθύρου
* %W - Αντικατάσταση με τον αριθμό της εκάστοτε Επιφάνειας
* *
* Μπορούν να εισαχθούν ειδικοί χαρακτήρες (όπως % ή ") με τον χαρακτήρα \: * Μπορούν να εισαχθούν ειδικοί χαρακτήρες (όπως % ή ") με τον χαρακτήρα \:
* π.χ.: xterm -T "\"Καλημέρα Σου\"" * π.χ.: xterm -T "\"Καλημέρα Σου\""
@@ -99,7 +106,7 @@
* // some X11 apps in different directories * // some X11 apps in different directories
* "X11 apps" OPEN_MENU /usr/X11/bin $HOME/bin/X11 * "X11 apps" OPEN_MENU /usr/X11/bin $HOME/bin/X11
* // set some background images * // set some background images
* "Φόντο" OPEN_MENU $HOME/images /usr/share/images WITH wmsetbg -u -t * "Παρασκήνιο" OPEN_MENU $HOME/images /usr/share/images WITH wmsetbg -u -t
* // inserts the style.menu in this entry * // inserts the style.menu in this entry
* "Στυλ" OPEN_MENU style.menu * "Στυλ" OPEN_MENU style.menu
* "Δοκιμαστικό" END * "Δοκιμαστικό" END
@@ -109,15 +116,16 @@
"Μενού" MENU "Μενού" MENU
"Πληροφορίες" MENU "Πληροφορίες" MENU
"Info..." INFO_PANEL "Σχετικά..." INFO_PANEL
"Legal..." LEGAL_PANEL "Νομικά..." LEGAL_PANEL
"System Console" EXEC xconsole "Κονσόλα Συστήματος" EXEC xconsole
"System Load" SHEXEC xosview || xload "Εργασία Συστήματος" SHEXEC xosview || xload
"Process List" EXEC xterm -e top "Λίστα Εργασιών" EXEC xterm -e top
"Βοήθεια" EXEC xman "Βοήθεια" EXEC xman
"Πληροφορίες" END "Πληροφορίες" END
"Εκτέλεση..." SHEXEC %a(Εκτέλεση,Γράψε την εντολή προς εκτέλεση:)
"XTerm" EXEC xterm -sb "XTerm" EXEC xterm -sb
"Rxvt" EXEC rxvt -bg black -fg white -fn fixed "Rxvt" EXEC rxvt -bg black -fg white -fn grfixed
"Επιφάνειες" WORKSPACE_MENU "Επιφάνειες" WORKSPACE_MENU
"Προγράμματα" MENU "Προγράμματα" MENU
"Γραφικά" MENU "Γραφικά" MENU
@@ -131,7 +139,7 @@
"LyX" EXEC lyx "LyX" EXEC lyx
"Netscape" EXEC netscape "Netscape" EXEC netscape
"Ghostview" EXEC ghostview %a(Αρχείο προς ανάγνωση) "Ghostview" EXEC ghostview %a(Αρχείο προς ανάγνωση)
"Acrobat" EXEC /usr/local/Acrobat3/bin/acroread %a(Αρχείο προς ανάγνωση) "Acrobat" EXEC /usr/local/Acrobat3/bin/acroread %a(Acrobar,Γράψε το PDF προς προβολή)
"TkDesk" EXEC tkdesk "TkDesk" EXEC tkdesk
"Προγράμματα" END "Προγράμματα" END
"Κειμενογράφοι" MENU "Κειμενογράφοι" MENU
@@ -154,9 +162,9 @@
"Εξομοιωτής Τερματικού" EXEC xminicom "Εξομοιωτής Τερματικού" EXEC xminicom
"Μεγέθυνση" EXEC xmag "Μεγέθυνση" EXEC xmag
"Χάρτης Χρωμάτων" EXEC xcmap "Χάρτης Χρωμάτων" EXEC xcmap
"XKill" EXEC xkill "Θανάτωση Παραθύρου" EXEC xkill
"ASClock" EXEC asclock -shape "Ρολόι" EXEC asclock -shape
"Clipboard" EXEC xclipboard "Πρόχειρο" EXEC xclipboard
"Εργαλεία" END "Εργαλεία" END
"Επιλογή" MENU "Επιλογή" MENU
@@ -172,40 +180,47 @@
"Τακτοποίηση Εικονιδίων" ARRANGE_ICONS "Τακτοποίηση Εικονιδίων" ARRANGE_ICONS
"Ανανέωση Προβολής" REFRESH "Ανανέωση Προβολής" REFRESH
"Κλείδωμα" EXEC xlock -allowroot -usefirst "Κλείδωμα" EXEC xlock -allowroot -usefirst
"Σώσιμο Κατάστασης" SAVE_SESSION "Σώσιμο Session" SAVE_SESSION
"Διαγραφή σωσμένης Κατάστασης" CLEAR_SESSION "Διαγραφή σωσμένου Session" CLEAR_SESSION
"Επιφάνεια" END "Επιφάνεια" END
"Εμφάνιση" MENU "Εμφάνιση" MENU
"Θέματα" OPEN_MENU -noext THEMES_DIR $HOME/GNUstep/Library/WindowMaker/Themes WITH setstyle "Θέματα" OPEN_MENU -noext THEMES_DIR $HOME/GNUstep/Library/WindowMaker/Themes WITH setstyle
"Στυλ" OPEN_MENU -noext STYLES_DIR $HOME/GNUstep/Library/WindowMaker/Styles WITH setstyle "Στυλ" OPEN_MENU -noext STYLES_DIR $HOME/GNUstep/Library/WindowMaker/Styles WITH setstyle
"Ομάδα Εικονιδίων" OPEN_MENU -noext ICON_SETS_DIR $HOME/GNUstep/Library/WindowMaker/IconSets WITH seticons "Ομάδα Εικονιδίων" OPEN_MENU -noext ICON_SETS_DIR $HOME/GNUstep/Library/WindowMaker/IconSets WITH seticons
"Φόντο" MENU "Παρασκήνιο" MENU
"Μονόχρωμο" MENU "Μονόχρωμο" MENU
"Μαύρο" WS_BACK '(solid, black)' "Μαύρο" WS_BACK '(solid, black)'
"Μπλε" WS_BACK '(solid, "#505075")' "Μπλε" WS_BACK '(solid, "#505075")'
"Λουλακί" WS_BACK '(solid, "#243e6c")' "Λουλακί" WS_BACK '(solid, "#243e6c")'
"Σκούρο Μπλε" WS_BACK '(solid, "#180090")' "Σκούρο Μπλε" WS_BACK '(solid, "#180090")'
"Βυσσινί" WS_BACK '(solid, "#554466")' "Βυσσινί" WS_BACK '(solid, "#554466")'
"Σταρένιο" WS_BACK '(solid, "wheat4")' "Σταρένιο" WS_BACK '(solid, "wheat4")'
"Σκούρο Γκρι" WS_BACK '(solid, "#333340")' "Σκούρο Γκρι" WS_BACK '(solid, "#333340")'
"Κρασιού" WS_BACK '(solid, "#400020")' "Κοκκινωπό" WS_BACK '(solid, "#400020")'
"Μονόχρωμο" END "Μονόχρωμο" END
"Διαβαθμισμένο" MENU "Διαβαθμισμένο" MENU
"Σημαία" WS_BACK '(mdgradient, green, red, white, green)' "Ηλιοβασίλεμα" WS_BACK '(mvgradient, deepskyblue4, black, deepskyblue4, tomato4)'
"Ουράνος" WS_BACK '(vgradient, blue4, white)' "Ουρανός" WS_BACK '(vgradient, blue4, white)'
"Μπλε Αποχρώσεις" WS_BACK '(vgradient, "#7080a5", "#101020")'
"Λουλακί Αποχρώσεις" WS_BACK '(vgradient, "#746ebc", "#242e4c")'
"Βυσσινί Αποχρώσεις" WS_BACK '(vgradient, "#654c66", "#151426")'
"Σταρένιες Αποχρώσεις" WS_BACK '(vgradient, "#a09060", "#302010")'
"Γκρίζες Αποχρώσεις" WS_BACK '(vgradient, "#636380", "#131318")'
"Κοκκινωπές Αποχρώσεις" WS_BACK '(vgradient, "#600040", "#180010")'
"Διαβαθμισμένο" END "Διαβαθμισμένο" END
"Εικόνες" OPEN_MENU -noext BACKGROUNDS_DIR $HOME/GNUstep/Library/WindowMaker/Backgrounds WITH wmsetbg -u -t "Εικόνες" OPEN_MENU -noext BACKGROUNDS_DIR $HOME/GNUstep/Library/WindowMaker/Backgrounds WITH wmsetbg -u -t
"Φόντο" END "Παρασκήνιο" END
"Αποθήκευση Θέματος" SHEXEC getstyle -t $HOME/GNUstep/Library/WindowMaker/Themes/"%a(Όνομα Θέματος)" "Αποθήκευση Θέματος" SHEXEC getstyle -t $HOME/GNUstep/Library/WindowMaker/Themes/"%a(Όνομα Θέματος,Γράψε το όνομα του αρχείου:)"
"Αποθήκευση Ομάδας Εικονιδίων" SHEXEC geticonset $HOME/GNUstep/Library/WindowMaker/IconSets/"%a(Όνομα Ομάδας)" "Αποθήκευση Ομάδας Εικονιδίων" SHEXEC geticonset $HOME/GNUstep/Library/WindowMaker/IconSets/"%a(Όνομα Ομάδας,Γράψε το όνομα του αρχείου:)"
"Εμφάνιση" END "Εμφάνιση" END
"Έξοδος" MENU "Έξοδος" MENU
"Επανεκκίνηση" RESTART "Επανεκκίνηση" RESTART
"Εκκίνηση του AfterStep" RESTART afterstep "Εκκίνηση του BlackBox" RESTART blackbox
"Έξοδος..." EXIT "Εκκίνηση του kwm" RESTART kwm
"Πλήρης Έξοδος..." SHUTDOWN "Εκκίνηση του IceWM" RESTART icewm
"Έξοδος..." EXIT
"Έξοδος" END "Έξοδος" END
"Μενού" END "Μενού" END

643
po/da.po

File diff suppressed because it is too large Load Diff

2641
po/el.po

File diff suppressed because it is too large Load Diff

View File

@@ -133,11 +133,18 @@ processEvents(int event_count)
void void
wSetFocusTo(WScreen *scr, WWindow *wwin) wSetFocusTo(WScreen *scr, WWindow *wwin)
{ {
static WScreen *old_scr=NULL;
WWindow *old_focused;
WWindow *focused=scr->focused_window; WWindow *focused=scr->focused_window;
int timestamp=LastTimestamp; int timestamp=LastTimestamp;
WApplication *oapp=NULL, *napp=NULL; WApplication *oapp=NULL, *napp=NULL;
int wasfocused; int wasfocused;
if (!old_scr)
old_scr=scr;
old_focused=old_scr->focused_window;
LastFocusChange = timestamp; LastFocusChange = timestamp;
/* /*
@@ -148,13 +155,13 @@ wSetFocusTo(WScreen *scr, WWindow *wwin)
*/ */
timestamp = CurrentTime; timestamp = CurrentTime;
if (focused) if (old_focused)
oapp = wApplicationOf(focused->main_window); oapp = wApplicationOf(old_focused->main_window);
if (wwin == NULL) { if (wwin == NULL) {
XSetInputFocus(dpy, scr->no_focus_win, RevertToParent, timestamp); XSetInputFocus(dpy, scr->no_focus_win, RevertToParent, timestamp);
if (focused) { if (old_focused) {
wWindowUnfocus(focused); wWindowUnfocus(old_focused);
} }
if (oapp) { if (oapp) {
wAppMenuUnmap(oapp->menu); wAppMenuUnmap(oapp->menu);
@@ -167,7 +174,10 @@ wSetFocusTo(WScreen *scr, WWindow *wwin)
wKWMSendEventMessage(NULL, WKWMFocusWindow); wKWMSendEventMessage(NULL, WKWMFocusWindow);
#endif #endif
return; return;
} else if(old_scr != scr && old_focused) {
wWindowUnfocus(old_focused);
} }
wasfocused = wwin->flags.focused; wasfocused = wwin->flags.focused;
napp = wApplicationOf(wwin->main_window); napp = wApplicationOf(wwin->main_window);
@@ -245,6 +255,7 @@ wSetFocusTo(WScreen *scr, WWindow *wwin)
wKWMSendEventMessage(wwin, WKWMFocusWindow); wKWMSendEventMessage(wwin, WKWMFocusWindow);
#endif #endif
XFlush(dpy); XFlush(dpy);
old_scr=scr;
} }

View File

@@ -352,12 +352,14 @@ listIconPaths(WMList *lPtr)
} }
void drawIconProc(WMList *lPtr, int index, Drawable d, char *text, void
int state, WMRect *rect) { drawIconProc(WMList *lPtr, int index, Drawable d, char *text,
int state, WMRect *rect)
{
IconPanel *panel = WMGetHangedData(lPtr); IconPanel *panel = WMGetHangedData(lPtr);
GC gc = panel->scr->draw_gc; GC gc = panel->scr->draw_gc;
GC copygc = panel->scr->copy_gc; GC copygc = panel->scr->copy_gc;
char *buffer, *dirfile, *iconfile; char *buffer, *dirfile;
WMPixmap *pixmap; WMPixmap *pixmap;
WMColor *blackcolor; WMColor *blackcolor;
WMColor *whitecolor; WMColor *whitecolor;
@@ -383,29 +385,53 @@ void drawIconProc(WMList *lPtr, int index, Drawable d, char *text,
return; return;
} }
XClearArea(dpy, d, rect->pos.x,rect->pos.y, width, 64, False); XClearArea(dpy, d, rect->pos.x, rect->pos.y, width, rect->size.height,
False);
XSetClipMask(dpy, gc, None); XSetClipMask(dpy, gc, None);
XDrawRectangle(dpy, d, WMColorGC(whitecolor), rect->pos.x + 5,rect->pos.y +5, width - 10, 54); /*
XDrawRectangle(dpy, d, WMColorGC(whitecolor), rect->pos.x + 5,
rect->pos.y +5, width - 10, 54);
*/
XDrawLine(dpy, d, WMColorGC(whitecolor), rect->pos.x,
rect->pos.y+rect->size.height-1, rect->pos.x+width,
rect->pos.y+rect->size.height-1);
if (state&WLDSSelected) { if (state&WLDSSelected) {
XFillRectangle(dpy, d, WMColorGC(whitecolor), rect->pos.x + 5,rect->pos.y +5, width - 10, 54); XFillRectangle(dpy, d, WMColorGC(whitecolor), rect->pos.x,
rect->pos.y, width, rect->size.height);
} }
size = WMGetPixmapSize(pixmap);
XSetClipMask(dpy, copygc, WMGetPixmapMaskXID(pixmap)); XSetClipMask(dpy, copygc, WMGetPixmapMaskXID(pixmap));
XSetClipOrigin(dpy, copygc, rect->pos.x, rect->pos.y); XSetClipOrigin(dpy, copygc, rect->pos.x + (width-size.width)/2,
size = WMGetPixmapSize(pixmap); rect->pos.y+2);
XCopyArea(dpy, WMGetPixmapXID(pixmap), d, copygc, 0, 0, XCopyArea(dpy, WMGetPixmapXID(pixmap), d, copygc, 0, 0,
size.width>100?100:size.width, size.height>64?64:size.height, rect->pos.x,rect->pos.y); size.width>100?100:size.width, size.height>64?64:size.height,
rect->pos.x + (width-size.width)/2, rect->pos.y+2);
{ {
int i,j; int i,j;
for(i=-1;i<2;i++) int fheight = WMFontHeight(panel->normalfont);
for(j=-1;j<2;j++) int tlen = strlen(text);
WMDrawString(wmscr, d, WMColorGC(whitecolor), panel->normalfont , rect->pos.x+i+7, rect->pos.y+62+j-WMFontHeight(panel->normalfont), text, strlen(text)); int twidth = WMWidthOfString(panel->normalfont, text, tlen);
} int ofx, ofy;
WMDrawString(wmscr, d, WMColorGC(blackcolor), panel->normalfont , rect->pos.x+7, rect->pos.y+62-WMFontHeight(panel->normalfont), text, strlen(text));
WMReleasePixmap(pixmap); ofx = rect->pos.x + (width - twidth)/2;
ofy = rect->pos.y + 64 - fheight;
for(i=-1;i<2;i++)
for(j=-1;j<2;j++)
WMDrawString(wmscr, d, WMColorGC(whitecolor),
panel->normalfont, ofx+i, ofy+j,
text, tlen);
WMDrawString(wmscr, d, WMColorGC(blackcolor), panel->normalfont,
ofx, ofy, text, tlen);
}
WMReleasePixmap(pixmap);
/* I hope it is better to do not use cache / on my box it is fast nuff */ /* I hope it is better to do not use cache / on my box it is fast nuff */
XFlush(dpy); XFlush(dpy);
@@ -413,6 +439,7 @@ void drawIconProc(WMList *lPtr, int index, Drawable d, char *text,
WMReleaseColor(whitecolor); WMReleaseColor(whitecolor);
} }
static void static void
buttonCallback(void *self, void *clientData) buttonCallback(void *self, void *clientData)
{ {
@@ -429,7 +456,7 @@ buttonCallback(void *self, void *clientData)
} else if (bPtr==panel->previewButton) { } else if (bPtr==panel->previewButton) {
/**** Previewer ****/ /**** Previewer ****/
WMSetButtonEnabled(bPtr, False); WMSetButtonEnabled(bPtr, False);
WMSetListUserDrawItemHeight(panel->iconList, 64); WMSetListUserDrawItemHeight(panel->iconList, 68);
WMSetListUserDrawProc(panel->iconList, drawIconProc); WMSetListUserDrawProc(panel->iconList, drawIconProc);
WMRedisplayWidget(panel->iconList); WMRedisplayWidget(panel->iconList);
/* for draw proc to access screen/gc */ /* for draw proc to access screen/gc */

View File

@@ -157,13 +157,13 @@ MakeCPPArgs(char *path)
tmp = wstrdup(path); tmp = wstrdup(path);
buf = strchr(tmp+1, ' '); buf = strchr(tmp+1, ' ');
if (buf) { if (buf) {
*buf = 0; *buf = 0;
} }
buf = strrchr(tmp, '/'); buf = strrchr(tmp, '/');
if (buf) { if (buf) {
*buf = 0; /* trunc filename */ *buf = 0; /* trunc filename */
putdef(line, " -I", tmp); putdef(line, " -I", tmp);
} }
free(tmp); free(tmp);
} }

View File

@@ -38,7 +38,7 @@ libwraster_la_SOURCES = \
INCLUDES = @DFLAGS@ @HEADER_SEARCH_PATH@ INCLUDES = @DFLAGS@ @HEADER_SEARCH_PATH@
LIBLIST = libwraster.la @LIBRARY_SEARCH_PATH@ @GFXLIBS@ @XLIBS@ -lm LIBLIST = $(top_builddir)/wrlib/libwraster.la @LIBRARY_SEARCH_PATH@ @GFXLIBS@ @XLIBS@ -lm
view_SOURCES= view.c view_SOURCES= view.c