bool od_wm_iconified(Ecore_X_Window window) { int size = 0; Atom *atom = NULL; if (ecore_x_window_prop_property_get(window, ecore_x_atom_get("WM_STATE"), ecore_x_atom_get("WM_STATE"), 32, (unsigned char **) &atom, &size)) { bool ret = (*atom == IconicState); free(atom); return ret; } if (ecore_x_window_prop_property_get (window, ecore_x_atom_get("_NET_WM_STATE"), XA_ATOM, 32, (unsigned char **) &atom, &size)) { int i; bool hidden = false, shaded = false; for (i = 0; i < size / sizeof(Atom); i++) { if (atom[i] == ecore_x_atom_get("_NET_WM_STATE_SHADED")) shaded = true; if (atom[i] == ecore_x_atom_get("_NET_WM_STATE_HIDDEN")) hidden = true; } free(atom); return hidden && !shaded; } return false; // anything we've missed ??? }
int window_prop_change_cb(void *data, int type, void *event) { Ecore_X_Event_Window_Property *ev = event; if ((ev->atom == ecore_x_atom_get("_NET_CLIENT_LIST")) || (ev->atom == ecore_x_atom_get("_NET_WM_STATE"))) od_sync_clients(NULL); return 1; // carry on }
EINTERN int e_dnd_init(void) { _type_text_uri_list = eina_stringshare_add("text/uri-list"); _type_xds = eina_stringshare_add("XdndDirectSave0"); _type_text_x_moz_url = eina_stringshare_add("text/x-moz-url"); _type_enlightenment_x_file = eina_stringshare_add("enlightenment/x-file"); #ifndef HAVE_WAYLAND_ONLY if (e_comp_util_has_x()) _text_atom = ecore_x_atom_get("text/plain"); #endif _drop_win_hash = eina_hash_int32_new(NULL); _drop_handlers_responsives = eina_hash_int32_new(NULL); E_LIST_HANDLER_APPEND(_event_handlers, ECORE_EVENT_MOUSE_BUTTON_UP, _e_dnd_cb_mouse_up, NULL); E_LIST_HANDLER_APPEND(_event_handlers, ECORE_EVENT_MOUSE_MOVE, _e_dnd_cb_mouse_move, NULL); E_LIST_HANDLER_APPEND(_event_handlers, ECORE_EVENT_KEY_DOWN, _e_dnd_cb_key_down, NULL); E_LIST_HANDLER_APPEND(_event_handlers, ECORE_EVENT_KEY_UP, _e_dnd_cb_key_up, NULL); if (e_comp->comp_type != E_PIXMAP_TYPE_X) return 1; #ifndef HAVE_WAYLAND_ONLY E_LIST_HANDLER_APPEND(_event_handlers, ECORE_X_EVENT_XDND_ENTER, _e_dnd_cb_event_dnd_enter, NULL); E_LIST_HANDLER_APPEND(_event_handlers, ECORE_X_EVENT_XDND_LEAVE, _e_dnd_cb_event_dnd_leave, NULL); E_LIST_HANDLER_APPEND(_event_handlers, ECORE_X_EVENT_XDND_POSITION, _e_dnd_cb_event_dnd_position, NULL); E_LIST_HANDLER_APPEND(_event_handlers, ECORE_X_EVENT_XDND_FINISHED, _e_dnd_cb_event_dnd_finished, NULL); E_LIST_HANDLER_APPEND(_event_handlers, ECORE_X_EVENT_XDND_DROP, _e_dnd_cb_event_dnd_drop, NULL); E_LIST_HANDLER_APPEND(_event_handlers, ECORE_X_EVENT_SELECTION_NOTIFY, _e_dnd_cb_event_dnd_selection, NULL); E_LIST_HANDLER_APPEND(_event_handlers, ECORE_X_EVENT_WINDOW_HIDE, _e_dnd_cb_event_hide, NULL); e_drop_xdnd_register_set(e_comp->ee_win, 1); _action = ECORE_X_ATOM_XDND_ACTION_PRIVATE; #endif return 1; }
Ecore_X_Window * od_wm_get_clients(int *size) { Ecore_X_Window *win_list = NULL; if (!ecore_x_window_prop_property_get(0, ecore_x_atom_get("_NET_CLIENT_LIST"), XA_WINDOW, 32, (unsigned char **) &win_list, size)) { if (!ecore_x_window_prop_property_get (0, ecore_x_atom_get("_WIN_CLIENT_LIST"), XA_CARDINAL, 32, (unsigned char **) &win_list, size)) { *size = 0; return NULL; } } return win_list; }
/* for HDMI rotation */ void e_illume_util_hdmi_rotation (Ecore_X_Window root, int angle) { Ecore_X_Display *dpy; RROutput output; char hdmi_commands[HDMI_BUF_SIZE]; char buf[5]; int buf_len; int i; char* x_control[] = {"illume2", "rotation", buf, NULL }; if (access(HDMI_DEV_NODE, F_OK) == 0) { if (!_atom_hdmi) _atom_hdmi = ecore_x_atom_get ("X_RR_PROPERTY_REMOTE_CONTROLLER"); if(!_atom_hdmi) { fprintf (stderr, "[ILLUME2] Critical Error!!! Cannot create X_RR_PROPERTY_REMOTE_CONTROLLER Atom...\n"); return; } dpy = ecore_x_display_get(); memset (hdmi_commands, 0, sizeof(hdmi_commands)); memset (buf, 0, sizeof(buf)); output = 0; XRRScreenResources* res = XRRGetScreenResources (dpy, root); if (res && (res->noutput != 0)) { for (i=0; i<res->noutput; i++) { output = res->outputs[i]; } snprintf (buf, sizeof(buf)-1, "%d", angle); buf_len = _e_illume_util_marshalize_string (hdmi_commands, 3, x_control); XRRChangeOutputProperty(dpy, output, _atom_hdmi, XA_CARDINAL, 8, PropModeReplace, (unsigned char *)hdmi_commands, buf_len); } else { printf("[ILLUME2]Error.. Cannot get screen resource.\n"); } } }