Beispiel #1
0
/**
 * 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;
}
Beispiel #2
0
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());
}
Beispiel #3
0
 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;
 }
Beispiel #4
0
 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;
   }
 }