changeset 17123:47b504503a3f

disable global paste action when clipboard is empty * main_window.cc(constructor): initialize class variable for the clipboard, (construct_edit_menu): don't set shortcut for paste action here, add new menu for clearing the clipboard, connect the clipboard's change signal to the new slot clipboard_has_changed, (clipboard_has_changed): new slot enabling or disabling the paste and clear clipboard action when clipboard has changed (clear_clipboard): new slot for the clear clipboard action * main_window.h: new slots clipboard-has_changed and clear_clipboard, new class variable _clipboard, new action _clear_clipboard
author Torsten <ttl@justmail.de>
date Wed, 31 Jul 2013 21:25:04 +0200
parents 59acfe9209dd
children c97a26408ee0
files libgui/src/main-window.cc libgui/src/main-window.h
diffstat 2 files changed, 45 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/libgui/src/main-window.cc
+++ b/libgui/src/main-window.cc
@@ -77,7 +77,8 @@
     workspace_window (new workspace_view (this)),
     find_files_dlg (0),
     _octave_main_thread (0),
-    _octave_qt_link (0)
+    _octave_qt_link (0),
+    _clipboard (QApplication::clipboard ())
 {
   // We have to set up all our windows, before we finally launch octave.
   construct ();
@@ -852,8 +853,6 @@
 
   construct_octave_qt_link ();
 
-  set_global_shortcuts (true);
-
 #ifdef HAVE_QSCINTILLA
   connect (this,
            SIGNAL (insert_debugger_pointer_signal (const QString&, int)),
@@ -875,6 +874,9 @@
   set_current_working_directory (curr_dir.absolutePath ());
 
   octave_link::post_event (this, &main_window::resize_command_window_callback);
+
+  set_global_shortcuts (true);
+
 }
 
 void
@@ -1083,15 +1085,19 @@
                             tr ("Copy"), this, SLOT (copyClipboard ()));
   _copy_action->setShortcut (QKeySequence::Copy);
 
+
   _paste_action
     = edit_menu->addAction (QIcon (":/actions/icons/editpaste.png"),
                             tr ("Paste"), this, SLOT (pasteClipboard ()));
   _paste_action->setShortcut (QKeySequence::Paste);
 
+  _clear_clipboard_action
+    = edit_menu->addAction (tr ("Clear Clipboard"), this,
+                            SLOT (clear_clipboard ()));
+
   edit_menu->addSeparator ();
 
-  _find_files_action
-    = edit_menu->addAction (tr ("Find Files..."));
+  _find_files_action = edit_menu->addAction (tr ("Find Files..."));
 
   edit_menu->addSeparator ();
 
@@ -1115,6 +1121,10 @@
 
   connect (clear_workspace_action, SIGNAL (triggered ()),
            this, SLOT (handle_clear_workspace_request ()));
+
+  connect (_clipboard, SIGNAL (changed (QClipboard::Mode)),
+           this, SLOT (clipboard_has_changed (QClipboard::Mode)));
+  clipboard_has_changed (QClipboard::Clipboard);
 }
 
 QAction *
@@ -1638,4 +1648,26 @@
   emit show_doc_signal (file);
 }
 
+void
+main_window::clipboard_has_changed (QClipboard::Mode cp_mode)
+{
+  if (cp_mode == QClipboard::Clipboard)
+    {
+      if (_clipboard->text ().isEmpty ())
+        {
+          _paste_action->setEnabled (false);
+          _clear_clipboard_action->setEnabled (false);
+        }
+      else
+        {
+          _paste_action->setEnabled (true);
+          _clear_clipboard_action->setEnabled (true);
+        }
+    }
+}
 
+void
+main_window::clear_clipboard ()
+{
+  _clipboard->clear (QClipboard::Clipboard);
+}
--- a/libgui/src/main-window.h
+++ b/libgui/src/main-window.h
@@ -182,6 +182,11 @@
   // setting global shortcuts
   void set_global_shortcuts (bool enable);
 
+  // handling the clipboard
+  void clipboard_has_changed (QClipboard::Mode);
+  void clear_clipboard ();
+
+
 protected:
   void closeEvent (QCloseEvent * closeEvent);
 
@@ -286,6 +291,7 @@
 
   QAction *_copy_action;
   QAction *_paste_action;
+  QAction *_clear_clipboard_action;
   QAction *_undo_action;
 
   QAction *_find_files_action;
@@ -305,6 +311,8 @@
 
   octave_qt_link *_octave_qt_link;
 
+  QClipboard *_clipboard;
+
   // Flag for closing whole application.
   bool _closing;
 };