summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/xembed.cc20
-rw-r--r--src/xembed.hh12
2 files changed, 32 insertions, 0 deletions
diff --git a/src/xembed.cc b/src/xembed.cc
new file mode 100644
index 00000000..92be330a
--- /dev/null
+++ b/src/xembed.cc
@@ -0,0 +1,20 @@
+#include <fltk/Window.h>
+#include <fltk/x11.h>
+#include <fltk/x.h>
+
+#include "xembed.hh"
+
+using namespace fltk;
+// TODO; Implement proper XEMBED support;
+// http://standards.freedesktop.org/xembed-spec/xembed-spec-latest.html
+void Xembed::embed (unsigned long xid) {
+#if USE_X11
+ fltk::Widget *r = resizable();
+ // WORKAROUND: Avoid jumping windows with tiling window managers (e.g. dwm)
+ resizable(NULL);
+ fltk::Window::show();
+ fltk::Widget::hide();
+ resizable(r);
+ XReparentWindow (fltk::xdisplay, fltk::xid(this), xid, 0, 0);
+#endif
+}
diff --git a/src/xembed.hh b/src/xembed.hh
new file mode 100644
index 00000000..06bd599c
--- /dev/null
+++ b/src/xembed.hh
@@ -0,0 +1,12 @@
+#ifndef __XIDWINDOW_HH__
+#define __XIDWINDOW_HH__
+
+#include <fltk/Window.h>
+
+class Xembed : public fltk::Window {
+ public:
+ Xembed(int _w, int _h) : fltk::Window(_w, _h) {};
+ void embed(unsigned long xid);
+};
+
+#endif