diff options
Diffstat (limited to 'fluxbox/add-clientmachine-if-forwarded_1.3.5.patch')
-rw-r--r-- | fluxbox/add-clientmachine-if-forwarded_1.3.5.patch | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/fluxbox/add-clientmachine-if-forwarded_1.3.5.patch b/fluxbox/add-clientmachine-if-forwarded_1.3.5.patch new file mode 100644 index 0000000..30255ed --- /dev/null +++ b/fluxbox/add-clientmachine-if-forwarded_1.3.5.patch @@ -0,0 +1,123 @@ +Author: bgstack15 +Date: 2022-11-09 +Version: fluxbox 1.3.5 +Source: original +Summary: Add "(on $CLIENT)" to titlebar for forwarded windows +Message: +Inspired by xfwm4's ability to display the remote host running an X11 window. This fails on xfe which somehow lacks the WM_CLIENT_MACHINE property. +--- a/src/Xutil.cc ++++ b/src/Xutil.cc +@@ -43,6 +43,51 @@ using std::endl; + + namespace Xutil { + ++FbTk::FbString getWMClientMachine(Window window) { ++ ++ if (window == None) ++ return FbTk::FbString(""); ++ ++ Display *display = FbTk::App::instance()->display(); ++ ++ XTextProperty text_prop; ++ text_prop.value = 0; ++ char **list = 0; ++ int num = 0; ++ _FB_USES_NLS; ++ FbTk::FbString name; ++ ++ if (XGetWMClientMachine(display, window, &text_prop)) { ++ if (text_prop.value && text_prop.nitems > 0) { ++ if (text_prop.encoding != XA_STRING) { ++ ++ text_prop.nitems = strlen((char *) text_prop.value); ++ XmbTextPropertyToTextList(display, &text_prop, &list, &num); ++ ++ if (num > 0 && list != 0) ++ name = FbTk::FbStringUtil::LocaleStrToFb(static_cast<char *>(*list)); ++ else ++ name = text_prop.value ? FbTk::FbStringUtil::XStrToFb((char *)text_prop.value) : ""; ++ ++ if (list) ++ XFreeStringList(list); ++ ++ } else ++ name = text_prop.value ? FbTk::FbStringUtil::XStrToFb((char *)text_prop.value) : ""; ++ ++ XFree(text_prop.value); ++ ++ } else { // default name ++ name = _FB_XTEXT(Window, Unnamed, "Unnamed", "Default name for a window without a WM_NAME"); ++ } ++ } else { ++ // default name ++ name = _FB_XTEXT(Window, Unnamed, "Unnamed", "Default name for a window without a WM_NAME"); ++ } ++ ++ return name; ++} ++ + FbTk::FbString getWMName(Window window) { + + if (window == None) +--- a/src/Xutil.hh ++++ b/src/Xutil.hh +@@ -28,6 +28,7 @@ + + namespace Xutil { + ++FbTk::FbString getWMClientMachine(Window window); + FbTk::FbString getWMName(Window window); + + FbTk::FbString getWMClassName(Window win); +--- a/src/WinClient.cc ++++ b/src/WinClient.cc +@@ -211,6 +211,10 @@ bool WinClient::getAttrib(XWindowAttribu + return XGetWindowAttributes(display(), window(), &attr); + } + ++bool WinClient::getWMClientMachine(XTextProperty &textprop) const { ++ return XGetWMClientMachine(display(), window(), &textprop); ++} ++ + bool WinClient::getWMName(XTextProperty &textprop) const { + return XGetWMName(display(), window(), &textprop); + } +@@ -313,12 +317,26 @@ void WinClient::updateTitle() { + if (m_title_override) + return; + +- m_title.setLogical(FbTk::FbString(Xutil::getWMName(window()), 0, 512)); ++ FbTk::FbString fullname = FbTk::FbString(Xutil::getWMName(window()), 0, 512); ++ FbTk::FbString clientmachine = FbTk::FbString(Xutil::getWMClientMachine(window()), 0, 512); ++ char *host = new char[512]; gethostname(host, 512); ++ FbTk::FbString hostname = FbTk::FbString(host); ++ if (clientmachine != "Unnamed" && clientmachine != "" && clientmachine != hostname) { ++ fullname += " (on " + clientmachine + ")"; ++ } ++ m_title.setLogical(fullname); + titleSig().emit(m_title.logical(), *this); + } + + void WinClient::setTitle(const FbTk::FbString &title) { +- m_title.setLogical(title); ++ FbTk::FbString fullname = title; ++ FbTk::FbString clientmachine = FbTk::FbString(Xutil::getWMClientMachine(window()), 0, 512); ++ char *host = new char[512]; gethostname(host, 512); ++ FbTk::FbString hostname = FbTk::FbString(host); ++ if (clientmachine != "Unnamed" && clientmachine != "" && clientmachine != hostname) { ++ fullname += " (on " + clientmachine + ")"; ++ } ++ m_title.setLogical(fullname); + m_title_override = true; + titleSig().emit(m_title.logical(), *this); + } +--- a/src/WinClient.hh ++++ b/src/WinClient.hh +@@ -91,6 +91,7 @@ public: + // + + bool getAttrib(XWindowAttributes &attr) const; ++ bool getWMClientMachine(XTextProperty &textprop) const; + bool getWMName(XTextProperty &textprop) const; + bool getWMIconName(XTextProperty &textprop) const; + std::string getWMRole() const; |