Browse Source

X11: Fix returned clipboard string freed too early

The clipboard string should not be freed on SelectionClear.  The user
may have received it from glfwGetClipboardString and it should remain
valid until the next call to a public clipboard string function.
Camilla Löwy 3 năm trước cách đây
mục cha
commit
f60547ac80
1 tập tin đã thay đổi với 1 bổ sung24 xóa
  1. 1 24
      src/x11_window.c

+ 1 - 24
src/x11_window.c

@@ -865,20 +865,6 @@ static Atom writeTargetToProperty(const XSelectionRequestEvent* request)
     return None;
     return None;
 }
 }
 
 
-static void handleSelectionClear(XEvent* event)
-{
-    if (event->xselectionclear.selection == _glfw.x11.PRIMARY)
-    {
-        _glfw_free(_glfw.x11.primarySelectionString);
-        _glfw.x11.primarySelectionString = NULL;
-    }
-    else
-    {
-        _glfw_free(_glfw.x11.clipboardString);
-        _glfw.x11.clipboardString = NULL;
-    }
-}
-
 static void handleSelectionRequest(XEvent* event)
 static void handleSelectionRequest(XEvent* event)
 {
 {
     const XSelectionRequestEvent* request = &event->xselectionrequest;
     const XSelectionRequestEvent* request = &event->xselectionrequest;
@@ -1171,12 +1157,7 @@ static void processEvent(XEvent *event)
         return;
         return;
     }
     }
 
 
-    if (event->type == SelectionClear)
-    {
-        handleSelectionClear(event);
-        return;
-    }
-    else if (event->type == SelectionRequest)
+    if (event->type == SelectionRequest)
     {
     {
         handleSelectionRequest(event);
         handleSelectionRequest(event);
         return;
         return;
@@ -1853,10 +1834,6 @@ void _glfwPushSelectionToManagerX11(void)
                     handleSelectionRequest(&event);
                     handleSelectionRequest(&event);
                     break;
                     break;
 
 
-                case SelectionClear:
-                    handleSelectionClear(&event);
-                    break;
-
                 case SelectionNotify:
                 case SelectionNotify:
                 {
                 {
                     if (event.xselection.target == _glfw.x11.SAVE_TARGETS)
                     if (event.xselection.target == _glfw.x11.SAVE_TARGETS)