moe work on iccccccccccccccccccm not much

SVN revision: 11973
This commit is contained in:
Carsten Haitzler 2004-10-23 02:19:19 +00:00
parent c7f27cd83b
commit d9bc711567
5 changed files with 131 additions and 25 deletions

View File

@ -534,7 +534,15 @@ _ecore_evas_idle_enter(void *data)
}
}
else
evas_render(ee->evas);
{
Evas_List *updates;
updates = evas_render_updates(ee->evas);
if (updates)
{
evas_render_updates_free(updates);
}
}
}
if (ee->func.fn_post_render) ee->func.fn_post_render(ee);
}

View File

@ -47,6 +47,8 @@ typedef struct _Ecore_X_Rectangle {
#define ECORE_X_DND_VERSION 5
#define ECORE_X_CURRENT_TIME 0
extern Ecore_X_Atom ECORE_X_DND_ACTION_COPY;
extern Ecore_X_Atom ECORE_X_DND_ACTION_MOVE;
extern Ecore_X_Atom ECORE_X_DND_ACTION_LINK;
@ -870,22 +872,32 @@ int ecore_x_client_message8_send(Ecore_X_Window win, Ecore_X_Atom t
void
ecore_x_icccm_state_set(Ecore_X_Window win, Ecore_X_Window_State_Hint state);
void
ecore_x_icccm_delete_window_send(Ecore_X_Window win);
ecore_x_icccm_delete_window_send(Ecore_X_Window win, Ecore_X_Time t);
void
ecore_x_icccm_take_focus_send(Ecore_X_Window win);
ecore_x_icccm_take_focus_send(Ecore_X_Window win, Ecore_X_Time t);
void
ecore_x_icccm_save_yourself_send(Ecore_X_Window win);
ecore_x_icccm_save_yourself_send(Ecore_X_Window win, Ecore_X_Time t);
void
ecore_x_icccm_move_resize_send(Ecore_X_Window win,
int x, int y, int w, int h);
void
ecore_x_icccm_hints_set(Ecore_X_Window win,
int accepts_focus,
Ecore_X_Window_State_Hint initial_state,
Ecore_X_Pixmap icon_pixmap,
Ecore_X_Pixmap icon_mask,
Ecore_X_Window icon_window,
Ecore_X_Window window_group,
int is_urgent);
int
ecore_x_icccm_basic_hints_get(Ecore_X_Window win,
int *accepts_focus,
Ecore_X_Window_State_Hint *initial_state,
Ecore_X_Pixmap *icon_pixmap,
Ecore_X_Pixmap *icon_mask,
Ecore_X_Window *icon_window,
Ecore_X_Window *window_group);
ecore_x_icccm_hints_get(Ecore_X_Window win,
int *accepts_focus,
Ecore_X_Window_State_Hint *initial_state,
Ecore_X_Pixmap *icon_pixmap,
Ecore_X_Pixmap *icon_mask,
Ecore_X_Window *icon_window,
Ecore_X_Window *window_group,
int *is_urgent);
/* FIXME: these funcs need categorising */

View File

@ -38,6 +38,12 @@ Atom _ecore_x_atom_wm_command = 0;
Atom _ecore_x_atom_wm_icon_name = 0;
Atom _ecore_x_atom_wm_client_machine = 0;
Atom _ecore_x_atom_wm_change_state = 0;
Atom _ecore_x_atom_wm_colormap_windows = 0;
Atom _ecore_x_atom_wm_window_role = 0;
Atom _ecore_x_atom_wm_hints = 0;
Atom _ecore_x_atom_wm_client_leader = 0;
Atom _ecore_x_atom_wm_transient_for = 0;
Atom _ecore_x_atom_wm_save_yourself = 0;
Atom _ecore_x_atom_motif_wm_hints = 0;
@ -376,6 +382,12 @@ ecore_x_init(const char *name)
_ecore_x_atom_wm_icon_name = XInternAtom(_ecore_x_disp, "WM_ICON_NAME", False);
_ecore_x_atom_wm_client_machine = XInternAtom(_ecore_x_disp, "WM_CLIENT_MACHINE", False);
_ecore_x_atom_wm_change_state = XInternAtom(_ecore_x_disp, "WM_CHANGE_STATE", False);
_ecore_x_atom_wm_colormap_windows = XInternAtom(_ecore_x_disp, "WM_COLORMAP_WINDOWS", False);
_ecore_x_atom_wm_window_role = XInternAtom(_ecore_x_disp, "WM_WINDOW_ROLE", False);
_ecore_x_atom_wm_hints = XInternAtom(_ecore_x_disp, "WM_HINTS", False);
_ecore_x_atom_wm_client_leader = XInternAtom(_ecore_x_disp, "WM_CLIENT_LEADER", False);
_ecore_x_atom_wm_transient_for = XInternAtom(_ecore_x_disp, "WM_TRANSIENT_FOR", False);
_ecore_x_atom_wm_save_yourself = XInternAtom(_ecore_x_disp, "WM_SAVE_YOURSELF", False);
_ecore_x_atom_motif_wm_hints = XInternAtom(_ecore_x_disp, "_MOTIF_WM_HINTS", False);

View File

@ -1,6 +1,8 @@
/*
* Various ICCCM related functions.
* These are normally called only by window managers.
*
* This is ALL the code involving anything ICCCM related. for both WM and
* client.
*/
#include "Ecore.h"
#include "ecore_x_private.h"
@ -24,7 +26,7 @@ ecore_x_icccm_state_set(Ecore_X_Window win, Ecore_X_Window_State_Hint state)
}
void
ecore_x_icccm_delete_window_send(Ecore_X_Window win)
ecore_x_icccm_delete_window_send(Ecore_X_Window win, Ecore_X_Time t)
{
ecore_x_client_message32_send(win, _ecore_x_atom_wm_protocols,
_ecore_x_atom_wm_delete_window,
@ -32,22 +34,20 @@ ecore_x_icccm_delete_window_send(Ecore_X_Window win)
}
void
ecore_x_icccm_take_focus_send(Ecore_X_Window win)
ecore_x_icccm_take_focus_send(Ecore_X_Window win, Ecore_X_Time t)
{
ecore_x_client_message32_send(win, _ecore_x_atom_wm_protocols,
_ecore_x_atom_wm_take_focus,
CurrentTime, 0, 0, 0);
}
#if 0
void
ecore_x_icccm_save_yourself_send(Ecore_X_Window win)
ecore_x_icccm_save_yourself_send(Ecore_X_Window win, Ecore_X_Time t)
{
ecore_x_client_message32_send(win, _ecore_x_atom_wm_protocols,
_ecore_x_atom_wm_save_yourself,
CurrentTime, 0, 0, 0);
}
#endif
void
ecore_x_icccm_move_resize_send(Ecore_X_Window win,
@ -69,17 +69,74 @@ ecore_x_icccm_move_resize_send(Ecore_X_Window win,
XSendEvent(_ecore_x_disp, win, False, StructureNotifyMask, &ev);
}
void
ecore_x_icccm_hints_set(Ecore_X_Window win,
int accepts_focus,
Ecore_X_Window_State_Hint initial_state,
Ecore_X_Pixmap icon_pixmap,
Ecore_X_Pixmap icon_mask,
Ecore_X_Window icon_window,
Ecore_X_Window window_group,
int is_urgent)
{
XWMHints *hints;
hints = XAllocWMHints();
if (!hints) return;
hints->flags = InputHint | StateHint;
hints->input = accepts_focus;
if (initial_state == ECORE_X_WINDOW_STATE_HINT_WITHDRAWN)
hints->initial_state = WithdrawnState;
else if (initial_state == ECORE_X_WINDOW_STATE_HINT_NORMAL)
hints->initial_state = NormalState;
else if (initial_state == ECORE_X_WINDOW_STATE_HINT_ICONIC)
hints->initial_state = IconicState;
if (icon_pixmap != 0)
{
hints->icon_pixmap = icon_pixmap;
hints->flags |= IconPixmapHint;
}
if (icon_mask != 0)
{
hints->icon_mask = icon_mask;
hints->flags |= IconMaskHint;
}
if (icon_window != 0)
{
hints->icon_window = icon_window;
hints->flags |= IconWindowHint;
}
if (window_group != 0)
{
hints->window_group = window_group;
hints->flags |= WindowGroupHint;
}
if (is_urgent)
hints->flags |= XUrgencyHint;
XSetWMHints(_ecore_x_disp, win, hints);
XFree(hints);
}
int
ecore_x_icccm_basic_hints_get(Ecore_X_Window win,
int *accepts_focus,
Ecore_X_Window_State_Hint *initial_state,
Ecore_X_Pixmap *icon_pixmap,
Ecore_X_Pixmap *icon_mask,
Ecore_X_Window *icon_window,
Ecore_X_Window *window_group)
ecore_x_icccm_hints_get(Ecore_X_Window win,
int *accepts_focus,
Ecore_X_Window_State_Hint *initial_state,
Ecore_X_Pixmap *icon_pixmap,
Ecore_X_Pixmap *icon_mask,
Ecore_X_Window *icon_window,
Ecore_X_Window *window_group,
int *is_urgent)
{
XWMHints *hints;
if (accepts_focus) *accepts_focus = 0;
if (initial_state) *initial_state = ECORE_X_WINDOW_STATE_HINT_NORMAL;
if (icon_pixmap) *icon_pixmap = 0;
if (icon_mask) *icon_mask = 0;
if (icon_window) *icon_window = 0;
if (window_group) *window_group = 0;
if (is_urgent) *is_urgent = 0;
hints = XGetWMHints(_ecore_x_disp, win);
if (hints)
{
@ -115,6 +172,10 @@ ecore_x_icccm_basic_hints_get(Ecore_X_Window win,
{
*window_group = hints->window_group;
}
if ((hints->flags & XUrgencyHint) && (is_urgent))
{
*is_urgent = 1;
}
XFree(hints);
return 1;
}
@ -198,11 +259,18 @@ ecore_x_icccm_size_pos_hints_get(Ecore_X_Window win)
}
/* FIXME: move these things in here as they are icccm related */
/* get/set min.max etc. size */
/* get/set title */
/* get/set name/class */
/* get/set machine */
/* get/set command */
/* get/set icon name */
/* get/set wm protocols */
/* get/set colormap windows */
/* get/set window role */
/* get/set client leader */
/* get/set transient for */
/* send iconify request */
/* FIXME: there are older E hints, gnome hitns and mwm hints and new netwm */
/* hints. each should go in their own file/section so we know which */

View File

@ -130,6 +130,12 @@ extern Atom _ecore_x_atom_wm_command;
extern Atom _ecore_x_atom_wm_icon_name;
extern Atom _ecore_x_atom_wm_client_machine;
extern Atom _ecore_x_atom_wm_change_state;
extern Atom _ecore_x_atom_wm_colormap_windows;
extern Atom _ecore_x_atom_wm_window_role;
extern Atom _ecore_x_atom_wm_hints;
extern Atom _ecore_x_atom_wm_client_leader;
extern Atom _ecore_x_atom_wm_transient_for;
extern Atom _ecore_x_atom_wm_save_yourself;
extern Atom _ecore_x_atom_motif_wm_hints;