ยกเลิกการลากแล้วปล่อยจากโปรแกรมที่ไม่ว่าง


7

เมื่อสิ่งต่อไปนี้เกิดขึ้น:

  1. ฉันเริ่มการทำงานแบบลากแล้ววางเริ่มต้นจากแอปพลิเคชัน ABC
  2. แอปพลิเคชัน ABC ล็อคขึ้น (ชั่วคราว)
  3. ฉันปล่อยปุ่มเมาส์

จากนั้นจนกระทั่งแอปพลิเคชัน ABC เสร็จสิ้นการประมวลผลฉันมีปัญหาต่อไปนี้:

  • โปรแกรมอื่นไม่สามารถ "จับ" ตัวชี้เมาส์ได้
  • เคอร์เซอร์ลากแล้วปล่อยยังคงทำงานอยู่
  • ฉันไม่สามารถคลิกอะไรก็ได้
  • ฉันไม่สามารถเปิดเมนู gnome-panel หรือ GNOME
  • ฉันไม่สามารถกดแป้นบางปุ่มได้ (รวมถึงช่องว่าง, ใส่, ปุ่มลูกศร)

เห็นได้ชัดว่าฉันไม่สามารถทำงานอื่นได้ในขณะที่รอแอปพลิเคชันให้เสร็จ

สถานการณ์เมื่อสิ่งนี้เกิดขึ้นคือเมื่อฉันเปิดแท็บ Firefox ไว้ประมาณ 500 แท็กเมื่อลากแท็บบางครั้งมันค้างประมาณครึ่งชั่วโมงหรือมากกว่านั้น

วิธีแก้ปัญหาคือใช้เทอร์มินัลโดยกด Ctrl-Alt-F1 ลงชื่อเข้าใช้เรียกใช้killall ABCเพื่อฆ่าแอปพลิเคชันที่ละเมิดและกด Ctrl-Alt-F7 เพื่อกลับสู่สภาพแวดล้อมแบบกราฟิก แต่ฉันไม่ต้องการฆ่า ABC แทนที่จะปล่อยให้มันประมวลผลจนเสร็จในขณะที่เอาเม้าส์กลับมา

ดังนั้นเป็นไปได้หรือไม่ที่จะยกเลิกการใช้ตัวชี้เมาส์แบบลากและวาง / ยกเลิกการจับจากโปรแกรมไม่ว่างโดยไม่ฆ่ากระบวนการ?


1
เดิมพันของฉันคือการทำเช่นนี้ตามที่คุณขอจะต้องมีการแก้ไขการเขียนโปรแกรมบางอย่างเพื่อคำพังเพย แต่แน่นอนฉันต้องการรู้จักตัวเอง ฉันก็เป็นนักเลงของ Firefox เช่นกัน (+1)
James T Snell

@Doc: ฉันติดตั้งส่วนขยายเพื่อนับพวกเขา ขณะนี้ฉันมี 1295 แท็บเปิดอยู่ (แน่นอนว่าปัญหาไม่ได้เกิดเฉพาะกับ Firefox)
หอยทากเชิงกล

3
คุณไม่สามารถยกเลิกการลากแล้วปล่อยโดยกด ESC ก่อนปล่อยปุ่มเมาส์ได้หรือไม่
นาที

1
+1 สิ่งนี้ไม่เพียงเกิดขึ้นกับ Firefox ฉันได้พบกับโทเท็มค่อนข้างสองสามครั้ง
Jens Mühlenhoff

ในกรณีของฉันสิ่งนี้ไม่ได้ช่วย
Jens Mühlenhoff

คำตอบ:


6

ในความเป็นจริงมันเป็นไปได้ที่จะทำเช่นนี้ (อย่างน้อยกับรุ่นล่าสุดของ X)

คุณสามารถทำได้โดยการกดปุ่มที่XF86Ungrabแนะนำในการกระทำนี้

ตามค่าเริ่มต้น keysym นี้จะไม่ถูกผูกไว้กับฟิสิคัลคีย์หรือคีย์ผสม (มันถูกปิดใช้งานในปี 2012 หลังจากที่มันถูกรายงานว่าเป็นช่องโหว่ด้านความปลอดภัย ในการตั้งค่าอื่น ๆ มันถูกผูกไว้กับทางลัดที่ใช้แป้นตัวเลข เห็นได้ชัดว่าจะไม่ทำงานบนแล็ปท็อปที่ไม่มีปุ่มกด

แต่คุณยังสามารถเปิดใช้งาน keysym ได้โดยใช้xdotool:

setxkbmap -option grab:break_actions
xdotool key XF86Ungrab

สิ่งนี้ใช้ได้กับ X.org เวอร์ชั่น 2: 1.11.4-0ubuntu10.8 บน Ubuntu ได้อย่างแม่นยำ


1

ในระบบปฏิบัติการส่วนใหญ่หรือระบบหน้าต่างคุณสามารถยกเลิกตัวจัดการการลากเมาส์โดยกดปุ่ม Escape และบางครั้งคุณสามารถยกเลิกได้โดยค้นหาหรือใช้เป้าหมาย"ลากยกเลิก"เช่นเมนูด้านบนของ Mac os ตัวอย่างเช่นใน Windows ส่วนใหญ่คุณจะสังเกตเห็นการเปลี่ยนแปลงของเคอร์เซอร์เป็นวงกลมโดยรอบผ่านมันเช่นป้ายห้ามสูบบุหรี่แบบคลาสสิกหรือป้ายห้ามดำน้ำในโลกแห่งความเป็นจริง;)

