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

Reply via email to