Linux에서는 드래그 앤 드롭이 어떻게 작동하나요?

Linux에서는 드래그 앤 드롭이 어떻게 작동하나요?

클립보드 구현을 먼저 배워야 할까요, 아니면 드래그 앤 드롭(D&D)이 완전히 독립적이어야 할까요?

D&D 관련 코드가 포함된 구성 요소는 무엇입니까? (.svg에 대한 링크가 가장 좋은 답변이 될 것입니다)

"끌어서 놓기 전에 창을 복원하려면 작업 표시줄로 끌기" 기능을 구현하려면 DE를 패치해야 합니까? 그렇다면 Gnome, KDE, XFCE를 다루기에 충분합니까?

드래그하는 동안 창 및 제어 불투명도/투명도와 관련된 문제는 무엇입니까? (WinForms Designer가 완료되는 것을 방해하는 것은 무엇입니까)?

https://bugzilla.novell.com/show_bug.cgi?id=323819

엔드포인트 작업 수정에 키( Shift, Ctrl, Alt, )와 그 조합은 일반적으로 어떻게 사용됩니까?Win

답변과 모든 곳에서 얻을 수 있는 가장 유용한 평화:

The X11 drag and drop protocol is called XDND:
http://www.newplanetsoftware.com/xdnd
API which gives an access to the protocol implementation (is it Xlib?):
https://en.wikipedia.org/wiki/X_Window_selection

Gtk (uses Xlib):
https://wiki.gnome.org/GnomeLove/DragNDropTutorial

Gtk# (uses Gtk):
https://github.com/mono/gtk-sharp/blob/master/sample/TestDnd.cs
http://my.safaribooksonline.com/book/programming/mono/0596007922/gtksharp/monoadn-chp-4-sect-8