ในกรณีของ OP พวกเขาใช้ GNOME / Firefox:

ในGnomeในกรณีส่วนใหญ่การกดปุ่ม Escape ก่อนที่จะปล่อยปุ่มเมาส์จะ (ควร) ยกเลิกการลาก / วางเหตุการณ์ มันเป็นส่วนหนึ่งของแนวทางการพัฒนา:

http://developer.gnome.org/hig-book/3.2/input-mouse.html.en#drag-drop-override

อนุญาตให้ยกเลิกการทำงานของเมาส์ทั้งหมดก่อนที่จะเสร็จสิ้น การกดปุ่ม Esc ควรยกเลิกการทำงานของเมาส์ที่กำลังดำเนินการอยู่เช่นการลากและวางไฟล์ในตัวจัดการไฟล์หรือการวาดรูปร่างในแอปพลิเคชั่นการวาด

และ..

อนุญาตให้ผู้ใช้ยกเลิกการลากและวางโดยวิธีการเหล่านี้ทั้งหมด:

  • กด Esc ก่อนที่จะปล่อยปุ่มเมาส์วางวัตถุ
  • กลับมาที่ตำแหน่งเดิมโดยใช้การลากและเลือกคิวรี
  • ยกเลิกบนเมนูป๊อปอัพ (ดูหัวข้อ 10.1.3.1.2 - การดึงข้อความค้นหา)
  • วางวัตถุบนเป้าหมายการปล่อยที่ไม่ถูกต้อง

ฉันแน่ใจว่าเป็นสิ่งเดียวกันใน KDE จากการ ค้นหาเพียงเล็กน้อย

ในเหตุการณ์ Drop ของ Mozilla dev

drop เหตุการณ์ดร็อปถูกใช้กับอิลิเมนต์ที่การดร็อปเกิดขึ้นเมื่อสิ้นสุดการลาก ผู้ฟังจะรับผิดชอบในการดึงข้อมูลที่ถูกลากและใส่ไว้ในตำแหน่งที่ปล่อย เหตุการณ์นี้จะเริ่มขึ้นหากต้องการให้วาง มันจะไม่ทำงานหากผู้ใช้ยกเลิกการลากตัวอย่างเช่นโดยการกดปุ่ม Escape หรือหากปุ่มเมาส์ถูกปล่อยในขณะที่เมาส์ไม่ได้อยู่เหนือเป้าหมายการปล่อยที่ถูกต้อง สำหรับข้อมูลเกี่ยวกับสิ่งนี้ให้ดูที่การดำเนินการดรอป

ฉันไม่เคยบอกว่ามันจะใช้งานได้ตลอดเวลาในการตั้งค่าทุกอย่างเช่นฉันไม่คิดว่ามันจะทำงานได้บน Ubuntu ซึ่งเป็นง่อย ผมจำได้ว่าเหตุการณ์ลากยกเลิกการทำงานร่วมกับปุ่ม Escape เนื่องจากใน wondows ตั้งแต่เวอร์ชัน 3.1

ในระบบปฏิบัติการ MS Windows ในแอปพลิเคชั่นเกือบทั้งหมด (เข้ารหัสอย่างถูกต้อง): - กดปุ่ม Escape ก่อนที่จะปล่อยปุ่มเมาส์ในระหว่างที่เมาส์ลาก / วางเหตุการณ์จะยกเลิก / ยกเลิกฟังก์ชั่นการจัดการ

ตัวอย่างเช่นใน Google Chrome บน Windows7: - ลากแท็บออกจากแถบเครื่องมือราวกับว่าคุณกำลังจะแยกออกและก่อนที่จะปล่อยให้กดแป้น Escape ของแป้นพิมพ์ ควรยกเลิกการลากแล้วส่งคืนแท็บของคุณ


จริงๆ? ฉันไม่เคยเห็นสิ่งนี้มาก่อนระบบปฏิบัติการเหล่านี้คืออะไร
terdon

คุณใช้ระบบปฏิบัติการ OS / Window แบบใด? คุณเคยลองไหม ให้ฉันอัปเดตคำตอบสำหรับคุณ
Anthony Hatzopoulos

ขอบคุณสำหรับข้อมูลรายละเอียด @AnthonyHatzopoulos ฉันคิดว่าคุณหมายความว่า Esc สามารถยกเลิกการลากแล้วปล่อยหลังจากที่ปล่อยเมาส์และเริ่มการทำงานได้แล้ว นั่นคือสิ่งที่ OP ขอมา ยัง +1 เพื่อความพยายาม :)
terdon
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.