Created
August 22, 2013 02:37
-
-
Save thefloweringash/6302597 to your computer and use it in GitHub Desktop.
Xpra on FreeBSD
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/sh | |
if [ ! -d 'xpra' ]; then | |
echo "Could not find xpra source dir" | |
exit 1 | |
fi | |
XPRA_GTK_MAIN_FILES=` | |
grep -r . -El -e '^[[:space:]]*gtk\.main\(\)[[:space:]]*$'` | |
mkdir -p /tmp/xpra-a /tmp/xpra-b | |
tar -cf- $XPRA_GTK_MAIN_FILES | tar -xf- -C /tmp/xpra-a | |
tar -cf- $XPRA_GTK_MAIN_FILES | tar -xf- -C /tmp/xpra-b | |
cd /tmp/xpra-b | |
perl -i'' -ne \ | |
'if (/^(\s*)gtk\.main\(\)\s*$/) { | |
print $1."gtk.gdk.threads_enter()\n"; | |
print $_; | |
print $1."gtk.gdk.threads_leave()\n"; | |
} else { | |
print $_; | |
}' $XPRA_GTK_MAIN_FILES | |
cd /tmp | |
diff -ur xpra-a xpra-b | sed -e 's|xpra-a/||' -e 's|xpra-b/||' | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff -ur parti/parti_main.py parti/parti_main.py | |
--- parti/parti_main.py 2013-02-12 22:35:37.000000000 +1300 | |
+++ parti/parti_main.py 2013-08-18 18:51:45.000000000 +1200 | |
@@ -58,7 +58,9 @@ | |
self._dbus = PartiDBusService(self) | |
def main(self): | |
+ gtk.gdk.threads_enter() | |
gtk.main() | |
+ gtk.gdk.threads_leave() | |
def _wm_quit(self, *args): | |
gtk_main_quit_really() | |
diff -ur parti/test_bus.py parti/test_bus.py | |
--- parti/test_bus.py 2013-02-12 22:35:37.000000000 +1300 | |
+++ parti/test_bus.py 2013-08-18 18:51:45.000000000 +1200 | |
@@ -31,7 +31,9 @@ | |
proxy.SpawnReplWindow(reply_handler=replied, | |
error_handler=errored) | |
assert not wm.called | |
+ gtk.gdk.threads_enter() | |
gtk.main() | |
+ gtk.gdk.threads_leave() | |
print("mainloop exited") | |
assert not self.error | |
assert wm.called | |
diff -ur tests/wimpiggy/test_lowlevel.py tests/wimpiggy/test_lowlevel.py | |
--- tests/wimpiggy/test_lowlevel.py 2013-02-12 22:35:38.000000000 +1300 | |
+++ tests/wimpiggy/test_lowlevel.py 2013-08-18 18:51:45.000000000 +1200 | |
@@ -239,7 +239,9 @@ | |
w2.set_events(gtk.gdk.STRUCTURE_MASK) | |
w2.show() | |
while len(results) != 4: | |
+ gtk.gdk.threads_enter() | |
gtk.main() | |
+ gtk.gdk.threads_leave() | |
w2.hide() | |
assert results == set([("child-map", 1), ("child-map", 2), | |
("map", 3), ("map", 4)]) | |
@@ -248,7 +250,9 @@ | |
results.clear() | |
w2.show() | |
while len(results) != 2: | |
+ gtk.gdk.threads_enter() | |
gtk.main() | |
+ gtk.gdk.threads_leave() | |
assert results == set([("child-map", 1), ("map", 3)]) | |
class TestUnmapWithSerial(TestLowlevel, MockEventReceiver): | |
@@ -267,7 +271,9 @@ | |
l.add_event_receiver(w, self) | |
serial = l.unmap_with_serial(w) | |
print(serial) | |
+ gtk.gdk.threads_enter() | |
gtk.main() | |
+ gtk.gdk.threads_leave() | |
assert self._event is not None | |
assert self._event.serial == serial | |
@@ -304,7 +310,9 @@ | |
gtk.gdk.flush() | |
l.XSetInputFocus(self.w1) | |
gtk.gdk.flush() | |
+ gtk.gdk.threads_enter() | |
gtk.main() | |
+ gtk.gdk.threads_leave() | |
assert self.w1_got is not None | |
assert self.w1_got.window is self.w1 | |
assert self.w1_got.mode == l.const["NotifyNormal"] | |
@@ -316,8 +324,12 @@ | |
l.XSetInputFocus(self.w2) | |
gtk.gdk.flush() | |
+ gtk.gdk.threads_enter() | |
gtk.main() | |
+ gtk.gdk.threads_leave() | |
+ gtk.gdk.threads_enter() | |
gtk.main() | |
+ gtk.gdk.threads_leave() | |
assert self.w1_got is None | |
assert self.w2_got is not None | |
assert self.w2_got.window is self.w2 | |
@@ -333,7 +345,9 @@ | |
l.XSetInputFocus(self.root()) | |
gtk.gdk.flush() | |
+ gtk.gdk.threads_enter() | |
gtk.main() | |
+ gtk.gdk.threads_leave() | |
assert self.w1_got is None | |
assert self.w2_got is None | |
assert self.w1_lost is None | |
@@ -360,7 +374,9 @@ | |
data = (0x01020304, 0x05060708, 0x090a0b0c, 0x0d0e0f10, 0x11121314) | |
l.sendClientMessage(self.root(), False, 0, "NOMASK", *data) | |
l.sendClientMessage(self.w, False, 0, "NOMASK", *data) | |
+ gtk.gdk.threads_enter() | |
gtk.main() | |
+ gtk.gdk.threads_leave() | |
# Should have gotten message to w, not to root | |
assert len(self.evs) == 1 | |
ev = self.evs[0] | |
@@ -375,7 +391,9 @@ | |
l.addXSelectInput(self.root(), l.const["Button1MotionMask"]) | |
l.sendClientMessage(self.root(), False, l.const["Button1MotionMask"], | |
"GOOD", *data) | |
+ gtk.gdk.threads_enter() | |
gtk.main() | |
+ gtk.gdk.threads_leave() | |
assert len(self.evs) == 1 | |
ev = self.evs[0] | |
assert ev.window is self.root() | |
@@ -390,7 +408,9 @@ | |
gtk.gdk.flush() | |
send_wm.send_wm_take_focus(win, 1234) | |
+ gtk.gdk.threads_enter() | |
gtk.main() | |
+ gtk.gdk.threads_leave() | |
assert len(self.evs) == 1 | |
event = self.evs[0] | |
assert event is not None | |
@@ -406,7 +426,9 @@ | |
gtk.gdk.flush() | |
send_wm.send_wm_take_focus(win, 0xff000000) | |
+ gtk.gdk.threads_enter() | |
gtk.main() | |
+ gtk.gdk.threads_leave() | |
assert len(self.evs) == 1 | |
event = self.evs[0] | |
assert event is not None | |
@@ -439,7 +461,9 @@ | |
w1.show() | |
gtk.gdk.flush() | |
l.sendConfigureNotify(w1) | |
+ gtk.gdk.threads_enter() | |
gtk.main() | |
+ gtk.gdk.threads_leave() | |
assert self.ev is not None | |
assert self.ev.type == gtk.gdk.CONFIGURE | |
@@ -466,12 +490,16 @@ | |
# To double-check that it's still a TOPLEVEL: | |
print(w1.get_window_type()) | |
w1.resize(15, 16) | |
+ gtk.gdk.threads_enter() | |
gtk.main() | |
+ gtk.gdk.threads_leave() | |
# w1 in root coordinates is now at (24, 26) | |
self.ev = None | |
l.sendConfigureNotify(w1) | |
+ gtk.gdk.threads_enter() | |
gtk.main() | |
+ gtk.gdk.threads_leave() | |
assert self.ev is not None | |
assert self.ev.type == gtk.gdk.CONFIGURE | |
@@ -512,7 +540,9 @@ | |
# Can't just call gtk.main() twice, the two events may be delivered | |
# together and processed in a single mainloop iteration. | |
while None in (self.map_ev, self.conf_ev): | |
+ gtk.gdk.threads_enter() | |
gtk.main() | |
+ gtk.gdk.threads_leave() | |
assert self.map_ev.delivered_to is root | |
assert self.map_ev.window is w1 | |
@@ -527,7 +557,9 @@ | |
self.conf_ev = None | |
w2.move_resize(1, 2, 3, 4) | |
+ gtk.gdk.threads_enter() | |
gtk.main() | |
+ gtk.gdk.threads_leave() | |
assert self.map_ev is None | |
assert self.conf_ev is not None | |
assert self.conf_ev.delivered_to is root | |
@@ -544,7 +576,9 @@ | |
self.map_ev = None | |
self.conf_ev = None | |
w2.move(5, 6) | |
+ gtk.gdk.threads_enter() | |
gtk.main() | |
+ gtk.gdk.threads_leave() | |
assert self.map_ev is None | |
assert self.conf_ev.x == 5 | |
assert self.conf_ev.y == 6 | |
@@ -553,7 +587,9 @@ | |
self.map_ev = None | |
self.conf_ev = None | |
w2.raise_() | |
+ gtk.gdk.threads_enter() | |
gtk.main() | |
+ gtk.gdk.threads_leave() | |
assert self.map_ev is None | |
assert self.conf_ev.detail == l.const["Above"] | |
assert self.conf_ev.value_mask == l.const["CWStackMode"] | |
@@ -570,7 +606,9 @@ | |
w1_wm = l.get_pywindow(self.display, l.get_xwindow(w1_client)) | |
l.configureAndNotify(w1_client, 11, 12, 13, 14) | |
+ gtk.gdk.threads_enter() | |
gtk.main() | |
+ gtk.gdk.threads_leave() | |
assert self.conf_ev is not None | |
assert self.conf_ev.delivered_to is self.root() | |
@@ -588,7 +626,9 @@ | |
partial_mask = l.const["CWWidth"] | l.const["CWStackMode"] | |
l.configureAndNotify(w1_client, 11, 12, 13, 14, partial_mask) | |
+ gtk.gdk.threads_enter() | |
gtk.main() | |
+ gtk.gdk.threads_leave() | |
assert self.conf_ev is not None | |
assert self.conf_ev.delivered_to is self.root() | |
diff -ur tests/wimpiggy/test_selection.py tests/wimpiggy/test_selection.py | |
--- tests/wimpiggy/test_selection.py 2013-02-12 22:35:38.000000000 +1300 | |
+++ tests/wimpiggy/test_selection.py 2013-08-18 18:51:45.000000000 +1200 | |
@@ -53,7 +53,9 @@ | |
assert not m.owned() | |
assert self.event is None | |
m.acquire(m.IF_UNOWNED) | |
+ gtk.gdk.threads_enter() | |
gtk.main() | |
+ gtk.gdk.threads_leave() | |
assert self.event is not None | |
assert self.event.window is root2 | |
assert self.event.message_type == "MANAGER" | |
diff -ur tests/wimpiggy/test_util.py tests/wimpiggy/test_util.py | |
--- tests/wimpiggy/test_util.py 2013-02-12 22:35:38.000000000 +1300 | |
+++ tests/wimpiggy/test_util.py 2013-08-18 18:51:45.000000000 +1200 | |
@@ -99,7 +99,9 @@ | |
gobject.timeout_add(0, self._run_gtk_main) | |
else: | |
gobject.timeout_add(0, wimpiggy.util.gtk_main_quit_really) | |
+ gtk.gdk.threads_enter() | |
gtk.main() | |
+ gtk.gdk.threads_leave() | |
return False | |
def _count_iters(self): | |
@@ -112,14 +114,18 @@ | |
def test(self): | |
gobject.timeout_add(0, self._run_gtk_main) | |
+ gtk.gdk.threads_enter() | |
gtk.main() | |
+ gtk.gdk.threads_leave() | |
# If we get here, then gtk_main_quit_really managed to extricate us | |
# from multiple recursive main loops. Next question: did it clean up | |
# after itself? (I.e., can we enter a new main loop without it being | |
# immediately exited?) | |
self._iters = 0 | |
gobject.timeout_add(0, self._count_iters) | |
+ gtk.gdk.threads_enter() | |
gtk.main() | |
+ gtk.gdk.threads_leave() | |
# If we get here, then the second main loop exited -- but did it do so | |
# immediately, or did it run for a while? | |
assert self._iters > 5 | |
diff -ur tests/xpra/gl/gl_backing_test.py tests/xpra/gl/gl_backing_test.py | |
--- tests/xpra/gl/gl_backing_test.py 2013-02-12 22:35:38.000000000 +1300 | |
+++ tests/xpra/gl/gl_backing_test.py 2013-08-18 18:51:45.000000000 +1200 | |
@@ -46,7 +46,9 @@ | |
from xpra.gl.gl_client_window import GLClientWindow | |
gl_backing_test(gl_client_window_class=GLClientWindow) | |
+ gtk.gdk.threads_enter() | |
gtk.main() | |
+ gtk.gdk.threads_leave() | |
if __name__ == '__main__': | |
diff -ur tests/xpra/gl/gl_simple_backing_test.py tests/xpra/gl/gl_simple_backing_test.py | |
--- tests/xpra/gl/gl_simple_backing_test.py 2013-02-12 22:35:38.000000000 +1300 | |
+++ tests/xpra/gl/gl_simple_backing_test.py 2013-08-18 18:51:45.000000000 +1200 | |
@@ -24,7 +24,9 @@ | |
logging.root.setLevel(logging.DEBUG) | |
gl_backing_test(gl_client_window_class=GLSimpleClientWindow, w=640, h=480) | |
+ gtk.gdk.threads_enter() | |
gtk.main() | |
+ gtk.gdk.threads_leave() | |
if __name__ == '__main__': | |
diff -ur tests/xpra/gl/gl_texture_bind_test.py tests/xpra/gl/gl_texture_bind_test.py | |
--- tests/xpra/gl/gl_texture_bind_test.py 2013-02-12 22:35:38.000000000 +1300 | |
+++ tests/xpra/gl/gl_texture_bind_test.py 2013-08-18 18:51:45.000000000 +1200 | |
@@ -311,4 +311,6 @@ | |
if __name__ == '__main__': | |
print "screen is %sx%s" % (gtk.gdk.screen_width(), gtk.gdk.screen_height()) | |
app = App() | |
+ gtk.gdk.threads_enter() | |
gtk.main() | |
+ gtk.gdk.threads_leave() | |
diff -ur tests/xpra/test_keymap_changes.py tests/xpra/test_keymap_changes.py | |
--- tests/xpra/test_keymap_changes.py 2013-02-12 22:35:38.000000000 +1300 | |
+++ tests/xpra/test_keymap_changes.py 2013-08-18 18:51:45.000000000 +1200 | |
@@ -28,7 +28,9 @@ | |
print("keymap=%s" % keymap) | |
keymap.connect("keys-changed", keys_changed) | |
+ gtk.gdk.threads_enter() | |
gtk.main() | |
+ gtk.gdk.threads_leave() | |
if __name__ == "__main__": | |
diff -ur tests/xpra/test_window_move.py tests/xpra/test_window_move.py | |
--- tests/xpra/test_window_move.py 2013-02-12 22:35:37.000000000 +1300 | |
+++ tests/xpra/test_window_move.py 2013-08-18 18:51:45.000000000 +1200 | |
@@ -27,7 +27,9 @@ | |
btn.connect('clicked', move) | |
window.add(vbox) | |
window.show_all() | |
+ gtk.gdk.threads_enter() | |
gtk.main() | |
+ gtk.gdk.threads_leave() | |
return 0 | |
diff -ur tests/xpra/test_window_resize.py tests/xpra/test_window_resize.py | |
--- tests/xpra/test_window_resize.py 2013-02-12 22:35:38.000000000 +1300 | |
+++ tests/xpra/test_window_resize.py 2013-08-18 18:51:45.000000000 +1200 | |
@@ -22,7 +22,9 @@ | |
btn.connect('clicked', resize) | |
window.add(btn) | |
window.show_all() | |
+ gtk.gdk.threads_enter() | |
gtk.main() | |
+ gtk.gdk.threads_leave() | |
return 0 | |
diff -ur tests/xpra/test_window_title.py tests/xpra/test_window_title.py | |
--- tests/xpra/test_window_title.py 2013-02-12 22:35:37.000000000 +1300 | |
+++ tests/xpra/test_window_title.py 2013-08-18 18:51:45.000000000 +1200 | |
@@ -17,7 +17,9 @@ | |
entry.show() | |
window.add(entry) | |
window.show_all() | |
+ gtk.gdk.threads_enter() | |
gtk.main() | |
+ gtk.gdk.threads_leave() | |
return 0 | |
if __name__ == "__main__": | |
diff -ur wimpiggy/selection.py wimpiggy/selection.py | |
--- wimpiggy/selection.py 2013-02-12 22:35:37.000000000 +1300 | |
+++ wimpiggy/selection.py 2013-08-18 18:51:45.000000000 +1200 | |
@@ -111,7 +111,9 @@ | |
else: | |
log("Waiting for previous owner to exit...") | |
add_event_receiver(window, self) | |
+ gtk.gdk.threads_enter() | |
gtk.main() | |
+ gtk.gdk.threads_leave() | |
log("...they did.") | |
window = get_pywindow(self.clipboard, self._xwindow) | |
window.set_title("Xpra-ManagerSelection") | |
diff -ur wimpiggy.README wimpiggy.README | |
--- wimpiggy.README 2013-02-12 22:35:37.000000000 +1300 | |
+++ wimpiggy.README 2013-08-18 18:51:45.000000000 +1200 | |
@@ -80,4 +80,6 @@ | |
help="Replace already running WM") | |
(options, args) = parser.parse_args() | |
wm = DemoWm(options.replace) | |
+ gtk.gdk.threads_enter() | |
gtk.main() | |
+ gtk.gdk.threads_leave() | |
diff -ur xpra/client.py xpra/client.py | |
--- xpra/client.py 2013-02-26 23:44:58.000000000 +1300 | |
+++ xpra/client.py 2013-08-18 18:51:45.000000000 +1200 | |
@@ -338,7 +338,9 @@ | |
def run(self): | |
gtk_main_quit_on_fatal_exceptions_enable() | |
+ gtk.gdk.threads_enter() | |
gtk.main() | |
+ gtk.gdk.threads_leave() | |
return self.exit_code | |
def quit(self, exit_code=0): | |
diff -ur xpra/dbus_notifications_forwarder.py xpra/dbus_notifications_forwarder.py | |
--- xpra/dbus_notifications_forwarder.py 2013-02-12 22:35:39.000000000 +1300 | |
+++ xpra/dbus_notifications_forwarder.py 2013-08-18 18:51:45.000000000 +1200 | |
@@ -85,7 +85,9 @@ | |
def main(): | |
register() | |
+ gtk.gdk.threads_enter() | |
gtk.main() | |
+ gtk.gdk.threads_leave() | |
if __name__ == "__main__": | |
main() | |
diff -ur xpra/gtk_view_keyboard.py xpra/gtk_view_keyboard.py | |
--- xpra/gtk_view_keyboard.py 2013-02-12 22:35:39.000000000 +1300 | |
+++ xpra/gtk_view_keyboard.py 2013-08-18 18:51:45.000000000 +1200 | |
@@ -108,7 +108,9 @@ | |
def main(): | |
KeyboardStateInfoWindow() | |
+ gtk.gdk.threads_enter() | |
gtk.main() | |
+ gtk.gdk.threads_leave() | |
if __name__ == "__main__": | |
main() | |
diff -ur xpra/nested_main.py xpra/nested_main.py | |
--- xpra/nested_main.py 2013-02-12 22:35:38.000000000 +1300 | |
+++ xpra/nested_main.py 2013-08-18 18:51:45.000000000 +1200 | |
@@ -141,7 +141,9 @@ | |
log("Entering nested loop %s (level %s)", | |
hex(id(self)), gtk.main_level()) | |
try: | |
+ gtk.gdk.threads_enter() | |
gtk.main() | |
+ gtk.gdk.threads_leave() | |
finally: | |
assert self._stack.pop() is self | |
gobject.source_remove(soft) | |
diff -ur xpra/platform/graph.py xpra/platform/graph.py | |
--- xpra/platform/graph.py 2013-02-12 22:35:38.000000000 +1300 | |
+++ xpra/platform/graph.py 2013-08-18 18:51:45.000000000 +1200 | |
@@ -201,7 +201,9 @@ | |
window.connect("destroy", gtk.main_quit) | |
window.show_all() | |
+ gtk.gdk.threads_enter() | |
gtk.main() | |
+ gtk.gdk.threads_leave() | |
if __name__ == "__main__": | |
diff -ur xpra/scripts/client_launcher.py xpra/scripts/client_launcher.py | |
--- xpra/scripts/client_launcher.py 2013-02-26 19:29:29.000000000 +1300 | |
+++ xpra/scripts/client_launcher.py 2013-08-18 18:51:45.000000000 +1200 | |
@@ -504,7 +504,9 @@ | |
self.encoding_changed() | |
def run(self): | |
+ gtk.gdk.threads_enter() | |
gtk.main() | |
+ gtk.gdk.threads_leave() | |
def mode_changed(self, *args): | |
ssh = self.mode_combo.get_active_text()=="SSH" | |
diff -ur xpra/server_base.py xpra/server_base.py | |
--- xpra/server_base.py 2013-02-26 23:44:57.000000000 +1300 | |
+++ xpra/server_base.py 2013-08-18 18:51:45.000000000 +1200 | |
@@ -298,7 +298,9 @@ | |
log.info("xpra is ready.") | |
sys.stdout.flush() | |
gobject.idle_add(print_ready) | |
+ gtk.gdk.threads_enter() | |
gtk.main() | |
+ gtk.gdk.threads_leave() | |
log.info("xpra end of gtk.main().") | |
return self._upgrading | |
diff -ur xpra/sound/sink.py xpra/sound/sink.py | |
--- xpra/sound/sink.py 2013-02-12 22:35:38.000000000 +1300 | |
+++ xpra/sound/sink.py 2013-08-18 18:51:45.000000000 +1200 | |
@@ -191,7 +191,9 @@ | |
gobject.timeout_add(1000, check_for_end) | |
import gtk | |
+ gtk.gdk.threads_enter() | |
gtk.main() | |
+ gtk.gdk.threads_leave() | |
if __name__ == "__main__": | |
diff -ur xpra/sound/src.py xpra/sound/src.py | |
--- xpra/sound/src.py 2013-03-07 06:36:17.000000000 +1300 | |
+++ xpra/sound/src.py 2013-08-18 18:51:45.000000000 +1200 | |
@@ -150,7 +150,9 @@ | |
signal.signal(signal.SIGTERM, deadly_signal) | |
import gtk | |
+ gtk.gdk.threads_enter() | |
gtk.main() | |
+ gtk.gdk.threads_leave() | |
f.flush() | |
log.info("wrote %s bytes to %s", f.tell(), filename) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment