Esempio n. 1
0
void
subHookCall(int type,
  void *data)
{
  int i;

  /* Call matching hooks */
  for(i = 0; i < subtle->hooks->ndata; i++)
    {
      SubHook *h = HOOK(subtle->hooks->data[i]);

      if((h->flags & ~SUB_TYPE_HOOK) == type)
        {
          subRubyCall(SUB_CALL_HOOKS, h->proc, data);

          subSubtleLogDebug("call=hook, type=%d, proc=%ld, data=%p\n",
            type, h->proc, data);
        }
    }
} /* }}} */
Esempio n. 2
0
long
subEwmhGetXEmbedState(Window win)
{
  long flags = 0;
  XEmbedInfo *info = NULL;

  /* Get xembed data */
  if((info = (XEmbedInfo *)subSharedPropertyGet(subtle->dpy, win,
      subEwmhGet(SUB_EWMH_XEMBED_INFO), subEwmhGet(SUB_EWMH_XEMBED_INFO),
      NULL)))
    {
      flags = (long)info->flags;

      subSubtleLogDebug("XEmbedInfo: win=%#lx, version=%ld, flags=%ld, mapped=%ld\n",
        win, info->version, info->flags, info->flags & XEMBED_MAPPED);

      XFree(info);
    }

  return flags;
} /* }}} */
Esempio n. 3
0
void
subEwmhInit(void)
{
  int len = 0;
  long data[2] = { 0, 0 }, pid = (long)getpid();
  char *selection = NULL, *names[] =
  {
    /* ICCCM */
    "WM_NAME", "WM_CLASS", "WM_STATE", "WM_PROTOCOLS", "WM_TAKE_FOCUS",
    "WM_DELETE_WINDOW", "WM_NORMAL_HINTS", "WM_SIZE_HINTS", "WM_HINTS",
    "WM_WINDOW_ROLE", "WM_CLIENT_LEADER",

    /* EWMH */
    "_NET_SUPPORTED", "_NET_CLIENT_LIST", "_NET_CLIENT_LIST_STACKING",
    "_NET_NUMBER_OF_DESKTOPS", "_NET_DESKTOP_NAMES", "_NET_DESKTOP_GEOMETRY",
    "_NET_DESKTOP_VIEWPORT", "_NET_CURRENT_DESKTOP", "_NET_ACTIVE_WINDOW",
    "_NET_WORKAREA", "_NET_SUPPORTING_WM_CHECK", "_NET_WM_FULL_PLACEMENT",
    "_NET_FRAME_EXTENTS",

    /* Client */
    "_NET_CLOSE_WINDOW", "_NET_RESTACK_WINDOW", "_NET_MOVERESIZE_WINDOW",
    "_NET_WM_NAME", "_NET_WM_PID", "_NET_WM_DESKTOP", "_NET_WM_STRUT",

    /* Types */
    "_NET_WM_WINDOW_TYPE", "_NET_WM_WINDOW_TYPE_DOCK",
    "_NET_WM_WINDOW_TYPE_DESKTOP", "_NET_WM_WINDOW_TYPE_TOOLBAR",
    "_NET_WM_WINDOW_TYPE_SPLASH", "_NET_WM_WINDOW_TYPE_DIALOG",

    /* States */
    "_NET_WM_STATE", "_NET_WM_STATE_FULLSCREEN", "_NET_WM_STATE_ABOVE",
    "_NET_WM_STATE_STICKY", "_NET_WM_STATE_DEMANDS_ATTENTION",

    /* Tray */
    "_NET_SYSTEM_TRAY_OPCODE", "_NET_SYSTEM_TRAY_MESSAGE_DATA",
    "_NET_SYSTEM_TRAY_S",

    /* Misc */
    "UTF8_STRING", "MANAGER", "_MOTIF_WM_HINTS",

    /* XEmbed */
    "_XEMBED", "_XEMBED_INFO",

    /* subtle */
    "SUBTLE_CLIENT_TAGS", "SUBTLE_CLIENT_RETAG",
    "SUBTLE_CLIENT_GRAVITY", "SUBTLE_CLIENT_SCREEN", "SUBTLE_CLIENT_FLAGS",
    "SUBTLE_GRAVITY_NEW", "SUBTLE_GRAVITY_FLAGS", "SUBTLE_GRAVITY_LIST",
    "SUBTLE_GRAVITY_KILL",
    "SUBTLE_TAG_NEW", "SUBTLE_TAG_LIST", "SUBTLE_TAG_KILL", "SUBTLE_TRAY_LIST",
    "SUBTLE_VIEW_NEW", "SUBTLE_VIEW_TAGS", "SUBTLE_VIEW_STYLE",
    "SUBTLE_VIEW_ICONS", "SUBTLE_VIEW_KILL",
    "SUBTLE_SUBLET_UPDATE", "SUBTLE_SUBLET_DATA", "SUBTLE_SUBLET_STYLE",
    "SUBTLE_SUBLET_FLAGS", "SUBTLE_SUBLET_LIST", "SUBTLE_SUBLET_KILL",
    "SUBTLE_SCREEN_PANELS", "SUBTLE_SCREEN_VIEWS", "SUBTLE_SCREEN_JUMP",
    "SUBTLE_VISIBLE_TAGS", "SUBTLE_VISIBLE_VIEWS",
    "SUBTLE_RENDER", "SUBTLE_RELOAD", "SUBTLE_RESTART", "SUBTLE_QUIT",
    "SUBTLE_COLORS", "SUBTLE_FONT", "SUBTLE_DATA", "SUBTLE_VERSION"
  };

  assert(SUB_EWMH_TOTAL == LENGTH(names));

  /* Update tray selection name for current screen */
  len       = strlen(names[SUB_EWMH_NET_SYSTEM_TRAY_SELECTION]) + 5; ///< For high screen counts
  selection = (char *)subSharedMemoryAlloc(len, sizeof(char));

  snprintf(selection, len, "%s%u", names[SUB_EWMH_NET_SYSTEM_TRAY_SELECTION], SCRN);
  subSubtleLogDebug("Selection: len=%d, name=%s\n", len, selection);
  names[SUB_EWMH_NET_SYSTEM_TRAY_SELECTION] = selection;

  /* Register atoms */
  XInternAtoms(subtle->dpy, names, SUB_EWMH_TOTAL, 0, atoms);
  subtle->flags |= SUB_SUBTLE_EWMH; ///< Set EWMH flag

  free(selection);

  /* EWMH: Supported hints */
  XChangeProperty(subtle->dpy, ROOT, atoms[SUB_EWMH_NET_SUPPORTED], XA_ATOM,
    32, PropModeReplace, (unsigned char *)&atoms, SUB_EWMH_TOTAL);

  /* EWMH: Window manager information */
  subEwmhSetWindows(ROOT, SUB_EWMH_NET_SUPPORTING_WM_CHECK,
    &subtle->windows.support, 1);
  subEwmhSetString(subtle->windows.support, SUB_EWMH_NET_WM_NAME, PKG_NAME);
  subEwmhSetString(subtle->windows.support, SUB_EWMH_WM_CLASS, PKG_NAME);
  subEwmhSetCardinals(subtle->windows.support, SUB_EWMH_NET_WM_PID, &pid, 1);
  subEwmhSetString(subtle->windows.support,
    SUB_EWMH_SUBTLE_VERSION, PKG_VERSION);

  /* EWMH: Desktop geometry */
  data[0] = subtle->width;
  data[1] = subtle->height;
  subEwmhSetCardinals(ROOT, SUB_EWMH_NET_DESKTOP_GEOMETRY, (long *)&data, 2);

  /* EWMH: Client list and client list stacking */
  subEwmhSetWindows(ROOT, SUB_EWMH_NET_CLIENT_LIST, NULL, 0);
  subEwmhSetWindows(ROOT, SUB_EWMH_NET_CLIENT_LIST_STACKING, NULL, 0);

  subSubtleLogDebugSubtle("Init\n");
} /* }}} */