Patch: Qt mouse copy-on-select

View: New views
2 Messages — Rating Filter:   Alert me  

Patch: Qt mouse copy-on-select

by Norbert Nemec :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hi there,

attached is a patch that fixes the Qt mouse selection mechanism. The
member variable "selection" is also removed as it is unnecessary.

(Btw: I checked for the problem that Joris encountered in the X11 code
where clear_selection was always called right after set_selection if the
application had been the owner already. Does not seem to be a problem in
the Qt code. For me, the code works perfectly as it is now.)

Greetings,
Norbert

From b9a673eac0bbb75e31ef3213ddbd0b5e8bf3c69e Mon Sep 17 00:00:00 2001
From: Norbert Nemec <Norbert@...>
Date: Tue, 13 Oct 2009 21:22:08 +0100
Subject: [PATCH] Fix Qt mouse selection.

---
 src/src/Plugins/Qt/qt_gui.cpp         |   29 +++++++++++++----------------
 src/src/Plugins/Qt/qt_gui.hpp         |    1 -
 2 files changed, 13 insertions(+), 17 deletions(-)
 mode change 100644 => 100755 src/plugins/asymptote/bin/perl-tm_asy

diff --git a/src/plugins/asymptote/bin/perl-tm_asy b/src/plugins/asymptote/bin/perl-tm_asy
old mode 100644
new mode 100755
diff --git a/src/src/Plugins/Qt/qt_gui.cpp b/src/src/Plugins/Qt/qt_gui.cpp
index 15b3ff0..0446e74 100755
--- a/src/src/Plugins/Qt/qt_gui.cpp
+++ b/src/src/Plugins/Qt/qt_gui.cpp
@@ -42,7 +42,7 @@ int timeout_time;
 ******************************************************************************/
 
 qt_gui_rep::qt_gui_rep(int &argc, char **argv):
