Procházet zdrojové kódy

Copy clipboard to Qubes clipboard.(#543)

Agnieszka Kostrzewa před 12 roky
rodič
revize
b0d32f550d
4 změnil soubory, kde provedl 45 přidání a 1 odebrání
  1. binární
      icons/copy.png
  2. 15 1
      mainwindow.ui
  3. 29 0
      qubesmanager/main.py
  4. 1 0
      resources.qrc

binární
icons/copy.png


+ 15 - 1
mainwindow.ui

@@ -229,7 +229,7 @@
      <x>0</x>
      <y>0</y>
      <width>769</width>
-     <height>23</height>
+     <height>25</height>
     </rect>
    </property>
    <widget class="QMenu" name="menu_system">
@@ -239,6 +239,7 @@
     <addaction name="action_global_settings"/>
     <addaction name="action_backup"/>
     <addaction name="action_restore"/>
+    <addaction name="action_copy_clipboard"/>
    </widget>
    <widget class="QMenu" name="menu_view">
     <property name="title">
@@ -345,6 +346,7 @@
    <addaction name="action_restore"/>
    <addaction name="separator"/>
    <addaction name="action_showallvms"/>
+   <addaction name="action_copy_clipboard"/>
   </widget>
   <action name="action_createvm">
    <property name="icon">
@@ -725,6 +727,18 @@
     <string>Size on Disk</string>
    </property>
   </action>
+  <action name="action_copy_clipboard">
+   <property name="icon">
+    <iconset resource="resources.qrc">
+     <normaloff>:/copy.png</normaloff>:/copy.png</iconset>
+   </property>
+   <property name="text">
+    <string>Copy clipboard to Qubes clipboard</string>
+   </property>
+   <property name="toolTip">
+    <string>Copy Dom0 clipboard to Qubes clipboard</string>
+   </property>
+  </action>
  </widget>
  <resources>
   <include location="resources.qrc"/>

+ 29 - 0
qubesmanager/main.py

@@ -22,6 +22,7 @@
 
 import sys
 import os
+import fcntl
 import dbus
 from PyQt4.QtCore import *
 from PyQt4.QtGui import *
@@ -1493,7 +1494,35 @@ class VmManagerWindow(Ui_VmManagerWindow, QMainWindow):
     def action_about_qubes_triggered(self):
         QMessageBox.about(self, "About...", "<b>Qubes OS</b><br><br>Release 1.0")
 
+    @pyqtSlot(name='on_action_copy_clipboard_triggered')
+    def action_copy_clipboard_triggered(self):
+        clipboard = app.clipboard().text()
 
+        #inter-appviewer lock
+        try:
+            fd = os.open("/var/run/qubes/appviewer.lock", os.O_RDWR|os.O_CREAT, 0600);
+            fcntl.flock(fd, fcntl.LOCK_EX);
+        except IOError:
+            QMessageBox.warning (None, "Warning!", "Error while accessing Qubes clipboard!")
+            return
+
+        qubes_clipboard = open("/var/run/qubes/qubes_clipboard.bin", 'w')
+        qubes_clipboard.write(clipboard)
+        qubes_clipboard.close()
+            
+        qubes_clip_source = open("/var/run/qubes/qubes_clipboard.source", 'w')
+        qubes_clip_source.write("dom0")
+        qubes_clip_source.close()
+
+        trayIcon.showMessage ("Qubes VM Manager", "Qubes clipboard fetched from <b>dom0</b>.", msecs=3000)
+        try:
+            fcntl.flock(fd, fcntl.LOCK_UN)
+            os.close(fd)
+        except IOError:
+            QMessageBox.warning (None, "Warning!", "Error while writing to Qubes clipboard!")
+            return
+    
+            
     def createPopupMenu(self):
         menu = QMenu()
         menu.addAction(self.action_toolbar)

+ 1 - 0
resources.qrc

@@ -13,6 +13,7 @@
     <file alias="mount.png">icons/mount.png</file>
     <file alias="log.png">icons/log.png</file>
     <file alias="kbd-layout.png">icons/kbd-layout.png</file>
+    <file alias="copy.png">icons/copy.png</file>
     <file alias="pencil.png">icons/pencil.png</file>
     <file alias="edit.png">icons/edit.png</file>
     <file alias="add.png">icons/add.png</file>