/** * Process a find_win D-Bus request. */ static bool cdbus_process_find_win(session_t *ps, DBusMessage *msg) { const char *target = NULL; if (!cdbus_msg_get_arg(msg, 0, DBUS_TYPE_STRING, &target)) return false; Window wid = None; // Find window by client window if (!strcmp("client", target)) { cdbus_window_t client = None; if (!cdbus_msg_get_arg(msg, 1, CDBUS_TYPE_WINDOW, &client)) return false; win *w = find_toplevel(ps, client); if (w) wid = w->id; } // Find focused window else if (!strcmp("focused", target)) { win *w = find_focused(ps); if (w) wid = w->id; } else { printf_errf("(): " CDBUS_ERROR_BADTGT_S, target); cdbus_reply_err(ps, msg, CDBUS_ERROR_BADTGT, CDBUS_ERROR_BADTGT_S, target); return true; } cdbus_reply_wid(ps, msg, wid); return true; }
string bark(string const pf, string const func) { string::const_iterator p = boost::ends_with(pf, ")>") ? pf.end() : boost::find_first(pf, func + '(').begin(); if(p == pf.end() || (p != pf.begin() && *(p-1) == ':')) { std::reverse_iterator<string::const_iterator> j(p); p = find_toplevel(' ', j, pf.rend()).base(); } return string(p, pf.end()); }
char const * bark(char const * const pretty_function, std::string const func) { char const * p = std::strstr(pretty_function, (func + '(').c_str()); assert(p); if(p != pretty_function && *(p-1) == ':') { std::reverse_iterator<char const *> j(p), e(pretty_function); return find_toplevel(' ', j, e).base(); } else return p; }
I find_toplevel(char const c, I i, I const e) { for(;;) { if(i == e) return e; else if(*i == c) return i; else if(char const cl = closer(*i)) i = find_toplevel(cl, i+1, e)+1; else ++i; } }