-  interrupted (false), selection (NULL)
+  interrupted (false)
 {
   (void) argc; (void) argv;
   // argc= argc2;
@@ -146,19 +146,21 @@ bool
 qt_gui_rep::set_selection (string key, tree t, string s) {
   selection_t (key)= copy (t);
   selection_s (key)= copy (s);
-  if (key == "primary") {
-    //if (is_nil (windows_l)) return false;
-    //Window win= windows_l->item;
-    if (selection != NULL) tm_delete_array (selection);
-    //XSetSelectionOwner (dpy, XA_PRIMARY, win, CurrentTime);
-    //if (XGetSelectionOwner(dpy, XA_PRIMARY)==None) return false;
-    selection= as_charp (s);
         
-    QClipboard *clipboard = QApplication::clipboard();
-    QString originalText = clipboard->text();
                 
-    clipboard->setText(selection);      
+  QClipboard *cb = QApplication::clipboard();
+  QClipboard::Mode mode;
+  if (key == "primary") {
+    mode= QClipboard::Clipboard;
+  } else if (key == "mouse" && cb->supportsSelection()) {
+    mode= QClipboard::Selection;
+  } else {
+    return true;
   }
+
+  char *selection = as_charp (s);
+  cb->setText(selection,mode);
+  tm_delete_array (selection);
   return true;
 }
 
@@ -166,11 +168,6 @@ void
 qt_gui_rep::clear_selection (string key) {
   selection_t->reset (key);
   selection_s->reset (key);
-  if ((key == "primary") && (selection != NULL)) {
-    tm_delete_array (selection);
-    // FIXME: should we do something with the pasteboard?
-    selection= NULL;
-  }
 }
 
 /******************************************************************************
diff --git a/src/src/Plugins/Qt/qt_gui.hpp b/src/src/Plugins/Qt/qt_gui.hpp
index e0bb219..796be09 100755
--- a/src/src/Plugins/Qt/qt_gui.hpp
+++ b/src/src/Plugins/Qt/qt_gui.hpp
@@ -39,7 +39,6 @@ public:
   QTMGuiHelper *gui_helper;
   QTimer *updatetimer;
 
-  char*                  selection;
   hashmap<string,tree>   selection_t;
   hashmap<string,string> selection_s;
 
--
1.6.3.3


_______________________________________________
Texmacs-dev mailing list
Texmacs-dev@...
http://lists.gnu.org/mailman/listinfo/texmacs-dev

Re: Patch: Qt mouse copy-on-select

by Massimiliano Gubinelli :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Committed.

max


On 13 oct. 09, at 22:27, Norbert Nemec wrote:

> Hi there,
>
> attached is a patch that fixes the Qt mouse selection mechanism. The  
> member variable "selection" is also removed as it is unnecessary.
>
> (Btw: I checked for the problem that Joris encountered in the X11  
> code where clear_selection was always called right after  
> set_selection if the application had been the owner already. Does  
> not seem to be a problem in the Qt code. For me, the code works  
> perfectly as it is now.)
>
> Greetings,
> Norbert
> From b9a673eac0bbb75e31ef3213ddbd0b5e8bf3c69e Mon Sep 17 00:00:00 2001
> From: Norbert Nemec <Norbert@...>
> Date: Tue, 13 Oct 2009 21:22:08 +0100
> Subject: [PATCH] Fix Qt mouse selection.
>
> ---
> src/src/Plugins/Qt/qt_gui.cpp         |   29 ++++++++++++
> +----------------
> src/src/Plugins/Qt/qt_gui.hpp         |    1 -
> 2 files changed, 13 insertions(+), 17 deletions(-)
> mode change 100644 => 100755 src/plugins/asymptote/bin/perl-tm_asy
>
> diff --git a/src/plugins/asymptote/bin/perl-tm_asy b/src/plugins/
> asymptote/bin/perl-tm_asy
> old mode 100644
> new mode 100755
> diff --git a/src/src/Plugins/Qt/qt_gui.cpp b/src/src/Plugins/Qt/
> qt_gui.cpp
> index 15b3ff0..0446e74 100755
> --- a/src/src/Plugins/Qt/qt_gui.cpp
> +++ b/src/src/Plugins/Qt/qt_gui.cpp
> @@ -42,7 +42,7 @@ int timeout_time;
> ******************************************************************************/
>
> qt_gui_rep::qt_gui_rep(int &argc, char **argv):
> -  interrupted (false), selection (NULL)
> +  interrupted (false)
> {
>   (void) argc; (void) argv;
>   // argc= argc2;
> @@ -146,19 +146,21 @@ bool
> qt_gui_rep::set_selection (string key, tree t, string s) {
>   selection_t (key)= copy (t);
>   selection_s (key)= copy (s);
> -  if (key == "primary") {
> -    //if (is_nil (windows_l)) return false;
> -    //Window win= windows_l->item;
> -    if (selection != NULL) tm_delete_array (selection);
> -    //XSetSelectionOwner (dpy, XA_PRIMARY, win, CurrentTime);
> -    //if (XGetSelectionOwner(dpy, XA_PRIMARY)==None) return false;
> -    selection= as_charp (s);
>
> -    QClipboard *clipboard = QApplication::clipboard();
> -    QString originalText = clipboard->text();
>
> -    clipboard->setText(selection);
> +  QClipboard *cb = QApplication::clipboard();
> +  QClipboard::Mode mode;
> +  if (key == "primary") {
> +    mode= QClipboard::Clipboard;
> +  } else if (key == "mouse" && cb->supportsSelection()) {
> +    mode= QClipboard::Selection;
> +  } else {
> +    return true;
>   }
> +
> +  char *selection = as_charp (s);
> +  cb->setText(selection,mode);
> +  tm_delete_array (selection);
>   return true;
> }
>
> @@ -166,11 +168,6 @@ void
> qt_gui_rep::clear_selection (string key) {
>   selection_t->reset (key);
>   selection_s->reset (key);
> -  if ((key == "primary") && (selection != NULL)) {
> -    tm_delete_array (selection);
> -    // FIXME: should we do something with the pasteboard?
> -    selection= NULL;
> -  }
> }
>
> /
> ******************************************************************************
> diff --git a/src/src/Plugins/Qt/qt_gui.hpp b/src/src/Plugins/Qt/
> qt_gui.hpp
> index e0bb219..796be09 100755
> --- a/src/src/Plugins/Qt/qt_gui.hpp
> +++ b/src/src/Plugins/Qt/qt_gui.hpp
> @@ -39,7 +39,6 @@ public:
>   QTMGuiHelper *gui_helper;
>   QTimer *updatetimer;
>
> -  char*                  selection;
>   hashmap<string,tree>   selection_t;
>   hashmap<string,string> selection_s;
>
> --
> 1.6.3.3
>
> _______________________________________________
> Texmacs-dev mailing list
> Texmacs-dev@...
> http://lists.gnu.org/mailman/listinfo/texmacs-dev



_______________________________________________
Texmacs-dev mailing list
Texmacs-dev@...
http://lists.gnu.org/mailman/listinfo/texmacs-dev