Blame SOURCES/revert-of-motifzone_1565.patch

9ad0e9
From 18de86345d5e455b815fe0395d2992b9a2f1195f Mon Sep 17 00:00:00 2001
9ad0e9
From: Oleksiy Chernyavskyy <ochern@ics.com>
9ad0e9
Date: Tue, 28 Mar 2017 01:11:59 +0300
9ad0e9
Subject: [PATCH] removed bugfix 1565. See details on
9ad0e9
 http://bugs.motifzone.net/show_bug.cgi?id=1565
9ad0e9
9ad0e9
---
9ad0e9
 lib/Xm/ComboBox.c   |   8 ---
9ad0e9
 lib/Xm/DropDown.c   |   7 ---
9ad0e9
 lib/Xm/GrabShell.c  |  15 +----
9ad0e9
 lib/Xm/GrabShellP.h |   3 -
9ad0e9
 lib/Xm/RCMenu.c     |  40 ------------
9ad0e9
 lib/Xm/Xm.c         | 173 ----------------------------------------------------
9ad0e9
 lib/Xm/XmI.h        |   4 --
9ad0e9
 7 files changed, 2 insertions(+), 248 deletions(-)
9ad0e9
9ad0e9
diff --git a/lib/Xm/ComboBox.c b/lib/Xm/ComboBox.c
9ad0e9
index cf507da4..1472e458 100644
9ad0e9
--- a/lib/Xm/ComboBox.c
9ad0e9
+++ b/lib/Xm/ComboBox.c
9ad0e9
@@ -3164,9 +3164,6 @@ CreatePulldown(Widget    parent,
9ad0e9
   Arg      args[4];
9ad0e9
   ArgList  merged_args;
9ad0e9
   Cardinal n;
9ad0e9
-#ifdef FIX_1565
9ad0e9
-  XmGrabShellWidget grabsh;
9ad0e9
-#endif
9ad0e9
 
9ad0e9
   n = 0;
9ad0e9
   XtSetArg(args[n], XmNlayoutDirection, LayoutM(parent)), n++;
9ad0e9
@@ -3178,11 +3175,6 @@ CreatePulldown(Widget    parent,
9ad0e9
 			     merged_args, n + *num_args);
9ad0e9
   XtFree((char*)merged_args);
9ad0e9
 
9ad0e9
-#ifdef FIX_1565
9ad0e9
-  grabsh = (XmGrabShellWidget) shell;
9ad0e9
-  grabsh->grab_shell.set_input_focus = False;
9ad0e9
-#endif
9ad0e9
-
9ad0e9
   return shell;
9ad0e9
 }
9ad0e9
 
9ad0e9
diff --git a/lib/Xm/DropDown.c b/lib/Xm/DropDown.c
9ad0e9
index 5cd15cae..37fec03f 100644
9ad0e9
--- a/lib/Xm/DropDown.c
9ad0e9
+++ b/lib/Xm/DropDown.c
9ad0e9
@@ -2027,9 +2027,6 @@ CreatePopup(Widget w, ArgList args, Cardinal num_args)
9ad0e9
     Arg *new_list, largs[10];
9ad0e9
     Cardinal num_largs;
9ad0e9
     Widget sb;
9ad0e9
-#ifdef FIX_1565
9ad0e9
-    XmGrabShellWidget grabsh;
9ad0e9
-#endif
9ad0e9
 
9ad0e9
     num_largs = 0;
9ad0e9
     XtSetArg(largs[num_largs], XmNoverrideRedirect, True); num_largs++;
9ad0e9
@@ -2043,10 +2040,6 @@ CreatePopup(Widget w, ArgList args, Cardinal num_args)
9ad0e9
 						xmGrabShellWidgetClass, w,
9ad0e9
 						new_list,
9ad0e9
 						num_largs + num_args);
9ad0e9
-#ifdef FIX_1565
9ad0e9
-    grabsh = (XmGrabShellWidget) XmDropDown_popup_shell(cbw);
9ad0e9
-    grabsh->grab_shell.set_input_focus = False;
9ad0e9
-#endif
9ad0e9
     XtFree((char *) new_list);
9ad0e9
 