mono WinForms implementation (Uses Gtk# ?)
http://www.mono-project.com/docs/gui/winforms/

D&D in client application (uses WinForms):
http://zetcode.com/gui/csharpwinforms/dragdrop/

guides to overview use cases:
https://en.wikipedia.org/wiki/Human_interface_guidelines
("four-finger drag" operation and similar things)

답변1

드래그 앤 드롭 API는 다른 것 위에 구축된 GUI 위젯 라이브러리에서 구현됩니다(Linux의 경우,확장 라이브러리).

Qt(KDE), Gtk(Gnome) 및 XFC(XFCE)에 충분합니까?

Qt와 Gtk는 다른 GUI 라이브러리입니다. 끌어서 놓기가 가능한 유일한 컨텍스트인 GUI 애플리케이션을 작성하는 경우 다음을 선택합니다.도서관, 둘이나 셋이 아닙니다. Qt와 Gtk 버전을 만들고 유지하는 사람이 있다는 말을 들어본 적이 없습니다. 왜냐하면 그것은 말이 안 되기 때문입니다. 동일한 플랫폼 세트로 포팅될 수 있기 때문입니다. Gtk 버전이 있다면 아마도 Qt를 실행하는 시스템에서 작동할 것이고 그 반대의 경우도 마찬가지입니다.

Qt와 Gtk 애플리케이션은 모두 Linux DE에서 문제 없이 실행됩니다. GNOME과 KDE에만 국한되지 않습니다. KDE를 사용한다면 데스크탑에 Gtk 응용프로그램이 있을 것입니다. GNOME을 사용한다면 아마도 Qt가 있을 것입니다. 그건소프트웨어 스택의 작동 방식.

Xlib만 사용하여 GUI 응용 프로그램을 작성하는 것이 가능하지만 이는 여러 가지 이유로 다소 이례적입니다1. 이식성 이 없고 소프트웨어 설계에서 모듈식 계층의 목적을 무효화합니다.

이식성이 뛰어난 상위 수준 라이브러리(Gtk, Qt)의 핵심 중 하나는 Xlib와 같은 하위 수준의 플랫폼별 라이브러리를 추상화한다는 것입니다.

먼저 클립보드 구현 방법을 알아볼까요?

Xlib 클립보드가 그것과 관련이 있는지 의심스럽습니다. 그러나 그럼에도 불구하고 Linux용 GUI 응용 프로그램을 작성하려는 경우 Xlib에 대해 많이 알 필요는 없습니다. 더 높은 수준의 라이브러리 중 하나에서 시작합니다.

Gtk의 드래그 앤 드롭 API에 대해 배우고 그것이 기반으로 하는 Xlib 기능에 대해 빠르게 배우고 싶다면(Xlib를 사용하는 시스템에서),이봐.


"창을 놓기 전에 작업 표시줄로 끌어서 복원"과 같은 기능을 일반화하는 데 관심이 있다고 말씀하셨습니다. 이 동작은 실제로 DE 또는 창 관리자(WM - all)에 속합니다.DE에는 WM이 필요합니다, 그러나 WM에는 DE가 필요하지 않지만 실제 DnD 메커니즘은 더 낮습니다. 해당 동작은 메커니즘의 특정 유형의 사용 사례에만 관련됩니다. 그러나 그것은 DE의 상위 영역이기 때문에 개인의 영역 내에 있지 않습니다.애플리케이션. GUI 애플리케이션을 작성하는 경우 다음과 같습니다.아니요전혀 신경 쓰지 말아야 할 것.

Linux는 데스크톱 인터페이스가 이기종이라는 점에서 Windows와 다릅니다. 이는 이와 같은 높은 수준의 동작을 일반화한다는 의미입니다.의도적으로의심스럽습니다(아무도 반지로 그들을 모두 묶는 것을 원하지 않습니다). 애플리케이션 수준의 이기종 창 메커니즘에 초점을 맞추는 것은 테두리와 제목 표시줄의 정확한 모양에 초점을 맞추는 것보다 더 적합하지 않습니다. DE/WM은 이를 처리하여 통합된 모습을 만들어냅니다.그리고 느낌전체 데스크탑에 대해 사용자가 구성합니다. 단일 응용 프로그램이 최종 사용자 및 DE로부터 이 제어권을 빼앗아 Windows 실행을 보고 싶은 방식으로 실행되도록 하는 것은 적절하지 않거나 사용자 친화적이지 않습니다.당신의데스크탑 선택. 귀하의 응용 프로그램을 사용하고 싶다고 해서 귀하의 WRT 창 동작 규칙도 준수하고 싶다는 의미는 아닙니다. 응용 프로그램은 포함될 필요가 없으며 대부분의 경우 관여해서는 안됩니다. 이 모드를 반대할 이유는 없습니다. 마음에 들지 않을 수도 있지만 대상으로 삼으려는 운영 체제 사용자가 좋아할 수도 있습니다. Apple 사용자는 데스크탑을 Windows처럼 작동시키려는 응용 프로그램 프로그래머를 싫어할 것이고, Windows 사용자는 데스크탑을 KDE처럼 작동시키려는 응용 프로그램 프로그래머를 좋아하지 않을 것입니다.

즉, 일종의 추가 기능 "제스처" 라이브러리에는 아무런 문제가 없습니다. 비록 이것이 DE 구현에 더 적합해 보이고 일부는 구성 가능한 제스처를 가지고 있기는 하지만 말입니다. 당신은 관심이 있을 수도 있습니다확장된 창 관리자 프롬프트, 이는 응용 프로그램이 특정 유형의 동작을 호출하는 데 도움이 되는 높은 수준의 범용 프로토콜을 만들려는 시도입니다. 범용 프로토콜은확인하다이 경우 작업 표시줄). EWMH 준수는 물론 자발적이며 WM마다 다를 수 있습니다.


1. 베어메탈에서 GUI 애플리케이션을 작성하는 것도 가능합니다. 자신만의 운영 체제를 만들고 거기서부터 시작합니다. 그러나 다시 말하지만 이것은 정통적인 접근 방식이 아닙니다.

관련 정보