Hello - I have a couple of fixes related to keyboard navigation in dtfile:
Action procs for view scroll bars are called with empty string parameters, resulting in conversion warnings from Xm, when scrolling using Page Up/Down keys.
Due to an ambiguous entry in the translation table, the Return key (default action) handler is not reached unless a modifier key is pressed.
The DtIcon widget handles keyboard events as mouse clicks, this results in delayed reaction (double-click delay). The patch adds handling of KeyPress events.
>From 8b0b6f2541618ef09db82c19a05599ef3eaa2a3a Mon Sep 17 00:00:00 2001 From: alx <a...@fastestcode.org> Date: Thu, 23 Jul 2015 20:01:22 +0200 Subject: [PATCH 1/4] dtfile: fixed file view scrolling with Page Up/Down keys --- cde/programs/dtfile/IconWindow.c | 23 +++++++---------------- 1 file changed, 7 insertions(+), 16 deletions(-) diff --git a/cde/programs/dtfile/IconWindow.c b/cde/programs/dtfile/IconWindow.c index 6bf37ff..f518eab 100644 --- a/cde/programs/dtfile/IconWindow.c +++ b/cde/programs/dtfile/IconWindow.c @@ -776,15 +776,10 @@ FileWindowInputCallback( file_mgr_rec->vertical_scroll_bar, file_mgr_rec->scroll_window)) { - String p; - - p = (String) XtMalloc(sizeof(char *)); - *p = (char) 0; - XtCallActionProc( file_mgr_rec->vertical_scroll_bar, - "PageUpOrLeft", new_event, - (char **) &p, 1 ); - XtFree(p); - } + String p = "up"; + XtCallActionProc( file_mgr_rec->vertical_scroll_bar, + "PageUpOrLeft", new_event,&p, 1 ); + } } break; case osfXK_PageDown: @@ -794,13 +789,9 @@ FileWindowInputCallback( file_mgr_rec->vertical_scroll_bar, file_mgr_rec->scroll_window)) { - String p; - - p = (String) XtMalloc(sizeof(char *)); - *p = (char)0; - XtCallActionProc( file_mgr_rec->vertical_scroll_bar, - "PageDownOrRight", new_event, &p, 1 ); - XtFree(p); + String p = "down"; + XtCallActionProc( file_mgr_rec->vertical_scroll_bar, + "PageDownOrRight", new_event, &p, 1 ); } } break; -- 2.4.2
>From 7fbbeba10b42b6151ba9e32cf026013919d65b07 Mon Sep 17 00:00:00 2001 From: alx <a...@fastestcode.org> Date: Thu, 23 Jul 2015 20:03:23 +0200 Subject: [PATCH 2/4] dtfile: fixed ambiguity in the translation table --- cde/programs/dtfile/FileMgr.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/cde/programs/dtfile/FileMgr.c b/cde/programs/dtfile/FileMgr.c index 8f3be73..18950af 100644 --- a/cde/programs/dtfile/FileMgr.c +++ b/cde/programs/dtfile/FileMgr.c @@ -508,8 +508,7 @@ char translations_da[] = "\ :<Key>osfPageUp:FMInput(@)\n\ :<Key>F1:DrawingAreaInput() ManagerGadgetHelp()\n\ s c a <Key>c: ActivateClist(@)\n\ -~s ~m ~a <Key>Return:DrawingAreaInput() ManagerParentActivate()\n\ -<Key>Return:DrawingAreaInput() ManagerGadgetSelect()\n\ +~s ~m ~a <Key>Return:DrawingAreaInput() ManagerParentActivate() ManagerGadgetSelect()\n\ <Key>space:DrawingAreaInput() ManagerGadgetSelect()\n\ :<Key>plus:DrawingAreaInput() ManagerGadgetSelect()\n\ :<Key>minus:DrawingAreaInput() ManagerGadgetSelect()\n\ -- 2.4.2
>From 0fe09bcec6d425e7d46b69eecfb22520b020aaaf Mon Sep 17 00:00:00 2001 From: alx <a...@fastestcode.org> Date: Thu, 23 Jul 2015 20:27:20 +0200 Subject: [PATCH 3/4] DtWidget: added appropriate KeyPress event handler to DtIcon widget --- cde/lib/DtWidget/Icon.c | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/cde/lib/DtWidget/Icon.c b/cde/lib/DtWidget/Icon.c index d91a4b9..400fe97 100644 --- a/cde/lib/DtWidget/Icon.c +++ b/cde/lib/DtWidget/Icon.c @@ -1088,17 +1088,22 @@ IconActivate( } else { - delay = (unsigned long) - XtGetMultiClickTime (XtDisplay (g)); - G_ClickEvent (g) = (XButtonEvent *) - XtMalloc (sizeof (XButtonEvent)); - *(G_ClickEvent (g)) = *b_event; - G_Sync (g) = True; - G_ClickTimerID (g) = - XtAppAddTimeOut ( - XtWidgetToApplicationContext ((Widget)g), - delay, (XtTimerCallbackProc)ClickTimeout, - (XtPointer) g); + if(event->type==KeyPress){ + G_Armed(g)=False; + (*call_callback)(g,G_Callback(g),XmCR_SELECT,event); + }else{ + delay = (unsigned long) + XtGetMultiClickTime (XtDisplay (g)); + G_ClickEvent (g) = (XButtonEvent *) + XtMalloc (sizeof (XButtonEvent)); + *(G_ClickEvent (g)) = *b_event; + G_Sync (g) = True; + G_ClickTimerID (g) = + XtAppAddTimeOut ( + XtWidgetToApplicationContext ((Widget)g), + delay, (XtTimerCallbackProc)ClickTimeout, + (XtPointer) g); + } } if (G_ShadowThickness (g) > 0) -- 2.4.2
>From 933197967c213cb7eea1757493a0903e913f82e0 Mon Sep 17 00:00:00 2001 From: alx <a...@fastestcode.org> Date: Thu, 23 Jul 2015 20:51:47 +0200 Subject: [PATCH 4/4] DtWidget: resolved some compiler warnings --- cde/lib/DtWidget/ComboBox.c | 5 ++++- cde/lib/DtWidget/DialogBox.c | 2 +- cde/lib/DtWidget/Icon.c | 32 +++++++++++++++++--------------- cde/lib/DtWidget/MenuButton.c | 5 +++-- 4 files changed, 25 insertions(+), 19 deletions(-) diff --git a/cde/lib/DtWidget/ComboBox.c b/cde/lib/DtWidget/ComboBox.c index 3369adc..7aa63e5 100644 --- a/cde/lib/DtWidget/ComboBox.c +++ b/cde/lib/DtWidget/ComboBox.c @@ -117,6 +117,9 @@ express or implied warranty. /* some unpublished Motif interfaces */ #include <Xm/XmPrivate.h> +/* From MenuUtilP.h */ +extern int _XmGrabKeyboard(Widget widget, int owner_events, int pointer_mode, + int keyboard_mode, Time time) ; /* * MotifBc */ @@ -2286,7 +2289,7 @@ list_event_handler( Widget widget, if ( ShellPoppedUp(((ShellWidget)(Shell(combo_w)))) ) { _XmGrabKeyboard(widget, False, GrabModeAsync, GrabModeAsync, CurrentTime); - XtSetKeyboardFocus(List(combo_w), RevertToNone); + XtSetKeyboardFocus(List(combo_w), None); } break; case EnterNotify: diff --git a/cde/lib/DtWidget/DialogBox.c b/cde/lib/DtWidget/DialogBox.c index c7fc363..40ceb73 100644 --- a/cde/lib/DtWidget/DialogBox.c +++ b/cde/lib/DtWidget/DialogBox.c @@ -784,7 +784,7 @@ CreateChildren( XtManageChild (btn); XtAddCallback (btn, XmNactivateCallback, (XtCallbackProc)ButtonCallback, - (XtPointer)(i+1)); + (XtPointer)((long)(i+1))); button[i] = btn; l_p += b_delta; diff --git a/cde/lib/DtWidget/Icon.c b/cde/lib/DtWidget/Icon.c index 400fe97..b1287a1 100644 --- a/cde/lib/DtWidget/Icon.c +++ b/cde/lib/DtWidget/Icon.c @@ -85,6 +85,10 @@ extern void _DtRegisterNewConverters ( void ); extern char * _XmExtObjAlloc(int size); extern void _XmExtObjFree(XtPointer element); extern void _XmSelectColorDefault ( Widget, int, XrmValue * ); +/* From XmP.h */ +extern void _XmExtImportArgs( Widget w, ArgList args, Cardinal *num_args); +/* From TravActI.h */ +extern void _XmEnterGadget( Widget wid, XEvent *event, String*,Cardinal*); #define SPACING_DEFAULT 2 #define MARGIN_DEFAULT 2 @@ -1860,10 +1864,10 @@ Initialize( { G_MarginWidth (new) = XmeToHorizontalPixels ((Widget)new, G_UnitType (new), - (XtArgVal *)G_MarginWidth (new)); + (XtArgVal *)((long)G_MarginWidth (new))); G_MarginHeight (new) = XmeToVerticalPixels ((Widget)new, G_UnitType (new), - (XtArgVal *)G_MarginHeight (new)); + (XtArgVal *)((long)G_MarginHeight (new))); } /* Check for unspecified margins. @@ -1887,9 +1891,9 @@ Initialize( (G_PixmapPosition (new) == XmPIXMAP_LEFT || G_PixmapPosition (new) == XmPIXMAP_RIGHT) ? XmeToHorizontalPixels ((Widget)new, G_UnitType (new), - (XtArgVal *)G_Spacing (new)) + (XtArgVal *)((long)G_Spacing (new))) : XmeToVerticalPixels ((Widget)new, G_UnitType (new), - (XtArgVal *)G_Spacing (new)); + (XtArgVal *)((long)G_Spacing (new))); } /* Set width and height. @@ -2402,10 +2406,10 @@ SetValues( { G_MarginWidth (new) = XmeToHorizontalPixels ((Widget)new, G_UnitType (new), - (XtArgVal *)G_MarginWidth (new)); + (XtArgVal *)((long)G_MarginWidth (new))); G_MarginHeight (new) = XmeToVerticalPixels ((Widget)new, G_UnitType (new), - (XtArgVal *)G_MarginHeight (new)); + (XtArgVal *)((long)G_MarginHeight (new))); } /* Convert spacing. @@ -2417,9 +2421,9 @@ SetValues( (G_PixmapPosition (new) == XmPIXMAP_LEFT || G_PixmapPosition (new) == XmPIXMAP_RIGHT) ? XmeToHorizontalPixels ((Widget)new, G_UnitType (new), - (XtArgVal *)G_Spacing (new)) + (XtArgVal *)((long)G_Spacing (new))) : XmeToVerticalPixels ((Widget)new, G_UnitType (new), - (XtArgVal *)G_Spacing (new)); + (XtArgVal *)((long)G_Spacing (new))); } /* Process change in string or font list. @@ -2771,18 +2775,15 @@ InputDispatch( IconDisarm (w, (XEvent*) event); } else if (event_mask & XmHELP_EVENT) - _XmSocorro (w, (XEvent *)event, - (String *)NULL,(Cardinal)0); + _XmSocorro (w, (XEvent *)event,NULL,NULL); else if (event_mask & XmENTER_EVENT) IconEnter (w, (XEvent *)event); else if (event_mask & XmLEAVE_EVENT) IconLeave (w, (XEvent *)event); else if (event_mask & XmFOCUS_IN_EVENT) - _XmFocusInGadget (w, (XEvent *)event, - (String *)NULL,(Cardinal)0); + _XmFocusInGadget (w, (XEvent *)event,NULL,NULL); else if (event_mask & XmFOCUS_OUT_EVENT) - _XmFocusOutGadget (w, (XEvent *)event, - (String *)NULL,(Cardinal)0); + _XmFocusOutGadget (w, (XEvent *)event,NULL,NULL); } @@ -3331,7 +3332,7 @@ Draw( /* Draw shadow. */ - if (G_ShadowThickness (g) > 0 && G_DrawShadow(g)) + if (G_ShadowThickness (g) > 0 && G_DrawShadow(g)){ if(G_BorderType(g) == DtRECTANGLE || !G_Pixmap(g)) { unsigned char shadow_type; @@ -3358,6 +3359,7 @@ Draw( _DtProcessUnlock(); (*call_callback) (g, G_Callback (g), XmCR_SHADOW, NULL); } + } } diff --git a/cde/lib/DtWidget/MenuButton.c b/cde/lib/DtWidget/MenuButton.c index f30f002..96fbbad 100644 --- a/cde/lib/DtWidget/MenuButton.c +++ b/cde/lib/DtWidget/MenuButton.c @@ -369,7 +369,7 @@ static void DrawMenuGlyph( DtMenuButtonWidget mb ) { - if ((MB_GLYPH_WIDTH(mb) != 0)) + if ((MB_GLYPH_WIDTH(mb) != 0)){ if(MB_PIXMAP(mb) != XmUNSPECIFIED_PIXMAP) XCopyArea (XtDisplay(mb), MB_PIXMAP(mb), @@ -378,7 +378,8 @@ DrawMenuGlyph( MB_GLYPH_WIDTH(mb), MB_GLYPH_HEIGHT(mb), MB_GLYPH_X(mb), MB_GLYPH_Y(mb)); else - DrawArrow((Widget)mb); + DrawArrow((Widget)mb); + } } /* -- 2.4.2
------------------------------------------------------------------------------
_______________________________________________ cdesktopenv-devel mailing list cdesktopenv-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/cdesktopenv-devel