9ad0e9
 #ifdef FIX_1446
9ad0e9
diff --git a/lib/Xm/GrabShell.c b/lib/Xm/GrabShell.c
9ad0e9
index af13e0b7..a73f7cb9 100644
9ad0e9
--- a/lib/Xm/GrabShell.c
9ad0e9
+++ b/lib/Xm/GrabShell.c
9ad0e9
@@ -284,9 +284,6 @@ Initialize(Widget req,		/* unused */
9ad0e9
   /* CR 9920:  Popdown may be requested before MapNotify. */
9ad0e9
   grabsh->grab_shell.mapped = False;
9ad0e9
 
9ad0e9
-#ifdef FIX_1565
9ad0e9
-  grabsh->grab_shell.set_input_focus = True;
9ad0e9
-#endif
9ad0e9
 }
9ad0e9
 
9ad0e9
 /*
9ad0e9
@@ -399,16 +396,8 @@ MapNotifyHandler(Widget shell, XtPointer client_data,
9ad0e9
   XGetInputFocus(XtDisplay(shell), &grabshell->grab_shell.old_focus,
9ad0e9
 		 &grabshell->grab_shell.old_revert_to);
9ad0e9
   old_handler = XSetErrorHandler(IgnoreXErrors);
9ad0e9
-#ifdef FIX_1565
9ad0e9
-  if (! grabshell->grab_shell.set_input_focus) {
9ad0e9
-    XmForceGrabKeyboard(shell, time);
9ad0e9
-  } else {
9ad0e9
-#endif
9ad0e9
-    XSetInputFocus(XtDisplay(shell), XtWindow(shell), RevertToParent, time);
9ad0e9
-    XSync(XtDisplay(shell), False);
9ad0e9
-#ifdef FIX_1565
9ad0e9
-  }
9ad0e9
-#endif
9ad0e9
+  XSetInputFocus(XtDisplay(shell), XtWindow(shell), RevertToParent, time);
9ad0e9
+  XSync(XtDisplay(shell), False);
9ad0e9
   XSetErrorHandler(old_handler);
9ad0e9
 }
9ad0e9
 
9ad0e9
diff --git a/lib/Xm/GrabShellP.h b/lib/Xm/GrabShellP.h
9ad0e9
index 025f0015..e2585540 100644
9ad0e9
--- a/lib/Xm/GrabShellP.h
9ad0e9
+++ b/lib/Xm/GrabShellP.h
9ad0e9
@@ -56,9 +56,6 @@ typedef struct
9ad0e9
   Boolean	mapped;
9ad0e9
   Window	old_focus;
9ad0e9
   int		old_revert_to;
9ad0e9
-#ifdef FIX_1565
9ad0e9
-  Boolean	set_input_focus;
9ad0e9
-#endif
9ad0e9
 } XmGrabShellPart;
9ad0e9
 
9ad0e9
 
9ad0e9
diff --git a/lib/Xm/RCMenu.c b/lib/Xm/RCMenu.c
9ad0e9
index 8b156da5..2c698d4f 100644
9ad0e9
--- a/lib/Xm/RCMenu.c
9ad0e9
+++ b/lib/Xm/RCMenu.c
9ad0e9
@@ -85,9 +85,6 @@ static char *rcsid = "$TOG: RCMenu.c /main/25 1999/05/24 18:06:57 samborn $";
9ad0e9
 #include "TraversalI.h"
9ad0e9
 #include "UniqueEvnI.h"
9ad0e9
 #include "VendorSI.h"
9ad0e9
-#ifdef FIX_1565
9ad0e9
-#include <Xm/GrabShell.h>
9ad0e9
-#endif
9ad0e9
 
9ad0e9
 #define FIX_1535
9ad0e9
 
9ad0e9
@@ -946,13 +943,6 @@ _XmMenuFocus(
9ad0e9
    XmMenuState mst = _XmGetMenuState((Widget)w);
9ad0e9
    Window tmpWindow;
9ad0e9
    int tmpRevert;
9ad0e9
-#ifdef FIX_1565
9ad0e9
-   Widget shell;
9ad0e9
-
9ad0e9
-   shell = w;
9ad0e9
-   while (! XtIsSubclass(shell, shellWidgetClass))
9ad0e9
-     shell = XtParent(shell);
9ad0e9
-#endif
9ad0e9
  
9ad0e9
    if (_time == CurrentTime) 
9ad0e9
      _time = XtLastTimestampProcessed(XtDisplay(w));
9ad0e9
@@ -993,11 +983,6 @@ _XmMenuFocus(
9ad0e9
 			  shell.popped_up))
9ad0e9
 **/
9ad0e9
 		     {
9ad0e9
-#ifdef FIX_1565
9ad0e9
-               if (XtIsSubclass(shell, xmGrabShellWidgetClass) || XtIsSubclass(shell, xmMenuShellWidgetClass))
9ad0e9
-                 XmForceGrabKeyboard(w, _time);
9ad0e9
-               else
9ad0e9
-#endif
9ad0e9
 		       SetInputFocus(XtDisplay(w), mst->RC_menuFocus.oldFocus,
9ad0e9
 				     mst->RC_menuFocus.oldRevert,
9ad0e9
 				     mst->RC_menuFocus.oldTime);
9ad0e9
@@ -1011,11 +996,6 @@ _XmMenuFocus(
9ad0e9
  	      */
9ad0e9
  	     else
9ad0e9
  	       {
9ad0e9
-#ifdef FIX_1565
9ad0e9
-               if (XtIsSubclass(shell, xmGrabShellWidgetClass) || XtIsSubclass(shell, xmMenuShellWidgetClass))
9ad0e9
-                 XmForceGrabKeyboard(w, _time);
9ad0e9
-               else
9ad0e9
-#endif
9ad0e9
  		  SetInputFocus(XtDisplay(w), mst->RC_menuFocus.oldFocus,
9ad0e9
 				mst->RC_menuFocus.oldRevert,
9ad0e9
 				mst->RC_menuFocus.oldTime);
9ad0e9
@@ -1034,11 +1014,6 @@ _XmMenuFocus(
9ad0e9
 	     RC_menuFocus.oldFocus);
9ad0e9
 	  mst->RC_menuFocus.oldTime = _time - 1;
9ad0e9
 
9ad0e9
-#ifdef FIX_1565
9ad0e9
-      if (XtIsSubclass(shell, xmGrabShellWidgetClass) || XtIsSubclass(shell, xmMenuShellWidgetClass))
9ad0e9
-        XmForceGrabKeyboard(w, _time);
9ad0e9
-      else
9ad0e9
-#endif
9ad0e9
 	  SetInputFocus(XtDisplay(w), XtWindow(w), mst->RC_menuFocus.oldRevert,
9ad0e9
 			mst->RC_menuFocus.oldTime);
9ad0e9
 
9ad0e9
@@ -1052,11 +1027,6 @@ _XmMenuFocus(
9ad0e9
 	  XGetInputFocus(XtDisplay(w), &tmpWindow, &tmpRevert);
9ad0e9
 	  if (tmpWindow != XtWindow(w))
9ad0e9
 	  {
9ad0e9
-#ifdef FIX_1565
9ad0e9
-        if (XtIsSubclass(shell, xmGrabShellWidgetClass) || XtIsSubclass(shell, xmMenuShellWidgetClass))
9ad0e9
-          XmForceGrabKeyboard(w, _time);
9ad0e9
-        else
9ad0e9
-#endif
9ad0e9
 	    SetInputFocus(XtDisplay(w), XtWindow(w), tmpRevert, _time);
9ad0e9
 
9ad0e9
 	    mst->RC_menuFocus.oldRevert = tmpRevert;
9ad0e9
@@ -1078,11 +1048,6 @@ _XmMenuFocus(
9ad0e9
 
9ad0e9
 	  break;
9ad0e9
 	case XmMENU_MIDDLE:
9ad0e9
-#ifdef FIX_1565
9ad0e9
-      if (XtIsSubclass(shell, xmGrabShellWidgetClass) || XtIsSubclass(shell, xmMenuShellWidgetClass))
9ad0e9
-        XmForceGrabKeyboard(w, _time);
9ad0e9
-      else
9ad0e9
-#endif
9ad0e9
 	  SetInputFocus(XtDisplay(w), XtWindow(w),
9ad0e9
 			mst->RC_menuFocus.oldRevert,
9ad0e9
 			mst->RC_menuFocus.oldTime);
9ad0e9
@@ -1097,11 +1062,6 @@ _XmMenuFocus(
9ad0e9
 	  if ((tmpWindow != XtWindow(w)) &&
9ad0e9
 	      (_time > mst->RC_menuFocus.oldTime))
9ad0e9
 	  {
9ad0e9
-#ifdef FIX_1565
9ad0e9
-        if (XtIsSubclass(shell, xmGrabShellWidgetClass) || XtIsSubclass(shell, xmMenuShellWidgetClass))
9ad0e9
-          XmForceGrabKeyboard(w, _time);
9ad0e9
-        else
9ad0e9
-#endif
9ad0e9
 	    SetInputFocus(XtDisplay(w), XtWindow(w), tmpRevert, _time);
9ad0e9
 
9ad0e9
 	    mst->RC_menuFocus.oldRevert = tmpRevert;
9ad0e9
diff --git a/lib/Xm/Xm.c b/lib/Xm/Xm.c
9ad0e9
index 45d48b61..657f9041 100644
9ad0e9
--- a/lib/Xm/Xm.c
9ad0e9
+++ b/lib/Xm/Xm.c
9ad0e9
@@ -40,10 +40,6 @@
9ad0e9
 #ifdef FIX_345
9ad0e9
 #include <X11/keysym.h>
9ad0e9
 #endif
9ad0e9
-#ifdef FIX_1565
9ad0e9
-#include <Xm/GrabShell.h>
9ad0e9
-#include <Xm/MenuShell.h>
9ad0e9
-#endif
9ad0e9
 
9ad0e9
 
9ad0e9
 /**************************************************************************
9ad0e9
@@ -535,172 +531,3 @@ _XmAssignInsensitiveColor(Widget w)
9ad0e9
 }
9ad0e9
 #endif
9ad0e9
 
9ad0e9
-#ifdef FIX_1565
9ad0e9
-
9ad0e9
-typedef struct _GrabData GrabData;
9ad0e9
-struct _GrabData {
9ad0e9
-  Widget w;
9ad0e9
-  GrabData *next;
9ad0e9
-};
9ad0e9
-
9ad0e9
-static void _XmSendFocusEvent(Widget child, int type);
9ad0e9
-static void _XmStartDispatcher(Display *display);
9ad0e9
-static Boolean _XmEventDispatcher(XEvent *event);
9ad0e9
-static void UnmapHandler(Widget w, XtPointer client_data, XEvent *event, Boolean *cont);
9ad0e9
-static Boolean _UngrabKeyboard(Widget w);
9ad0e9
-
9ad0e9
-static GrabData *grabw_top = NULL;
9ad0e9
-static int xm_dispatcher_on = 0;
9ad0e9
-static XtEventDispatchProc saved_dispatcher_proc = NULL;
9ad0e9
-static XtEventDispatchProc xt_dispatcher_proc = NULL;
9ad0e9
-
9ad0e9
-/*
9ad0e9
-   XmForceGrabKeyboard function is defined to be a substitutor of XSetInputFocus calls
9ad0e9
-   for popup and pulldown menus that should grab keyboard focus yet main window at the
9ad0e9
-   same time should visually stay in focus for window manager. This resolves focus flip
9ad0e9
-   issue when popup or pulldown menu is raised. ~ochern
9ad0e9
- */
9ad0e9
-void XmForceGrabKeyboard(Widget w, Time time)
9ad0e9
-{
9ad0e9
-  GrabData *grabw;
9ad0e9
-
9ad0e9
-  if (!w)
9ad0e9
-    return;
9ad0e9
-
9ad0e9
-  while (! XtIsSubclass(w, shellWidgetClass))
9ad0e9
-    w = XtParent(w);
9ad0e9
-
9ad0e9
-  if (! (XtIsSubclass(w, xmGrabShellWidgetClass) || XtIsSubclass(w, xmMenuShellWidgetClass)))
9ad0e9
-    return;
9ad0e9
-
9ad0e9
-  _XmStartDispatcher(XtDisplay(w));
9ad0e9
-
9ad0e9
-  _UngrabKeyboard(w);
9ad0e9
-
9ad0e9
-  grabw = (GrabData *) XtMalloc(sizeof(GrabData));
9ad0e9
-  grabw->w = w;
9ad0e9
-  _XmProcessLock();
9ad0e9
-  grabw->next = grabw_top;
9ad0e9
-  grabw_top = grabw;
9ad0e9
-  _XmProcessUnlock();
9ad0e9
-
9ad0e9
-  XtInsertEventHandler(w, StructureNotifyMask, False, UnmapHandler, NULL, XtListHead);
9ad0e9
-
9ad0e9
-  _XmSendFocusEvent(w, FocusIn);
9ad0e9
-
9ad0e9
-  /* Following the XSetInputFocus behaviour we force sending FocusOut (see XGrabKeyboard(3))
9ad0e9
-     event to a previous keyboard holder */
9ad0e9
-  XtGrabKeyboard(w, True, GrabModeAsync, GrabModeAsync, time);
9ad0e9
-}
9ad0e9
-
9ad0e9
-static void _XmStartDispatcher(Display *display)
9ad0e9
-{
9ad0e9
-  if (!display)
9ad0e9
-    return;
9ad0e9
-
9ad0e9
-  _XmProcessLock();
9ad0e9
-
9ad0e9
-  if (xm_dispatcher_on) {
9ad0e9
-    _XmProcessUnlock();
9ad0e9
-    return;
9ad0e9
-  }
9ad0e9
-
9ad0e9
-  saved_dispatcher_proc = XtSetEventDispatcher(display, KeyPress, _XmEventDispatcher);
9ad0e9
-  if (! xt_dispatcher_proc)
9ad0e9
-    xt_dispatcher_proc = saved_dispatcher_proc;
9ad0e9
-  XtSetEventDispatcher(display, KeyRelease, _XmEventDispatcher);
9ad0e9
-  xm_dispatcher_on = 1;
9ad0e9
-
9ad0e9
-  _XmProcessUnlock();
9ad0e9
-}
9ad0e9
-
9ad0e9
-static Boolean _XmEventDispatcher(XEvent *event)
9ad0e9
-{
9ad0e9
-  _XmProcessLock();
9ad0e9
-  if (grabw_top) {
9ad0e9
-    if (event->type == KeyPress || event->type == KeyRelease)
9ad0e9
-      event->xany.window = XtWindow(grabw_top->w);
9ad0e9
-  }
9ad0e9
-  _XmProcessUnlock();
9ad0e9
-
9ad0e9
-  if (saved_dispatcher_proc) {
9ad0e9
-    return (*saved_dispatcher_proc)(event);
9ad0e9
-  } else if (xt_dispatcher_proc) {
9ad0e9
-    return (*xt_dispatcher_proc)(event);
9ad0e9
-  } else {
9ad0e9
-    if (grabw_top)
9ad0e9
-      XtSetEventDispatcher(XtDisplay(grabw_top->w), event->type, NULL);
9ad0e9
-    return XtDispatchEvent(event);
9ad0e9
-  }
9ad0e9
-}
9ad0e9
-
9ad0e9
-static void UnmapHandler(Widget w, XtPointer client_data, XEvent *event, Boolean *cont)
9ad0e9
-{
9ad0e9
-  if (event->type == UnmapNotify)
9ad0e9
-    _UngrabKeyboard(w);
9ad0e9
-  if (! grabw_top) {
9ad0e9
-    XtSetEventDispatcher(XtDisplay(w), KeyPress, saved_dispatcher_proc);
9ad0e9
-    XtSetEventDispatcher(XtDisplay(w), KeyRelease, saved_dispatcher_proc);
9ad0e9
-    xm_dispatcher_on = 0;
9ad0e9
-  }
9ad0e9
-
9ad0e9
-  /* we do not call XtUngrabKeyboard since X server automatically performs an
9ad0e9
-     UngrabKeyboard request if the event window for an active keyboard grab becomes
9ad0e9
-     not viewable. ~ochern */
9ad0e9
-}
9ad0e9
-
9ad0e9
-static Boolean _UngrabKeyboard(Widget w)
9ad0e9
-{
9ad0e9
-  GrabData *grabw, *grabw_prev;
9ad0e9
-
9ad0e9
-  _XmProcessLock();
9ad0e9
-  if (! grabw_top) {
9ad0e9
-    _XmProcessUnlock();
9ad0e9
-    return False;
9ad0e9
-  }
9ad0e9
-
9ad0e9
-  grabw = grabw_top;
9ad0e9
-  grabw_prev = NULL;
9ad0e9
-  while(grabw && grabw->w != w) {
9ad0e9
-    grabw_prev = grabw;
9ad0e9
-    grabw = grabw->next;
9ad0e9
-  }
9ad0e9
-  if (grabw) {
9ad0e9
-    if (grabw_prev)
9ad0e9
-      grabw_prev->next = grabw->next;
9ad0e9
-    else
9ad0e9
-      grabw_top = grabw->next;
9ad0e9
-    XtFree((char*) grabw);
9ad0e9
-
9ad0e9
-    _XmProcessUnlock();
9ad0e9
-    return True;
9ad0e9
-  }
9ad0e9
-
9ad0e9
-  _XmProcessUnlock();
9ad0e9
-  return False;
9ad0e9
-}
9ad0e9
-
9ad0e9
-static void _XmSendFocusEvent(Widget child, int type)
9ad0e9
-{
9ad0e9
-  child = XtIsWidget(child) ? child : _XtWindowedAncestor(child);
9ad0e9
-  if (XtIsSensitive(child) && !child->core.being_destroyed
9ad0e9
-      && XtIsRealized(child) && (XtBuildEventMask(child) & FocusChangeMask))
9ad0e9
-  {
9ad0e9
-    XFocusChangeEvent event;
9ad0e9
-    Display* dpy = XtDisplay (child);
9ad0e9
-
9ad0e9
-    event.type = type;
9ad0e9
-    event.serial = LastKnownRequestProcessed(dpy);
9ad0e9
-    event.send_event = True;
9ad0e9
-    event.display = dpy;
9ad0e9
-    event.window = XtWindow(child);
9ad0e9
-    event.mode = NotifyNormal;
9ad0e9
-    event.detail = NotifyAncestor;
9ad0e9
-    if (XFilterEvent((XEvent*)&event, XtWindow(child)))
9ad0e9
-      return;
9ad0e9
-    XtDispatchEventToWidget(child, (XEvent*)&event);
9ad0e9
-  }
9ad0e9
-}
9ad0e9
-
9ad0e9
-#endif
9ad0e9
-
9ad0e9
diff --git a/lib/Xm/XmI.h b/lib/Xm/XmI.h
9ad0e9
index ef6165c5..769e5f0a 100644
9ad0e9
--- a/lib/Xm/XmI.h
9ad0e9
+++ b/lib/Xm/XmI.h
9ad0e9
@@ -237,9 +237,6 @@ extern Boolean _XmIsISO10646(Display *dpy,
9ad0e9
 extern XChar2b* _XmUtf8ToUcs2(char *draw_text,
9ad0e9
                               size_t seg_len,
9ad0e9
 			      size_t *ret_str_len);
9ad0e9
-#ifdef FIX_1565
9ad0e9
-extern void XmForceGrabKeyboard(Widget w, Time time);
9ad0e9
-#endif
9ad0e9
 
9ad0e9
 /********    End Private Function Declarations    ********/
9ad0e9
 
9ad0e9
@@ -294,7 +291,6 @@ extern Pixel _XmAssignInsensitiveColor(Widget w);
9ad0e9
 #define FIX_1501
9ad0e9
 #define FIX_1521
9ad0e9
 #define FIX_1505
9ad0e9
-#define FIX_1565
9ad0e9
 
9ad0e9
 #endif /* _XmI_h */
9ad0e9
 /* DON'T ADD ANYTHING AFTER THIS #endif */
9ad0e9
-- 
9ad0e9
2.13.5
9ad0e9