nosquash: huge wl fixup (wayland clients actually working again)

* try to clear up build system for separating out ecore-x

* add #ifdefs for lots of ecore-x stuff

* break out some internal e wl functions for reuse in api

* store wl surface buffers as an inlist

* add protocol-specific client compositor data

** move lots of X client attributes here

* add pixmap type checks to a number of X-specific things, such as grabinput, to block them for non-X clients

* rearrange startup order to work with wayland

* move X screensaver code to e_comp_x

* flag modules still requiring X with -DNEED_X
This commit is contained in:
Mike Blumenkrantz 2013-09-11 14:23:43 +01:00
parent 8c97314cd2
commit f714dbf7e4
49 changed files with 707 additions and 632 deletions

View File

@ -210,7 +210,6 @@ endif
enlightenment_src = \
src/bin/e_about.c \
src/bin/e_acpi.c \
src/bin/e_alert.c \
src/bin/e_actions.c \
src/bin/e_atoms.c \
src/bin/e_backlight.c \
@ -226,7 +225,6 @@ src/bin/e_comp.c \
src/bin/e_comp_canvas.c \
src/bin/e_comp_cfdata.c \
src/bin/e_comp_object.c \
src/bin/e_comp_x.c \
src/bin/e_config.c \
src/bin/e_config_data.c \
src/bin/e_config_dialog.c \
@ -307,7 +305,6 @@ src/bin/e_place.c \
src/bin/e_pointer.c \
src/bin/e_powersave.c \
src/bin/e_prefix.c \
src/bin/e_randr.c \
src/bin/e_remember.c \
src/bin/e_resist.c \
src/bin/e_scale.c \
@ -362,25 +359,31 @@ src/bin/e_widget_toolbar.c \
src/bin/e_widget_toolbook.c \
src/bin/e_win.c \
src/bin/e_xinerama.c \
src/bin/e_xkb.c \
src/bin/e_xsettings.c \
src/bin/e_zoomap.c \
src/bin/e_zone.c \
$(ENLIGHTENMENTHEADERS)
if ! HAVE_WAYLAND_ONLY
enlightenment_src += \
src/bin/e_alert.c \
src/bin/e_comp_x.c \
src/bin/e_randr.c \
src/bin/e_xkb.c \
src/bin/e_xsettings.c
endif
if HAVE_WAYLAND_CLIENTS
enlightenment_src += \
src/bin/e_comp_wl.c
endif
src_bin_enlightenment_CFLAGS = $(AM_CPPFLAGS) @WAYLAND_CFLAGS@ @WAYLAND_EGL_CFLAGS@
src_bin_enlightenment_CPPFLAGS = $(E_CPPFLAGS) -DE_LOGGING=1
src_bin_enlightenment_CPPFLAGS = $(E_CPPFLAGS) -DE_LOGGING=1 @WAYLAND_CFLAGS@ @WAYLAND_EGL_CFLAGS@ @ECORE_X_CFLAGS@ -DNEED_X=1
src_bin_enlightenment_SOURCES = \
src/bin/e_main.c \
$(enlightenment_src)
src_bin_enlightenment_LDFLAGS = -export-dynamic
src_bin_enlightenment_LDADD = @e_libs@ @dlopen_libs@ @cf_libs@ @VALGRIND_LIBS@ @WAYLAND_LIBS@ @WAYLAND_EGL_LIBS@ -lm
src_bin_enlightenment_LDADD = @e_libs@ @dlopen_libs@ @cf_libs@ @VALGRIND_LIBS@ @WAYLAND_LIBS@ @WAYLAND_EGL_LIBS@ -lm @ECORE_X_LIBS@
src_bin_enlightenment_imc_SOURCES = \
src/bin/e.h \

View File

@ -105,7 +105,6 @@ void *alloca (size_t);
# include <Evas_Engine_Buffer.h>
# include <Ecore.h>
# include <Ecore_Getopt.h>
# include <Ecore_X.h>
# include <Ecore_Evas.h>
# include <Ecore_Input.h>
# include <Ecore_Input_Evas.h>
@ -311,8 +310,6 @@ extern EAPI Eina_Bool x_fatal;
extern EINTERN const char *e_first_frame;
extern EINTERN double e_first_frame_start_time;
EAPI void e_alert_composite_win(Ecore_X_Window root, Ecore_X_Window win);
//#define SMARTERR(args...) abort()
#define SMARTERRNR() return
#define SMARTERR(x) return x

View File

@ -1854,8 +1854,7 @@ ACT_FN_GO(menu_show, )
ecore_evas_pointer_xy_get(zone->comp->ee, &x, &y);
e_menu_post_deactivate_callback_set(m, _e_actions_cb_menu_end, NULL);
e_menu_activate_mouse(m, zone, x, y, 1, 1,
E_MENU_POP_DIRECTION_DOWN,
ecore_x_current_time_get());
E_MENU_POP_DIRECTION_DOWN, 0);
}
}
}

View File

@ -143,19 +143,44 @@ e_canvas_rehint(void)
}
EAPI Ecore_Evas *
e_canvas_new(Ecore_X_Window win, int x, int y, int w, int h,
int direct_resize, int override, Ecore_X_Window *win_ret)
e_canvas_new(Ecore_Window win, int x, int y, int w, int h,
int direct_resize, int override, Ecore_Window *win_ret)
{
Ecore_Evas *ee = NULL;
ee = ecore_evas_software_x11_new(NULL, win, x, y, w, h);
#ifdef WAYLAND_ONLY
ee = ecore_evas_wayland_shm_new(NULL, win, x, y, w, h, 0);
if (ee)
{
ecore_evas_override_set(ee, override);
if (direct_resize) ecore_evas_software_x11_direct_resize_set(ee, 1);
if (win_ret) *win_ret = ecore_evas_software_x11_window_get(ee);
if (win_ret) *win_ret = ecore_evas_wayland_window_get(ee);
}
else
#else
switch (e_comp_get(NULL)->comp_type)
{
case E_PIXMAP_TYPE_X:
ee = ecore_evas_software_x11_new(NULL, win, x, y, w, h);
if (ee)
{
ecore_evas_override_set(ee, override);
if (direct_resize) ecore_evas_software_x11_direct_resize_set(ee, 1);
if (win_ret) *win_ret = ecore_evas_software_x11_window_get(ee);
}
break;
# ifdef HAVE_WAYLAND_CLIENTS
case E_PIXMAP_TYPE_WL:
ee = ecore_evas_wayland_shm_new(NULL, win, x, y, w, h, 0);
if (ee)
{
ecore_evas_override_set(ee, override);
if (win_ret) *win_ret = (Ecore_Window)ecore_evas_wayland_window_get(ee);
}
break;
# endif
default: break;
}
#endif
if (!ee)
EINA_LOG_ERR("Impossible to build any Ecore_Evas window !!");
return ee;
}

View File

@ -10,7 +10,7 @@ EAPI void e_canvas_cache_flush(void);
EAPI void e_canvas_cache_reload(void);
EAPI void e_canvas_idle_flush(void);
EAPI void e_canvas_rehint(void);
EAPI Ecore_Evas *e_canvas_new(Ecore_X_Window win, int x, int y, int w, int h, int direct_resize, int override, Ecore_X_Window *win_ret);
EAPI Ecore_Evas *e_canvas_new(Ecore_Window win, int x, int y, int w, int h, int direct_resize, int override, Ecore_Window *win_ret);
EAPI const Eina_List *e_canvas_list(void);
#endif

View File

@ -244,7 +244,7 @@ struct E_Client
E_Direction shade_dir;
E_Comp_Client_Data *comp_data; //private for the compositor engine (X, Wayland) ONLY
E_Comp_Client_Data *comp_data; //private for the compositor engine (X, Wayland) ONLY
Evas_Object *input_object; //for running wayland clients in X
@ -322,15 +322,17 @@ struct E_Client
int step_w, step_h;
int start_x, start_y;
double min_aspect, max_aspect;
Ecore_Window icon_window;
Ecore_Window window_group;
Ecore_Window transient_for;
Ecore_Window client_leader;
#ifdef E_COMP_X_H
Ecore_X_Window_State_Hint initial_state;
Ecore_X_Window_State_Hint state;
Ecore_X_Pixmap icon_pixmap;
Ecore_X_Pixmap icon_mask;
Ecore_X_Window icon_window;
Ecore_X_Window window_group;
Ecore_X_Window transient_for;
Ecore_X_Window client_leader;
Ecore_X_Gravity gravity;
#endif
Eina_Stringshare *window_role;
unsigned char take_focus : 1;
unsigned char accepts_focus : 1;
@ -362,9 +364,11 @@ struct E_Client
/* MWM */
struct
{
#ifdef E_COMP_X_H
Ecore_X_MWM_Hint_Func func;
Ecore_X_MWM_Hint_Decor decor;
Ecore_X_MWM_Hint_Input input;
#endif
unsigned char exists : 1;
unsigned char borderless : 1;
struct
@ -380,7 +384,9 @@ struct E_Client
unsigned int desktop;
Eina_Stringshare *name;
Eina_Stringshare *icon_name;
#ifdef E_COMP_X_H
Ecore_X_Icon *icons;
#endif
int num_icons;
unsigned int user_time;
unsigned char opacity;
@ -404,9 +410,8 @@ struct E_Client
struct
{
unsigned char request : 1;
unsigned char alarm : 1;
unsigned int wait;
Ecore_X_Sync_Alarm alarm;
Ecore_X_Sync_Counter counter;
unsigned int serial;
double send_time;
} sync;
@ -440,7 +445,6 @@ struct E_Client
unsigned char change_desktop : 1;
unsigned char close : 1;
} action;
E_Window_Type type;
E_Window_Type *extra_types;
int extra_types_num;
@ -525,63 +529,13 @@ struct E_Client
unsigned char state : 1;
unsigned char vkbd : 1;
} fetch;
#ifdef E_COMP_X_H
Ecore_X_Virtual_Keyboard_State state;
#endif
unsigned char have_property : 1;
unsigned char vkbd : 1;
} vkbd;
struct
{
struct
{
struct
{
unsigned char conformant : 1;
} fetch;
unsigned char conformant : 1;
} conformant;
struct
{
struct
{
unsigned char state : 1;
struct
{
unsigned int major : 1;
unsigned int minor : 1;
} priority;
unsigned char quickpanel : 1;
unsigned char zone : 1;
} fetch;
Ecore_X_Illume_Quickpanel_State state;
struct
{
unsigned int major : 1;
unsigned int minor : 1;
} priority;
unsigned char quickpanel : 1;
int zone;
} quickpanel;
struct
{
struct
{
unsigned char drag : 1;
unsigned char locked : 1;
} fetch;
unsigned char drag : 1;
unsigned char locked : 1;
} drag;
struct
{
struct
{
unsigned char state : 1;
} fetch;
Ecore_X_Illume_Window_State state;
} win_state;
} illume;
struct
{
unsigned char visible : 1;

View File

@ -3,8 +3,6 @@
#include "e_comp_wl.h"
#endif
#include "e_comp_x.h"
#define ACTION_TIMEOUT 30.0
#define OVER_FLOW 1
//#define SHAPE_DEBUG
@ -1366,6 +1364,7 @@ e_comp_shape_queue(E_Comp *c)
{
EINA_SAFETY_ON_NULL_RETURN(c);
if (c->comp_type != E_PIXMAP_TYPE_X) return;
if (!c->shape_job)
c->shape_job = ecore_job_add((Ecore_Cb)_e_comp_shapes_update_job, c);
}

View File

@ -1,7 +1,7 @@
#ifdef E_TYPEDEFS
typedef struct _E_Comp E_Comp;
typedef struct _E_Comp_Data E_Comp_Data;
typedef struct E_Comp_Client_Data E_Comp_Client_Data;
typedef struct _E_Comp_Client_Data E_Comp_Client_Data;
typedef struct _E_Comp_Demo_Style_Item E_Comp_Demo_Style_Item;
#define E_COMP_TYPE (int) 0xE0b01003
@ -55,6 +55,7 @@ struct _E_Comp
unsigned int new_clients;
E_Comp_Data *comp_data;
E_Pixmap_Type comp_type; //for determining X/Wayland/
unsigned int num;
Eina_Stringshare *name;

View File

@ -17,8 +17,6 @@ e_comp_cfdata_edd_init(E_Config_DD **conf_edd, E_Config_DD **match_edd)
E_CONFIG_VAL(D, T, borderless, CHAR);
E_CONFIG_VAL(D, T, dialog, CHAR);
E_CONFIG_VAL(D, T, accepts_focus, CHAR);
E_CONFIG_VAL(D, T, vkbd, CHAR);
E_CONFIG_VAL(D, T, quickpanel, CHAR);
E_CONFIG_VAL(D, T, argb, CHAR);
E_CONFIG_VAL(D, T, fullscreen, CHAR);
E_CONFIG_VAL(D, T, modal, CHAR);

View File

@ -67,7 +67,6 @@ struct _E_Comp_Match
char dialog; // used for borders, 0 == don't use, 1 == dialog, -1 == not dialog
char accepts_focus; // used for borders, 0 == don't use, 1 == accepts focus, -1 == does not accept focus
char vkbd; // used for borders, 0 == don't use, 1 == is vkbd, -1 == not vkbd
char quickpanel; // used for borders, 0 == don't use, 1 == is quickpanel, -1 == not quickpanel
char argb; // used for borders, overrides, popups, menus, 0 == don't use, 1 == is argb, -1 == not argb
char fullscreen; // used for borders, 0 == don't use, 1 == is fullscreen, -1 == not fullscreen
char modal; // used for borders, 0 == don't use, 1 == is modal, -1 == not modal

View File

@ -2,6 +2,8 @@
#include "e_comp_wl.h"
#include <sys/mman.h>
#define e_pixmap_parent_window_set(X, Y) e_pixmap_parent_window_set(X, (Ecore_Window)(uintptr_t)Y)
/* compositor function prototypes */
static void _seat_send_updated_caps(struct wl_seat *seat);
static void _move_resources(struct wl_list *dest, struct wl_list *src);
@ -58,7 +60,6 @@ static void _e_comp_wl_cb_bind(struct wl_client *client, void *data, unsigned in
static Eina_Bool _e_comp_wl_cb_read(void *data EINA_UNUSED, Ecore_Fd_Handler *hdl EINA_UNUSED);
static Eina_Bool _e_comp_wl_cb_idle(void *data EINA_UNUSED);
static Eina_Bool _e_comp_wl_cb_module_idle(void *data EINA_UNUSED);
static Eina_Bool _e_comp_wl_cb_keymap_changed(void *data EINA_UNUSED, int type EINA_UNUSED, void *event EINA_UNUSED);
/* compositor interface prototypes */
static void _e_comp_wl_cb_surface_create(struct wl_client *client, struct wl_resource *resource, unsigned int id);
@ -228,7 +229,7 @@ static Ecore_Idler *_module_idler = NULL;
EAPI E_Wayland_Compositor *_e_wl_comp;
/* external functions */
EINTERN Eina_Bool
EAPI Eina_Bool
e_comp_wl_init(void)
{
int fd = 0;
@ -271,7 +272,7 @@ e_comp_wl_init(void)
* NB: This is interesting....if we try to eglGetDisplay and pass in the
* wayland display, then EGL fails due to XCB not owning the event queue.
* If we pass it a NULL, it inits just fine */
_e_wl_comp->egl.display = eglGetDisplay((EGLNativeDisplayType)ecore_x_display_get());
_e_wl_comp->egl.display = eglGetDisplay(NULL);
if (_e_wl_comp->egl.display == EGL_NO_DISPLAY)
ERR("Could not get EGL display: %m");
else
@ -302,44 +303,6 @@ e_comp_wl_init(void)
ERR("Could not choose EGL config: %m");
eglTerminate(_e_wl_comp->egl.display);
}
/* if (!eglBindAPI(EGL_OPENGL_ES_API)) */
/* { */
/* ERR("Could not bind EGL API: %m"); */
/* eglTerminate(_e_wl_comp->egl.display); */
/* } */
/* exts = (const char *)eglQueryString(_e_wl_comp->egl.display, EGL_EXTENSIONS); */
/* if (!exts) */
/* { */
/* ERR("Could not get EGL Extensions: %m"); */
/* eglTerminate(_e_wl_comp->egl.display); */
/* } */
/* else */
/* { */
/* if (strstr(exts, "EGL_WL_bind_wayland_display")) */
/* { */
/* _e_wl_comp->egl.bind_display = */
/* (void *)eglGetProcAddress("eglBindWaylandDisplayWL"); */
/* _e_wl_comp->egl.unbind_display = */
/* (void *)eglGetProcAddress("eglUnbindWaylandDisplayWL"); */
/* } */
/* } */
/* if (_e_wl_comp->egl.bind_display) */
/* { */
/* EGLBoolean ret; */
/* ret = _e_wl_comp->egl.bind_display(_e_wl_comp->egl.display, */
/* _e_wl_comp->wl.display); */
/* if (!ret) */
/* { */
/* ERR("Could not bind EGL Wayland Display: %m"); */
/* _e_wl_comp->egl.bound = EINA_FALSE; */
/* } */
/* else */
/* _e_wl_comp->egl.bound = EINA_TRUE; */
/* } */
}
}
#endif
@ -351,11 +314,12 @@ e_comp_wl_init(void)
goto err;
}
#ifndef WAYLAND_ONLY
/* setup keymap_change event handler */
_e_wl_comp->kbd_handler =
ecore_event_handler_add(ECORE_X_EVENT_XKB_STATE_NOTIFY,
_e_comp_wl_cb_keymap_changed, NULL);
e_comp_wl_cb_keymap_changed, NULL);
#endif
/* get the displays event loop */
_e_wl_comp->wl.loop = wl_display_get_event_loop(_e_wl_comp->wl.display);
@ -379,9 +343,11 @@ e_comp_wl_init(void)
goto err;
}
wl_event_loop_dispatch(_e_wl_comp->wl.loop, 0);
#ifndef WAYLAND_ONLY
/* add an idler for deferred shell module loading */
_module_idler = ecore_idler_add(_e_comp_wl_cb_module_idle, NULL);
#endif
/* return success */
return EINA_TRUE;
@ -389,9 +355,10 @@ err:
/* remove kbd handler */
if (_e_wl_comp->kbd_handler)
ecore_event_handler_del(_e_wl_comp->kbd_handler);
#ifndef WAYLAND_ONLY
/* remove the module idler */
if (_module_idler) ecore_idler_del(_module_idler);
#endif
#ifdef HAVE_WAYLAND_EGL
/* unbind wayland display */
@ -456,6 +423,17 @@ e_comp_wl_shutdown(void)
e_module_disable(mod);
}
#ifdef WAYLAND_ONLY
EAPI int
e_comp_wl_input_read(int fd EINA_UNUSED, unsigned int mask EINA_UNUSED, void *data)
{
E_Wayland_Compositor *wl_comp = data;
wl_event_loop_dispatch(wl_comp->wl.input_loop, 0);
return 1;
}
#endif
EAPI void
wl_seat_init(struct wl_seat *seat)
{
@ -845,6 +823,44 @@ e_comp_wl_time_get(void)
return (tm.tv_sec * 1000 + tm.tv_usec / 1000);
}
EAPI void
e_comp_wl_mouse_button(struct wl_resource *resource, uint32_t serial, uint32_t timestamp, uint32_t button, uint32_t state_w)
{
switch (button)
{
case BTN_LEFT:
case BTN_MIDDLE:
case BTN_RIGHT:
wl_pointer_send_button(resource, serial, timestamp,
button, state_w);
break;
case 4:
if (state_w)
wl_pointer_send_axis(resource, timestamp,
WL_POINTER_AXIS_VERTICAL_SCROLL,
-wl_fixed_from_int(1));
break;
case 5:
if (state_w)
wl_pointer_send_axis(resource, timestamp,
WL_POINTER_AXIS_VERTICAL_SCROLL,
wl_fixed_from_int(1));
break;
case 6:
if (state_w)
wl_pointer_send_axis(resource, timestamp,
WL_POINTER_AXIS_HORIZONTAL_SCROLL,
-wl_fixed_from_int(1));
break;
case 7:
if (state_w)
wl_pointer_send_axis(resource, timestamp,
WL_POINTER_AXIS_HORIZONTAL_SCROLL,
wl_fixed_from_int(1));
break;
}
}
EAPI void
e_comp_wl_input_modifiers_update(unsigned int serial)
{
@ -976,47 +992,8 @@ _default_grab_button(struct wl_pointer_grab *grab, uint32_t timestamp, uint32_t
serial = wl_display_next_serial(_e_wl_comp->wl.display);
wl_resource_for_each(res, lst)
{
switch (button)
{
case BTN_LEFT:
case BTN_MIDDLE:
case BTN_RIGHT:
wl_pointer_send_button(res, serial, timestamp,
button, state_w);
break;
case 4:
if (state_w)
wl_pointer_send_axis(res, timestamp,
WL_POINTER_AXIS_VERTICAL_SCROLL,
-wl_fixed_from_int(1));
break;
case 5:
if (state_w)
wl_pointer_send_axis(res, timestamp,
WL_POINTER_AXIS_VERTICAL_SCROLL,
wl_fixed_from_int(1));
break;
case 6:
if (state_w)
wl_pointer_send_axis(res, timestamp,
WL_POINTER_AXIS_HORIZONTAL_SCROLL,
-wl_fixed_from_int(1));
break;
case 7:
if (state_w)
wl_pointer_send_axis(res, timestamp,
WL_POINTER_AXIS_HORIZONTAL_SCROLL,
wl_fixed_from_int(1));
break;
}
}
e_comp_wl_mouse_button(res, serial, timestamp, button, state_w);
}
if (pointer->button_count == 0 &&
state == WL_POINTER_BUTTON_STATE_RELEASED)
wl_pointer_set_focus(pointer, pointer->current,
pointer->current_x, pointer->current_y);
}
static void
@ -1573,8 +1550,8 @@ _e_comp_wl_cb_module_idle(void *data EINA_UNUSED)
return ECORE_CALLBACK_RENEW;
}
static Eina_Bool
_e_comp_wl_cb_keymap_changed(void *data EINA_UNUSED, int type EINA_UNUSED, void *event EINA_UNUSED)
EAPI Eina_Bool
e_comp_wl_cb_keymap_changed(void *data EINA_UNUSED, int type EINA_UNUSED, void *event EINA_UNUSED)
{
struct xkb_keymap *keymap;
@ -1654,7 +1631,9 @@ _e_comp_wl_cb_surface_create(struct wl_client *client, struct wl_resource *resou
}
ews->wl.client = client;
ews->pixmap = e_pixmap_new(E_PIXMAP_TYPE_WL, ews);
ews->pixmap = e_pixmap_find(E_PIXMAP_TYPE_WL, id);
if (!ews->pixmap)
ews->pixmap = e_pixmap_new(E_PIXMAP_TYPE_WL, id);
e_pixmap_parent_window_set(ews->pixmap, ews);
e_pixmap_usable_set(ews->pixmap, 1);
/* initialize the destroy signal */
@ -1702,6 +1681,8 @@ _e_comp_wl_cb_surface_destroy(struct wl_resource *resource)
E_Wayland_Surface *ews = NULL;
E_Wayland_Surface_Frame_Callback *cb = NULL, *ncb = NULL;
struct wl_pointer *pointer;
Eina_Inlist *l;
E_Wayland_Buffer *buffer;
/* try to get the surface from this resource */
if (!(ews = wl_resource_get_user_data(resource)))
@ -1752,6 +1733,11 @@ _e_comp_wl_cb_surface_destroy(struct wl_resource *resource)
wl_list_for_each_safe(cb, ncb, &ews->wl.frames, wl.link)
wl_resource_destroy(cb->wl.resource);
EINA_INLIST_FOREACH_SAFE(ews->buffers, l, buffer)
{
buffer->ews = NULL;
ews->buffers = eina_inlist_remove(ews->buffers, EINA_INLIST_GET(buffer));
}
e_pixmap_parent_window_set(ews->pixmap, NULL);
e_pixmap_free(ews->pixmap);
@ -1982,6 +1968,7 @@ _e_comp_wl_input_keymap_get(void)
names.layout = strdup(kbd_layout->name);
}
#ifndef WAYLAND_ONLY
/* if we are running under X11, try to get the xkb rule names atom */
if (getenv("DISPLAY"))
{
@ -2006,7 +1993,7 @@ _e_comp_wl_input_keymap_get(void)
if ((data) && (len > 0))
{
names.rules = strdup((const char *)data);
names.rules = (char*)data;
data += strlen((const char *)data) + 1;
if (!names.model)
names.model = strdup((const char *)data);
@ -2015,6 +2002,7 @@ _e_comp_wl_input_keymap_get(void)
names.layout = strdup((const char *)data);
}
}
#endif
printf("Keymap\n");
printf("\tRules: %s\n", names.rules);
@ -2552,7 +2540,7 @@ _e_comp_wl_surface_buffer_reference(E_Wayland_Buffer_Reference *ref, E_Wayland_B
wl_signal_add(&buffer->wl.destroy_signal, &ref->destroy_listener);
}
//INF("CURRENT BUFFER SWAP");
//INF("CURRENT BUFFER SWAP: %p->%p", ref->buffer, buffer);
ref->buffer = buffer;
ref->destroy_listener.notify =
_e_comp_wl_surface_buffer_reference_cb_destroy;
@ -2603,12 +2591,14 @@ _e_comp_wl_surface_buffer_cb_destroy(struct wl_listener *listener, void *data)
E_Wayland_Buffer *buffer;
buffer = container_of(listener, E_Wayland_Buffer, wl.destroy_listener);
wl_signal_emit(&buffer->wl.destroy_signal, buffer);
if (buffer->ews && buffer->ews->pixmap && (e_pixmap_resource_get(buffer->ews->pixmap) == data))
if (buffer->ews)
{
if (buffer->ews->ec)
if (buffer->ews->ec && buffer->ews->pixmap && (e_pixmap_resource_get(buffer->ews->pixmap) == data) &&
evas_object_visible_get(buffer->ews->ec->frame))
{
INF("DESTROYED CURRENT BUFFER: %s", e_pixmap_dirty_get(buffer->ews->pixmap) ? "DIRTY" : "CLEAN");
//INF("DESTROYED CURRENT BUFFER: %s", e_pixmap_dirty_get(buffer->ews->pixmap) ? "DIRTY" : "CLEAN");
e_pixmap_usable_set(buffer->ews->pixmap, 0);
if (!e_pixmap_image_exists(buffer->ews->pixmap))
{
@ -2620,6 +2610,7 @@ _e_comp_wl_surface_buffer_cb_destroy(struct wl_listener *listener, void *data)
e_comp_object_render(buffer->ews->ec->frame);
e_comp_object_render_update_del(buffer->ews->ec->frame);
}
buffer->ews->buffers = eina_inlist_remove(buffer->ews->buffers, EINA_INLIST_GET(buffer));
}
E_FREE(buffer);
}
@ -2651,6 +2642,12 @@ _e_comp_wl_surface_cb_attach(struct wl_client *client EINA_UNUSED, struct wl_res
/* reference any existing buffers */
_e_comp_wl_surface_buffer_reference(&ews->buffer_reference, buffer);
if (buffer)
{
if (!buffer->ews)
ews->buffers = eina_inlist_append(ews->buffers, EINA_INLIST_GET(buffer));
buffer->ews = ews;
}
//INF("ATTACHED NEW BUFFER");
e_pixmap_dirty(ews->pixmap);
//if (ews->ec)
@ -2658,9 +2655,7 @@ _e_comp_wl_surface_cb_attach(struct wl_client *client EINA_UNUSED, struct wl_res
/* if we are setting a null buffer, then unmap the surface */
if (buffer)
buffer->ews = ews;
else
if (!buffer)
{
if (ews->mapped)
{
@ -2798,9 +2793,7 @@ _e_comp_wl_surface_cb_commit(struct wl_client *client EINA_UNUSED, struct wl_res
ews->pending.buffer);
/* if the pending buffer is NULL, unmap the surface */
if (ews->pending.buffer)
ews->pending.buffer->ews = ews;
else
if (!ews->pending.buffer)
{
if (ews->mapped)
{

View File

@ -5,7 +5,6 @@
# define E_COMP_WL_H
# define WL_HIDE_DEPRECATED
# include <pixman.h>
# include <wayland-server.h>
# include <xkbcommon/xkbcommon.h>
@ -253,6 +252,7 @@ struct _E_Wayland_Surface_Frame_Callback
struct _E_Wayland_Buffer
{
EINA_INLIST;
struct
{
struct wl_resource *resource;
@ -315,6 +315,7 @@ struct _E_Wayland_Surface
E_Client *ec;
E_Pixmap *pixmap;
Eina_Inlist *buffers;
E_Wayland_Shell_Surface *shell_surface;
Eina_Bool mapped : 1;
@ -472,6 +473,15 @@ struct _E_Wayland_Compositor
E_Wayland_Shell_Interface shell_interface;
#ifdef WAYLAND_ONLY
Eina_Bool focus : 1;
unsigned int output_pool;
struct xkb_rule_names xkb_names;
struct xkb_context *xkb_context;
#endif
Ecore_Event_Handler *kbd_handler;
Ecore_Fd_Handler *fd_handler;
Ecore_Idler *idler;
@ -480,9 +490,7 @@ struct _E_Wayland_Compositor
Eina_Inlist *surfaces;
Eina_List *seats;
struct wl_list outputs;
void (*ping_cb) (E_Wayland_Surface *ews, unsigned int serial);
};
@ -581,9 +589,13 @@ struct _E_Wayland_Plane
/* external variables */
extern EAPI E_Wayland_Compositor *_e_wl_comp;
EINTERN Eina_Bool e_comp_wl_init(void);
EAPI Eina_Bool e_comp_wl_init(void);
EINTERN void e_comp_wl_shutdown(void);
#ifdef WAYLAND_ONLY
EAPI int e_comp_wl_input_read(int fd EINA_UNUSED, unsigned int mask EINA_UNUSED, void *data);
#endif
EAPI void wl_seat_init(struct wl_seat *seat);
EAPI void wl_seat_release(struct wl_seat *seat);
@ -613,5 +625,8 @@ EAPI void wl_seat_set_selection(struct wl_seat *seat, struct wl_data_source *sou
EAPI unsigned int e_comp_wl_time_get(void);
EAPI void e_comp_wl_input_modifiers_update(unsigned int serial);
EAPI void e_comp_wl_mouse_button(struct wl_resource *resource, uint32_t serial, uint32_t timestamp, uint32_t button, uint32_t state_w);
EAPI Eina_Bool e_comp_wl_cb_keymap_changed(void *data EINA_UNUSED, int type EINA_UNUSED, void *event EINA_UNUSED);
# endif
#endif

View File

@ -1,9 +1,9 @@
#include "e.h"
#include <Ecore_X.h>
#define COMP_X_SHAPE_INPUT_ERROR_CATCH
#define COMP_X_SHAPE_INPUT_ERROR_CATCH_TOL 3
#include "e.h"
#include <Ecore_X.h>
#define GRAV_SET(ec, grav) \
ecore_x_window_gravity_set(e_client_util_pwin_get(ec), grav); \
if (ec->comp_data->lock_win) ecore_x_window_gravity_set(ec->comp_data->lock_win, grav); \
@ -30,46 +30,7 @@ struct _E_Comp_Data
Eina_Bool restack : 1;
};
struct E_Comp_Client_Data
{
Ecore_X_Window lock_win;
Ecore_X_Damage damage; // damage region
Ecore_X_Visual vis; // window visual
Ecore_X_Colormap cmap; // colormap of window
#if 0 //NOT USED
Ecore_X_Pixmap cache_pixmap; // the cached pixmap (1/nth the dimensions)
int cache_w, cache_h; // cached pixmap size
#endif
Ecore_X_Image *xim; // x image - software fallback
unsigned char misses; // number of sync misses
Ecore_X_Window_Attributes initial_attributes;
unsigned int move_counter; //reduce X calls when moving a window
unsigned int internal_props_set; //don't need to refetch our own internal props
#ifdef COMP_X_SHAPE_INPUT_ERROR_CATCH
double last_input_time;
unsigned last_input_within_10;
#endif
Eina_Bool moving : 1;
Eina_Bool first_map : 1;
Eina_Bool change_icon : 1;
Eina_Bool need_reparent : 1;
Eina_Bool reparented : 1;
Eina_Bool deleted : 1;
Eina_Bool button_grabbed : 1;
Eina_Bool fetch_exe : 1;
Eina_Bool set_win_type : 1;
Eina_Bool frame_update : 1;
};
static Ecore_X_Time focus_time = 0;
static unsigned int focus_time = 0;
static Eina_List *handlers = NULL;
static Eina_Hash *clients_win_hash = NULL;
static Eina_Hash *damages_hash = NULL;
@ -81,6 +42,10 @@ static Eina_List *post_clients = NULL;
static int _e_comp_x_mapping_change_disabled = 0;
static Ecore_Timer *screensaver_idle_timer = NULL;
static Eina_Bool screensaver_dimmed = EINA_FALSE;
static void
_e_comp_x_client_damage_add(E_Client *ec)
{
@ -333,23 +298,23 @@ _e_comp_x_client_new_helper(E_Client *ec)
ec->vkbd.fetch.vkbd = 1;
/* loop to check for illume atoms */
else if (atoms[i] == ECORE_X_ATOM_E_ILLUME_CONFORMANT)
ec->illume.conformant.fetch.conformant = 1;
ec->comp_data->illume.conformant.fetch.conformant = 1;
else if (atoms[i] == ECORE_X_ATOM_E_ILLUME_QUICKPANEL_STATE)
ec->illume.quickpanel.fetch.state = 1;
ec->comp_data->illume.quickpanel.fetch.state = 1;
else if (atoms[i] == ECORE_X_ATOM_E_ILLUME_QUICKPANEL)
ec->illume.quickpanel.fetch.quickpanel = 1;
ec->comp_data->illume.quickpanel.fetch.quickpanel = 1;
else if (atoms[i] == ECORE_X_ATOM_E_ILLUME_QUICKPANEL_PRIORITY_MAJOR)
ec->illume.quickpanel.fetch.priority.major = 1;
ec->comp_data->illume.quickpanel.fetch.priority.major = 1;
else if (atoms[i] == ECORE_X_ATOM_E_ILLUME_QUICKPANEL_PRIORITY_MINOR)
ec->illume.quickpanel.fetch.priority.minor = 1;
ec->comp_data->illume.quickpanel.fetch.priority.minor = 1;
else if (atoms[i] == ECORE_X_ATOM_E_ILLUME_QUICKPANEL_ZONE)
ec->illume.quickpanel.fetch.zone = 1;
ec->comp_data->illume.quickpanel.fetch.zone = 1;
else if (atoms[i] == ECORE_X_ATOM_E_ILLUME_DRAG_LOCKED)
ec->illume.drag.fetch.locked = 1;
ec->comp_data->illume.drag.fetch.locked = 1;
else if (atoms[i] == ECORE_X_ATOM_E_ILLUME_DRAG)
ec->illume.drag.fetch.drag = 1;
ec->comp_data->illume.drag.fetch.drag = 1;
else if (atoms[i] == ECORE_X_ATOM_E_ILLUME_WINDOW_STATE)
ec->illume.win_state.fetch.state = 1;
ec->comp_data->illume.win_state.fetch.state = 1;
else if (atoms[i] == ECORE_X_ATOM_E_VIDEO_PARENT)
video_parent = EINA_TRUE;
else if (atoms[i] == ECORE_X_ATOM_E_VIDEO_POSITION)
@ -1727,47 +1692,47 @@ _e_comp_x_property(void *data EINA_UNUSED, int type EINA_UNUSED, Ecore_X_Event_W
}
else if (ev->atom == ECORE_X_ATOM_E_ILLUME_CONFORMANT)
{
ec->illume.conformant.fetch.conformant = 1;
ec->comp_data->illume.conformant.fetch.conformant = 1;
EC_CHANGED(ec);
}
else if (ev->atom == ECORE_X_ATOM_E_ILLUME_QUICKPANEL_STATE)
{
ec->illume.quickpanel.fetch.state = 1;
ec->comp_data->illume.quickpanel.fetch.state = 1;
EC_CHANGED(ec);
}
else if (ev->atom == ECORE_X_ATOM_E_ILLUME_QUICKPANEL)
{
ec->illume.quickpanel.fetch.quickpanel = 1;
ec->comp_data->illume.quickpanel.fetch.quickpanel = 1;
EC_CHANGED(ec);
}
else if (ev->atom == ECORE_X_ATOM_E_ILLUME_QUICKPANEL_PRIORITY_MAJOR)
{
ec->illume.quickpanel.fetch.priority.major = 1;
ec->comp_data->illume.quickpanel.fetch.priority.major = 1;
EC_CHANGED(ec);
}
else if (ev->atom == ECORE_X_ATOM_E_ILLUME_QUICKPANEL_PRIORITY_MINOR)
{
ec->illume.quickpanel.fetch.priority.minor = 1;
ec->comp_data->illume.quickpanel.fetch.priority.minor = 1;
EC_CHANGED(ec);
}
else if (ev->atom == ECORE_X_ATOM_E_ILLUME_QUICKPANEL_ZONE)
{
ec->illume.quickpanel.fetch.zone = 1;
ec->comp_data->illume.quickpanel.fetch.zone = 1;
EC_CHANGED(ec);
}
else if (ev->atom == ECORE_X_ATOM_E_ILLUME_DRAG_LOCKED)
{
ec->illume.drag.fetch.locked = 1;
ec->comp_data->illume.drag.fetch.locked = 1;
EC_CHANGED(ec);
}
else if (ev->atom == ECORE_X_ATOM_E_ILLUME_DRAG)
{
ec->illume.drag.fetch.drag = 1;
ec->comp_data->illume.drag.fetch.drag = 1;
EC_CHANGED(ec);
}
else if (ev->atom == ECORE_X_ATOM_E_ILLUME_WINDOW_STATE)
{
ec->illume.win_state.fetch.state = 1;
ec->comp_data->illume.win_state.fetch.state = 1;
EC_CHANGED(ec);
}
/*
@ -2049,13 +2014,13 @@ _e_comp_x_mouse_move(void *d EINA_UNUSED, int t EINA_UNUSED, Ecore_Event_Mouse_M
{
E_Client *ec;
if (!e_client_comp_grabbed_get()) return ECORE_CALLBACK_RENEW;
ec = e_client_action_get();
if (!ec) return ECORE_CALLBACK_RENEW;
E_COMP_X_PIXMAP_CHECK ECORE_CALLBACK_RENEW;
if (ec->comp_data->deleted) return ECORE_CALLBACK_RENEW;
if (e_client_resizing_get(ec) &&
ec->netwm.sync.request &&
ec->netwm.sync.alarm
ec->comp_data->alarm
)
{
if ((ecore_loop_time_get() - ec->netwm.sync.send_time) > 0.5)
@ -2076,8 +2041,8 @@ _e_comp_x_mouse_move(void *d EINA_UNUSED, int t EINA_UNUSED, Ecore_Event_Mouse_M
* when no new resize-request was added by sync-alarm cb.
*/
}
e_client_mouse_move(ec, (Evas_Point*)&ev->root);
}
e_client_mouse_move(ec, (Evas_Point*)&ev->root);
return ECORE_CALLBACK_RENEW;
}
@ -2178,7 +2143,7 @@ _e_comp_x_sync_alarm(void *data EINA_UNUSED, int type EINA_UNUSED, Ecore_X_Event
if (ec->netwm.sync.wait)
ec->netwm.sync.wait--;
if (ecore_x_sync_counter_query(ec->netwm.sync.counter, &serial))
if (ecore_x_sync_counter_query(ec->comp_data->sync_counter, &serial))
{
E_Client_Pending_Resize *pnd = NULL;
@ -2686,7 +2651,6 @@ _e_comp_x_hook_client_pre_frame_assign(void *d EINA_UNUSED, E_Client *ec)
ecore_x_netwm_window_type_set(win, ECORE_X_WINDOW_TYPE_NORMAL);
}
ec->comp_data->set_win_type = 0;
ecore_evas_show(ec->internal_ecore_evas);
}
}
if (ec->re_manage || ec->visible)
@ -3040,8 +3004,8 @@ _e_comp_x_hook_client_fetch(void *d EINA_UNUSED, E_Client *ec)
&ec->icccm.initial_state,
&ec->icccm.icon_pixmap,
&ec->icccm.icon_mask,
&ec->icccm.icon_window,
&ec->icccm.window_group,
(Ecore_X_Window*)&ec->icccm.icon_window,
(Ecore_X_Window*)&ec->icccm.window_group,
&is_urgent))
{
ec->icccm.accepts_focus = accepts_focus;
@ -3132,7 +3096,7 @@ _e_comp_x_hook_client_fetch(void *d EINA_UNUSED, E_Client *ec)
{
ec->netwm.sync.request = 1;
if (!ecore_x_netwm_sync_counter_get(win,
&ec->netwm.sync.counter))
&ec->comp_data->sync_counter))
ec->netwm.sync.request = 0;
}
}
@ -3330,59 +3294,59 @@ _e_comp_x_hook_client_fetch(void *d EINA_UNUSED, E_Client *ec)
ec->vkbd.fetch.vkbd = 0;
rem_change = 1;
}
if (ec->illume.conformant.fetch.conformant)
if (ec->comp_data->illume.conformant.fetch.conformant)
{
ec->illume.conformant.conformant =
ec->comp_data->illume.conformant.conformant =
ecore_x_e_illume_conformant_get(win);
ec->illume.conformant.fetch.conformant = 0;
ec->comp_data->illume.conformant.fetch.conformant = 0;
}
if (ec->illume.quickpanel.fetch.state)
if (ec->comp_data->illume.quickpanel.fetch.state)
{
ec->illume.quickpanel.state =
ec->comp_data->illume.quickpanel.state =
ecore_x_e_illume_quickpanel_state_get(win);
ec->illume.quickpanel.fetch.state = 0;
ec->comp_data->illume.quickpanel.fetch.state = 0;
}
if (ec->illume.quickpanel.fetch.quickpanel)
if (ec->comp_data->illume.quickpanel.fetch.quickpanel)
{
ec->illume.quickpanel.quickpanel =
ec->comp_data->illume.quickpanel.quickpanel =
ecore_x_e_illume_quickpanel_get(win);
ec->illume.quickpanel.fetch.quickpanel = 0;
ec->comp_data->illume.quickpanel.fetch.quickpanel = 0;
}
if (ec->illume.quickpanel.fetch.priority.major)
if (ec->comp_data->illume.quickpanel.fetch.priority.major)
{
ec->illume.quickpanel.priority.major =
ec->comp_data->illume.quickpanel.priority.major =
ecore_x_e_illume_quickpanel_priority_major_get(win);
ec->illume.quickpanel.fetch.priority.major = 0;
ec->comp_data->illume.quickpanel.fetch.priority.major = 0;
}
if (ec->illume.quickpanel.fetch.priority.minor)
if (ec->comp_data->illume.quickpanel.fetch.priority.minor)
{
ec->illume.quickpanel.priority.minor =
ec->comp_data->illume.quickpanel.priority.minor =
ecore_x_e_illume_quickpanel_priority_minor_get(win);
ec->illume.quickpanel.fetch.priority.minor = 0;
ec->comp_data->illume.quickpanel.fetch.priority.minor = 0;
}
if (ec->illume.quickpanel.fetch.zone)
if (ec->comp_data->illume.quickpanel.fetch.zone)
{
ec->illume.quickpanel.zone =
ec->comp_data->illume.quickpanel.zone =
ecore_x_e_illume_quickpanel_zone_get(win);
ec->illume.quickpanel.fetch.zone = 0;
ec->comp_data->illume.quickpanel.fetch.zone = 0;
}
if (ec->illume.drag.fetch.drag)
if (ec->comp_data->illume.drag.fetch.drag)
{
ec->illume.drag.drag =
ec->comp_data->illume.drag.drag =
ecore_x_e_illume_drag_get(win);
ec->illume.drag.fetch.drag = 0;
ec->comp_data->illume.drag.fetch.drag = 0;
}
if (ec->illume.drag.fetch.locked)
if (ec->comp_data->illume.drag.fetch.locked)
{
ec->illume.drag.locked =
ec->comp_data->illume.drag.locked =
ecore_x_e_illume_drag_locked_get(win);
ec->illume.drag.fetch.locked = 0;
ec->comp_data->illume.drag.fetch.locked = 0;
}
if (ec->illume.win_state.fetch.state)
if (ec->comp_data->illume.win_state.fetch.state)
{
ec->illume.win_state.state =
ec->comp_data->illume.win_state.state =
ecore_x_e_illume_window_state_get(win);
ec->illume.win_state.fetch.state = 0;
ec->comp_data->illume.win_state.fetch.state = 0;
}
if (ec->changes.shape)
{
@ -3874,8 +3838,12 @@ _e_comp_x_hook_client_focus_unset(void *d EINA_UNUSED, E_Client *ec)
static void
_e_comp_x_hook_client_focus_set(void *d EINA_UNUSED, E_Client *ec)
{
E_COMP_X_PIXMAP_CHECK;
focus_time = ecore_x_current_time_get();
if ((e_pixmap_type_get(ec->pixmap) != E_PIXMAP_TYPE_X))
{
e_grabinput_focus(ec->comp->ee_win, E_FOCUS_METHOD_PASSIVE);
return;
}
if ((ec->icccm.take_focus) && (ec->icccm.accepts_focus))
{
@ -4009,9 +3977,10 @@ static void
_e_comp_x_hook_client_resize_end(void *d EINA_UNUSED, E_Client *ec)
{
E_COMP_X_PIXMAP_CHECK;
if (!ec->netwm.sync.alarm) return;
eina_hash_del_by_key(alarm_hash, &ec->netwm.sync.alarm);
ecore_x_sync_alarm_free(ec->netwm.sync.alarm);
if (!ec->comp_data->alarm) return;
eina_hash_del_by_key(alarm_hash, &ec->comp_data->alarm);
ecore_x_sync_alarm_free(ec->comp_data->alarm);
ec->comp_data->alarm = 0;
ec->netwm.sync.alarm = 0;
/* resize to last geometry if sync alarm for it was not yet handled */
if (ec->pending_resize)
@ -4029,9 +3998,9 @@ _e_comp_x_hook_client_resize_begin(void *d EINA_UNUSED, E_Client *ec)
{
E_COMP_X_PIXMAP_CHECK;
if (!ec->netwm.sync.request) return;
eina_hash_add(alarm_hash, &ec->netwm.sync.alarm, ec);
ec->netwm.sync.alarm = ecore_x_sync_alarm_new(ec->netwm.sync.counter);
ec->netwm.sync.serial = 1;
ec->netwm.sync.alarm = ecore_x_sync_alarm_new(ec->comp_data->sync_counter);
eina_hash_add(alarm_hash, &ec->comp_data->alarm, ec);
ec->netwm.sync.alarm = ec->netwm.sync.serial = 1;
ec->netwm.sync.wait = 0;
ec->netwm.sync.send_time = ecore_loop_time_get();
}
@ -4058,6 +4027,70 @@ _e_comp_x_cb_ping(void *data EINA_UNUSED, int ev_type EINA_UNUSED, Ecore_X_Event
return ECORE_CALLBACK_PASS_ON;
}
static Eina_Bool
_e_comp_x_screensaver_idle_timer_cb(void *d __UNUSED__)
{
ecore_event_add(E_EVENT_SCREENSAVER_ON, NULL, NULL, NULL);
screensaver_idle_timer = NULL;
return EINA_FALSE;
}
static Eina_Bool
_e_comp_x_screensaver_notify_cb(void *data __UNUSED__, int type __UNUSED__, Ecore_X_Event_Screensaver_Notify *ev)
{
static Eina_Bool saver_on = EINA_FALSE;
if ((ev->on) && (!saver_on))
{
saver_on = EINA_TRUE;
if (e_config->backlight.idle_dim)
{
double t = e_config->screensaver_timeout -
e_config->backlight.timer;
if (t < 1.0) t = 1.0;
E_FREE_FUNC(screensaver_idle_timer, ecore_timer_del);
if (e_config->screensaver_enable)
screensaver_idle_timer = ecore_timer_add
(t, _e_comp_x_screensaver_idle_timer_cb, NULL);
if (e_backlight_mode_get(NULL) != E_BACKLIGHT_MODE_DIM)
{
e_backlight_mode_set(NULL, E_BACKLIGHT_MODE_DIM);
screensaver_dimmed = EINA_TRUE;
}
}
else
{
if (!e_screensaver_on_get())
ecore_event_add(E_EVENT_SCREENSAVER_ON, NULL, NULL, NULL);
}
}
else if ((!ev->on) && (saver_on))
{
saver_on = EINA_FALSE;
if (screensaver_idle_timer)
{
E_FREE_FUNC(screensaver_idle_timer, ecore_timer_del);
if (e_config->backlight.idle_dim)
{
if (e_backlight_mode_get(NULL) != E_BACKLIGHT_MODE_NORMAL)
e_backlight_mode_set(NULL, E_BACKLIGHT_MODE_NORMAL);
}
}
else
{
if (screensaver_dimmed)
{
if (e_backlight_mode_get(NULL) != E_BACKLIGHT_MODE_NORMAL)
e_backlight_mode_set(NULL, E_BACKLIGHT_MODE_NORMAL);
screensaver_dimmed = EINA_FALSE;
}
if (e_screensaver_on_get())
ecore_event_add(E_EVENT_SCREENSAVER_OFF, NULL, NULL, NULL);
}
}
return ECORE_CALLBACK_PASS_ON;
}
static Eina_Bool
_e_comp_x_cb_frame_extents_request(void *data EINA_UNUSED, int ev_type EINA_UNUSED, Ecore_X_Event_Frame_Extents_Request *ev)
{
@ -4653,6 +4686,7 @@ _e_comp_x_screens_setup(void)
}
if (!success) break;
c = e_comp_new();
c->comp_type = E_PIXMAP_TYPE_X;
success = _e_comp_x_setup(c, root, rw, rh);
if (!success) break;
}
@ -4753,7 +4787,13 @@ e_comp_x_init(void)
_e_comp_x_cb_frame_extents_request, NULL);
E_LIST_HANDLER_APPEND(handlers, ECORE_X_EVENT_PING,
_e_comp_x_cb_ping, NULL);
E_LIST_HANDLER_APPEND(handlers, ECORE_X_EVENT_SCREENSAVER_NOTIFY, _e_comp_x_screensaver_notify_cb, NULL);;
ecore_x_screensaver_custom_blanking_enable();
e_screensaver_attrs_set(ecore_x_screensaver_timeout_get(),
ecore_x_screensaver_blank_get(),
ecore_x_screensaver_expose_get());
ecore_x_passive_grab_replay_func_set(_e_comp_x_grab_replay, NULL);
e_client_hook_add(E_CLIENT_HOOK_DESK_SET, _e_comp_x_hook_client_desk_set, NULL);
@ -4772,6 +4812,8 @@ e_comp_x_init(void)
e_client_hook_add(E_CLIENT_HOOK_FOCUS_UNSET, _e_comp_x_hook_client_focus_unset, NULL);
e_client_hook_add(E_CLIENT_HOOK_EVAL_END, _e_comp_x_hook_client_eval_end, NULL);
if (!e_randr_init()) return 0;
if (!e_atoms_init()) return 0;
if (!_e_comp_x_screens_setup()) return EINA_FALSE;
if (!e_xsettings_init())
@ -4791,8 +4833,10 @@ e_comp_x_shutdown(void)
E_FREE_FUNC(alarm_hash, eina_hash_free);
E_FREE_FUNC(frame_extents, eina_hash_free);
e_xsettings_shutdown();
ecore_x_screensaver_custom_blanking_disable();
if (x_fatal) return;
e_atoms_shutdown();
e_randr_shutdown();
/* ecore_x_ungrab(); */
ecore_x_focus_reset();
ecore_x_events_allow_all();

View File

@ -1,7 +1,113 @@
#ifndef E_COMP_X_H
#define E_COMP_X_H
#ifdef E_TYPEDEFS
# include <Ecore_X.h>
# include "e_atoms.h"
# include "e_hints.h"
# include "e_randr.h"
#else
# ifndef E_COMP_X_H
# define E_COMP_X_H
# include <Ecore_X.h>
# include "e_atoms.h"
# include "e_hints.h"
# include "e_randr.h"
struct _E_Comp_Client_Data
{
Ecore_X_Window lock_win;
Ecore_X_Damage damage; // damage region
Ecore_X_Visual vis; // window visual
Ecore_X_Colormap cmap; // colormap of window
#if 0 //NOT USED
Ecore_X_Pixmap cache_pixmap; // the cached pixmap (1/nth the dimensions)
int cache_w, cache_h; // cached pixmap size
#endif
Ecore_X_Image *xim; // x image - software fallback
Ecore_X_Sync_Alarm alarm;
Ecore_X_Sync_Counter sync_counter; // netwm sync counter
unsigned char misses; // number of sync misses
Ecore_X_Window_Attributes initial_attributes;
unsigned int move_counter; //reduce X calls when moving a window
unsigned int internal_props_set; //don't need to refetch our own internal props
struct
{
struct
{
struct
{
unsigned char conformant : 1;
} fetch;
unsigned char conformant : 1;
} conformant;
struct
{
struct
{
unsigned char state : 1;
struct
{
unsigned int major : 1;
unsigned int minor : 1;
} priority;
unsigned char quickpanel : 1;
unsigned char zone : 1;
} fetch;
Ecore_X_Illume_Quickpanel_State state;
struct
{
unsigned int major : 1;
unsigned int minor : 1;
} priority;
unsigned char quickpanel : 1;
int zone;
} quickpanel;
struct
{
struct
{
unsigned char drag : 1;
unsigned char locked : 1;
} fetch;
unsigned char drag : 1;
unsigned char locked : 1;
} drag;
struct
{
struct
{
unsigned char state : 1;
} fetch;
Ecore_X_Illume_Window_State state;
} win_state;
} illume;
Eina_Bool moving : 1;
Eina_Bool first_map : 1;
Eina_Bool change_icon : 1;
Eina_Bool need_reparent : 1;
Eina_Bool reparented : 1;
Eina_Bool deleted : 1;
Eina_Bool button_grabbed : 1;
Eina_Bool fetch_exe : 1;
Eina_Bool set_win_type : 1;
Eina_Bool frame_update : 1;
#ifdef COMP_X_SHAPE_INPUT_ERROR_CATCH
double last_input_time;
unsigned last_input_within_10;
#endif
};
EINTERN Eina_Bool e_comp_x_init(void);
EINTERN void e_comp_x_shutdown(void);
EAPI void e_alert_composite_win(Ecore_X_Window root, Ecore_X_Window win);
# endif
#endif

View File

@ -481,7 +481,7 @@ e_drop_handler_del(E_Drop_Handler *handler)
}
EAPI int
e_drop_xdnd_register_set(Ecore_X_Window win, int reg)
e_drop_xdnd_register_set(Ecore_Window win, int reg)
{
if (reg)
{
@ -518,12 +518,12 @@ e_drop_handler_responsive_get(const E_Drop_Handler *handler)
}
EAPI void
e_drop_handler_action_set(Ecore_X_Atom action)
e_drop_handler_action_set(unsigned int action)
{
_action = action;
}
EAPI Ecore_X_Atom
EAPI unsigned int
e_drop_handler_action_get(void)
{
return _action;

View File

@ -81,13 +81,13 @@ struct _E_Event_Dnd_Enter
{
void *data;
int x, y;
Ecore_X_Atom action;
unsigned int action;
};
struct _E_Event_Dnd_Move
{
int x, y;
Ecore_X_Atom action;
unsigned int action;
};
struct _E_Event_Dnd_Leave
@ -142,11 +142,11 @@ EAPI E_Drop_Handler *e_drop_handler_add(E_Object *obj,
EAPI void e_drop_handler_geometry_set(E_Drop_Handler *handler, int x, int y, int w, int h);
EAPI int e_drop_inside(const E_Drop_Handler *handler, int x, int y);
EAPI void e_drop_handler_del(E_Drop_Handler *handler);
EAPI int e_drop_xdnd_register_set(Ecore_X_Window win, int reg);
EAPI int e_drop_xdnd_register_set(Ecore_Window win, int reg);
EAPI void e_drop_handler_responsive_set(E_Drop_Handler *handler);
EAPI int e_drop_handler_responsive_get(const E_Drop_Handler *handler);
EAPI void e_drop_handler_action_set(Ecore_X_Atom action);
EAPI Ecore_X_Atom e_drop_handler_action_get(void);
EAPI void e_drop_handler_action_set(unsigned int action);
EAPI unsigned int e_drop_handler_action_get(void);
EAPI Eina_List *e_dnd_util_text_uri_list_convert(char *data, int size);

View File

@ -2546,7 +2546,7 @@ _e_gadcon_client_move_start(E_Gadcon_Client *gcc)
evas_pointer_canvas_xy_get(gcc->gadcon->evas, &gcc->dx, &gcc->dy);
else
{
ecore_x_pointer_xy_get(e_comp_get(gcc)->ee_win, &gcc->dx, &gcc->dy);
ecore_evas_pointer_xy_get(e_comp_get(gcc)->ee, &gcc->dx, &gcc->dy);
evas_object_geometry_get(gcc->gadcon->o_container, &gx, &gy, NULL, NULL);
gcc->dx -= gx;
gcc->dy -= gy;

View File

@ -37,6 +37,7 @@ e_grabinput_shutdown(void)
EAPI int
e_grabinput_get(Ecore_Window mouse_win, int confine_mouse, Ecore_Window key_win)
{
if (e_comp_get(NULL)->comp_type != E_PIXMAP_TYPE_X) return 1;
if (grab_mouse_win)
{
ecore_x_pointer_ungrab();
@ -81,6 +82,7 @@ e_grabinput_get(Ecore_Window mouse_win, int confine_mouse, Ecore_Window key_win)
EAPI void
e_grabinput_release(Ecore_Window mouse_win, Ecore_Window key_win)
{
if (e_comp_get(NULL)->comp_type != E_PIXMAP_TYPE_X) return;
if (mouse_win == grab_mouse_win)
{
ecore_x_pointer_ungrab();
@ -103,6 +105,7 @@ e_grabinput_release(Ecore_Window mouse_win, Ecore_Window key_win)
EAPI void
e_grabinput_focus(Ecore_Window win, E_Focus_Method method)
{
if (e_comp_get(NULL)->comp_type != E_PIXMAP_TYPE_X) return;
if (grab_key_win != 0)
{
/* fprintf(stderr, "while grabbed focus changed to %x\n", win); */

View File

@ -285,6 +285,7 @@ e_hints_client_list_set(void)
unsigned int i = 0;
Ecore_X_Window *clients = NULL;
if (man->comp->comp_type != E_PIXMAP_TYPE_X) continue;
if (man->comp->clients)
{
E_Client *ec;
@ -377,6 +378,7 @@ e_hints_active_window_set(E_Manager *man,
#ifdef WAYLAND_ONLY
#else
E_OBJECT_CHECK(man);
if (e_comp_get(man)->comp_type != E_PIXMAP_TYPE_X) return;
if (ec && (e_pixmap_type_get(ec->pixmap) == E_PIXMAP_TYPE_X))
ecore_x_netwm_client_active_set(man->root, e_client_util_win_get(ec));
else
@ -391,6 +393,7 @@ e_hints_window_init(E_Client *ec)
#else
E_Remember *rem = NULL;
if (!e_pixmap_is_x(ec->pixmap)) return;
if (ec->remember)
rem = ec->remember;
@ -567,6 +570,7 @@ e_hints_window_state_set(E_Client *ec)
Ecore_X_Window_State state[10];
int num = 0;
if (!e_pixmap_is_x(ec->pixmap)) return;
if (ec->netwm.state.modal)
state[num++] = ECORE_X_WINDOW_STATE_MODAL;
if (ec->netwm.state.sticky)
@ -612,6 +616,7 @@ e_hints_allowed_action_set(E_Client *ec)
Ecore_X_Action action[10];
int num = 0;
if (!e_pixmap_is_x(ec->pixmap)) return;
if (ec->netwm.action.move)
action[num++] = ECORE_X_ACTION_MOVE;
if (ec->netwm.action.resize)
@ -642,6 +647,7 @@ e_hints_window_type_set(E_Client *ec)
{
#ifdef WAYLAND_ONLY
#else
if (!e_pixmap_is_x(ec->pixmap)) return;
ecore_x_netwm_window_type_set(e_client_util_win_get(ec), ec->netwm.type);
#endif
}
@ -654,6 +660,7 @@ e_hints_window_type_get(E_Client *ec)
Ecore_X_Window_Type *types = NULL;
int num, i, j;
if (!e_pixmap_is_x(ec->pixmap)) return;
num = ecore_x_netwm_window_types_get(e_client_util_win_get(ec), &types);
if (ec->netwm.extra_types)
{
@ -700,6 +707,7 @@ e_hints_window_state_update(E_Client *ec,
{
#ifdef WAYLAND_ONLY
#else
if (!e_pixmap_is_x(ec->pixmap)) return;
switch (state)
{
case ECORE_X_WINDOW_STATE_ICONIFIED:
@ -974,6 +982,7 @@ e_hints_window_state_get(E_Client *ec)
unsigned int i, num;
Ecore_X_Window_State *state;
if (!e_pixmap_is_x(ec->pixmap)) return;
ec->netwm.state.modal = 0;
ec->netwm.state.sticky = 0;
ec->netwm.state.maximized_v = 0;
@ -1055,11 +1064,12 @@ e_hints_window_state_get(E_Client *ec)
}
EAPI void
e_hints_allowed_action_update(E_Client *ec __UNUSED__,
e_hints_allowed_action_update(E_Client *ec,
Ecore_X_Action action)
{
#ifdef WAYLAND_ONLY
#else
if (!e_pixmap_is_x(ec->pixmap)) return;
switch (action)
{
case ECORE_X_ACTION_MOVE:
@ -1110,6 +1120,7 @@ e_hints_allowed_action_get(E_Client *ec)
unsigned int i;
unsigned int num;
if (!e_pixmap_is_x(ec->pixmap)) return;
ec->netwm.action.move = 0;
ec->netwm.action.resize = 0;
ec->netwm.action.minimize = 0;
@ -1197,6 +1208,7 @@ e_hints_window_visible_set(E_Client *ec)
{
#ifdef WAYLAND_ONLY
#else
if (!e_pixmap_is_x(ec->pixmap)) return;
if (ec->icccm.state != ECORE_X_WINDOW_STATE_HINT_NORMAL)
{
ecore_x_icccm_state_set(e_client_util_win_get(ec), ECORE_X_WINDOW_STATE_HINT_NORMAL);
@ -1217,6 +1229,7 @@ e_hints_window_iconic_set(E_Client *ec)
{
#ifdef WAYLAND_ONLY
#else
if (!e_pixmap_is_x(ec->pixmap)) return;
if (ec->icccm.state != ECORE_X_WINDOW_STATE_HINT_ICONIC)
{
ecore_x_icccm_state_set(e_client_util_win_get(ec), ECORE_X_WINDOW_STATE_HINT_ICONIC);
@ -1237,6 +1250,7 @@ e_hints_window_hidden_set(E_Client *ec)
{
#ifdef WAYLAND_ONLY
#else
if (!e_pixmap_is_x(ec->pixmap)) return;
if (ec->icccm.state != ECORE_X_WINDOW_STATE_HINT_WITHDRAWN)
{
ecore_x_icccm_state_set(e_client_util_win_get(ec), ECORE_X_WINDOW_STATE_HINT_WITHDRAWN);
@ -1257,6 +1271,7 @@ e_hints_window_shaded_set(E_Client *ec, int on)
{
#ifdef WAYLAND_ONLY
#else
if (!e_pixmap_is_x(ec->pixmap)) return;
if ((!ec->netwm.state.shaded) && (on))
{
ec->netwm.update.state = 1;
@ -1282,6 +1297,7 @@ e_hints_window_shade_direction_set(E_Client *ec, E_Direction dir)
{
#ifdef WAYLAND_ONLY
#else
if (!e_pixmap_is_x(ec->pixmap)) return;
ecore_x_window_prop_card32_set(e_client_util_win_get(ec), E_ATOM_SHADE_DIRECTION, &dir, 1);
#endif
}
@ -1294,6 +1310,7 @@ e_hints_window_shade_direction_get(E_Client *ec)
int ret;
E_Direction dir;
if (!e_pixmap_is_x(ec->pixmap)) return E_DIRECTION_UP;
ret = ecore_x_window_prop_card32_get(e_client_util_win_get(ec),
E_ATOM_SHADE_DIRECTION,
&dir, 1);
@ -1311,6 +1328,7 @@ e_hints_window_size_set(E_Client *ec)
#else
unsigned int sizes[4];
if (!e_pixmap_is_x(ec->pixmap)) return;
sizes[0] = ec->x;
sizes[1] = ec->y;
sizes[2] = ec->w;
@ -1324,6 +1342,7 @@ e_hints_window_size_unset(E_Client *ec)
{
#ifdef WAYLAND_ONLY
#else
if (!e_pixmap_is_x(ec->pixmap)) return;
ecore_x_window_prop_property_del(e_client_util_win_get(ec), E_ATOM_BORDER_SIZE);
#endif
}
@ -1336,6 +1355,7 @@ e_hints_window_size_get(E_Client *ec)
int ret;
unsigned int sizes[4];
if (!e_pixmap_is_x(ec->pixmap)) return 0;
memset(sizes, 0, sizeof(sizes));
ret = ecore_x_window_prop_card32_get(e_client_util_win_get(ec), E_ATOM_BORDER_SIZE,
sizes, 4);
@ -1356,6 +1376,7 @@ e_hints_window_maximized_set(E_Client *ec, int horizontal, int vertical)
{
#ifdef WAYLAND_ONLY
#else
if (!e_pixmap_is_x(ec->pixmap)) return;
if ((horizontal) && (!ec->netwm.state.maximized_h))
{
ec->netwm.update.state = 1;
@ -1389,6 +1410,7 @@ e_hints_window_fullscreen_set(E_Client *ec,
{
#ifdef WAYLAND_ONLY
#else
if (!e_pixmap_is_x(ec->pixmap)) return;
if ((!ec->netwm.state.fullscreen) && (on))
{
ec->netwm.update.state = 1;
@ -1409,6 +1431,7 @@ e_hints_window_sticky_set(E_Client *ec, int on)
{
#ifdef WAYLAND_ONLY
#else
if (!e_pixmap_is_x(ec->pixmap)) return;
if ((!ec->netwm.state.sticky) && (on))
{
ec->netwm.update.state = 1;
@ -1429,6 +1452,7 @@ e_hints_window_stacking_set(E_Client *ec, E_Stacking stacking)
{
#ifdef WAYLAND_ONLY
#else
if (!e_pixmap_is_x(ec->pixmap)) return;
if (ec->netwm.state.stacking == stacking) return;
ec->netwm.update.state = 1;
ec->netwm.state.stacking = stacking;
@ -1451,6 +1475,7 @@ e_hints_window_desktop_set(E_Client *ec)
* a calloc()'d struct and thus has to have been set to 0. hell even
* e_client.c explicitly sets it to 0 on creation of the border object.
*/
if (!e_pixmap_is_x(ec->pixmap)) return;
deskpos[0] = ec->desk->x;
deskpos[1] = ec->desk->y;
ecore_x_window_prop_card32_set(e_client_util_win_get(ec), E_ATOM_DESK, deskpos, 2);
@ -1472,6 +1497,7 @@ e_hints_window_e_state_get(E_Client *ec)
int num = 0, i = 0;
int size = 0;
if (!e_pixmap_is_x(ec->pixmap)) return;
memset(state, 0, sizeof(state));
/* ugly, but avoids possible future overflow if more states are added */
@ -1503,6 +1529,7 @@ e_hints_window_qtopia_soft_menu_get(E_Client *ec)
#else
unsigned int val;
if (!e_pixmap_is_x(ec->pixmap)) return;
if (ecore_x_window_prop_card32_get(e_client_util_win_get(ec), ATM__QTOPIA_SOFT_MENU, &val, 1))
ec->qtopia.soft_menu = val;
else
@ -1517,6 +1544,7 @@ e_hints_window_qtopia_soft_menus_get(E_Client *ec)
#else
unsigned int val;
if (!e_pixmap_is_x(ec->pixmap)) return;
if (ecore_x_window_prop_card32_get(e_client_util_win_get(ec), ATM__QTOPIA_SOFT_MENUS, &val, 1))
ec->qtopia.soft_menus = val;
else
@ -1530,6 +1558,8 @@ e_hints_window_virtual_keyboard_state_get(E_Client *ec)
#ifdef WAYLAND_ONLY
#else
Ecore_X_Atom atom = 0;
if (!e_pixmap_is_x(ec->pixmap)) return;
ec->vkbd.state = ecore_x_e_virtual_keyboard_state_get(e_client_util_win_get(ec));
if (ecore_x_window_prop_atom_get(e_client_util_win_get(ec),
ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_STATE,
@ -1545,6 +1575,7 @@ e_hints_window_virtual_keyboard_get(E_Client *ec)
{
#ifdef WAYLAND_ONLY
#else
if (!e_pixmap_is_x(ec->pixmap)) return;
ec->vkbd.vkbd = ecore_x_e_virtual_keyboard_get(e_client_util_win_get(ec));
#endif
}

View File

@ -7,6 +7,9 @@
#include "e_error.h"
#include "e_zone.h"
#include "e_desk.h"
#ifndef WAYLAND_ONLY
# include "e_comp_x.h"
#endif
#include "e_pixmap.h"
#include "e_comp_object.h"
#include "e_client.h"
@ -21,16 +24,13 @@
#include "e_init.h"
#include "e_int_menus.h"
#include "e_module.h"
#include "e_atoms.h"
#include "e_canvas.h"
#include "e_focus.h"
#include "e_place.h"
#include "e_resist.h"
#include "e_startup.h"
#include "e_hints.h"
#include "e_signals.h"
#include "e_xinerama.h"
#include "e_randr.h"
#include "e_table.h"
#include "e_layout.h"
#include "e_font.h"

View File

@ -218,7 +218,7 @@ e_int_client_menu_create(E_Client *ec)
}
EAPI void
e_int_client_menu_show(E_Client *ec, Evas_Coord x, Evas_Coord y, int key, Ecore_X_Time timestamp)
e_int_client_menu_show(E_Client *ec, Evas_Coord x, Evas_Coord y, int key, unsigned int timestamp)
{
e_int_client_menu_create(ec);
if (key)

View File

@ -15,7 +15,7 @@ EAPI E_Client_Menu_Hook *e_int_client_menu_hook_add(E_Client_Menu_Hook_Cb cb, co
EAPI void e_int_client_menu_hook_del(E_Client_Menu_Hook *hook);
EAPI void e_int_client_menu_hooks_clear(void);
EAPI void e_int_client_menu_create(E_Client *ec);
EAPI void e_int_client_menu_show(E_Client *ec, Evas_Coord x, Evas_Coord y, int key, Ecore_X_Time timestamp);
EAPI void e_int_client_menu_show(E_Client *ec, Evas_Coord x, Evas_Coord y, int key, unsigned int timestamp);
EAPI void e_int_client_menu_del(E_Client *ec);
#endif

View File

@ -195,19 +195,19 @@ _create_data(E_Dialog *cfd, E_Client *ec)
if (cfdata->client->icccm.window_group != 0)
{
snprintf(buf, sizeof(buf), "0x%08x",
cfdata->client->icccm.window_group);
(unsigned int)cfdata->client->icccm.window_group);
cfdata->icccm.window_group = strdup(buf);
}
if (cfdata->client->icccm.transient_for != 0)
{
snprintf(buf, sizeof(buf), "0x%08x",
cfdata->client->icccm.transient_for);
(unsigned int)cfdata->client->icccm.transient_for);
cfdata->icccm.transient_for = strdup(buf);
}
if (cfdata->client->icccm.client_leader != 0)
{
snprintf(buf, sizeof(buf), "0x%08x",
cfdata->client->icccm.client_leader);
(unsigned int)cfdata->client->icccm.client_leader);
cfdata->icccm.client_leader = strdup(buf);
}
switch (cfdata->client->icccm.gravity)

View File

@ -6,8 +6,8 @@ typedef struct _Match_Config
E_Comp_Match match;
E_Config_Dialog *cfd;
char *title, *name, *clas, *role;
int borderless, dialog, accepts_focus, vkbd;
int quickpanel, argb, fullscreen, modal;
int borderless, dialog, accepts_focus;
int argb, fullscreen, modal;
} Match_Config;
struct _E_Config_Dialog_Data
@ -261,8 +261,6 @@ _edit_ok(void *d1, void *d2)
m->match.borderless = m->borderless;
m->match.dialog = m->dialog;
m->match.accepts_focus = m->accepts_focus;
m->match.vkbd = m->vkbd;
m->match.quickpanel = m->quickpanel;
m->match.argb = m->argb;
m->match.fullscreen = m->fullscreen;
m->match.modal = m->modal;
@ -408,8 +406,6 @@ _create_edit_frame(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdat
m->borderless = m->match.borderless;
m->dialog = m->match.dialog;
m->accepts_focus = m->match.accepts_focus;
m->vkbd = m->match.vkbd;
m->quickpanel = m->match.quickpanel;
m->argb = m->match.argb;
m->fullscreen = m->match.fullscreen;
m->modal = m->match.modal;
@ -463,32 +459,6 @@ _create_edit_frame(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdat
e_widget_table_object_append(tab2, o, 3, row, 1, 1, 0, 0, 0, 0);
row++;
}
if (cfdata->edit_il == cfdata->borders_il)
{
lb = e_widget_label_add(evas, _("Virtual Keyboard"));
e_widget_table_object_append(tab2, lb, 0, row, 1, 1, 1, 0, 1, 0);
rg = e_widget_radio_group_new(&m->vkbd);
o = e_widget_radio_add(evas, NULL, 0, rg);
e_widget_table_object_append(tab2, o, 1, row, 1, 1, 0, 0, 0, 0);
o = e_widget_radio_add(evas, NULL, 1, rg);
e_widget_table_object_append(tab2, o, 2, row, 1, 1, 0, 0, 0, 0);
o = e_widget_radio_add(evas, NULL, -1, rg);
e_widget_table_object_append(tab2, o, 3, row, 1, 1, 0, 0, 0, 0);
row++;
}
if (cfdata->edit_il == cfdata->borders_il)
{
lb = e_widget_label_add(evas, _("Quick Panel"));
e_widget_table_object_append(tab2, lb, 0, row, 1, 1, 1, 0, 1, 0);
rg = e_widget_radio_group_new(&m->quickpanel);
o = e_widget_radio_add(evas, NULL, 0, rg);
e_widget_table_object_append(tab2, o, 1, row, 1, 1, 0, 0, 0, 0);
o = e_widget_radio_add(evas, NULL, 1, rg);
e_widget_table_object_append(tab2, o, 2, row, 1, 1, 0, 0, 0, 0);
o = e_widget_radio_add(evas, NULL, -1, rg);
e_widget_table_object_append(tab2, o, 3, row, 1, 1, 0, 0, 0, 0);
row++;
}
lb = e_widget_label_add(evas, _("ARGB"));
e_widget_table_object_append(tab2, lb, 0, row, 1, 1, 1, 0, 1, 0);
rg = e_widget_radio_group_new(&m->argb);

View File

@ -476,15 +476,6 @@ main(int argc, char **argv)
TS("E_Config Init Done");
_e_main_shutdown_push(e_config_shutdown);
TS("E_Randr Init");
if (!e_randr_init())
{
e_error_message_show(_("Enlightenment cannot initialize E_Randr!\n"));
}
else
_e_main_shutdown_push(e_randr_shutdown);
TS("E_Randr Init Done");
TS("E_Env Init");
if (!e_env_init())
{
@ -608,6 +599,18 @@ main(int argc, char **argv)
e_menu_init();
e_exehist_init();
if (e_config->show_splash)
e_init_status_set(_("Setup Screensaver"));
TS("E_Screensaver Init");
if (!e_screensaver_init())
{
e_error_message_show(_("Enlightenment cannot configure the X screensaver.\n"));
_e_main_shutdown(-1);
}
TS("E_Screensaver Init Done");
_e_main_shutdown_push(e_screensaver_shutdown);
if (e_config->show_splash)
e_init_status_set(_("Setup Screens"));
TS("Screens Init");
@ -679,17 +682,6 @@ main(int argc, char **argv)
}
TS("E_Backlight Init Done");
if (e_config->show_splash)
e_init_status_set(_("Setup Screensaver"));
TS("E_Screensaver Init");
if (!e_screensaver_init())
{
e_error_message_show(_("Enlightenment cannot configure the X screensaver.\n"));
_e_main_shutdown(-1);
}
TS("E_Screensaver Init Done");
_e_main_shutdown_push(e_screensaver_shutdown);
if (e_config->show_splash)
e_init_status_set(_("Setup DPMS"));
TS("E_Dpms Init");

View File

@ -184,7 +184,8 @@ e_managers_keys_grab(void)
EINA_LIST_FOREACH(managers, l, man)
{
e_bindings_key_grab(E_BINDING_CONTEXT_ANY, man->root);
if (man->root)
e_bindings_key_grab(E_BINDING_CONTEXT_ANY, man->root);
}
ecore_event_add(E_EVENT_MANAGER_KEYS_GRAB, NULL, NULL, NULL);
}
@ -197,6 +198,7 @@ e_managers_keys_ungrab(void)
EINA_LIST_FOREACH(managers, l, man)
{
e_bindings_key_ungrab(E_BINDING_CONTEXT_ANY, man->root);
if (man->root)
e_bindings_key_ungrab(E_BINDING_CONTEXT_ANY, man->root);
}
}

View File

@ -83,13 +83,13 @@ static void _e_menu_category_free_cb(E_Menu_Category *cat);
static void _e_menu_cb_mouse_evas_down(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED);
/* local subsystem globals */
static Ecore_X_Window _e_menu_win = 0;
static Ecore_Window _e_menu_win = 0;
static Eina_List *_e_active_menus = NULL;
static E_Menu_Item *_e_active_menu_item = NULL;
static E_Menu_Item *_e_prev_active_menu_item = NULL;
/*static Eina_Hash *_e_menu_category_items = NULL;*/
static Eina_Hash *_e_menu_categories = NULL;
static Ecore_X_Time _e_menu_activate_time = 0;
static unsigned int _e_menu_activate_time = 0;
static int _e_menu_activate_floating = 0;
static int _e_menu_activate_maybe_drag = 0;
static int _e_menu_activate_dragging = 0;
@ -97,14 +97,14 @@ static Ecore_Animator *_e_menu_scroll_animator = NULL;
static double _e_menu_scroll_start = 0.0;
static int _e_menu_x = 0;
static int _e_menu_y = 0;
static Ecore_X_Time _e_menu_time = 0;
static unsigned int _e_menu_time = 0;
static int _e_menu_autoscroll_x = 0;
static int _e_menu_autoscroll_y = 0;
static Eina_List *handlers = NULL;
static Eina_Bool _e_menu_lock = EINA_FALSE;
static void
_mouse_up_feed(Evas *e, Ecore_X_Time activate_time)
_mouse_up_feed(Evas *e, unsigned int activate_time)
{
int button_mask, i;
@ -295,7 +295,7 @@ e_menu_activate_key(E_Menu *m, E_Zone *zone, int x, int y, int w, int h, int dir
}
EAPI void
e_menu_activate_mouse(E_Menu *m, E_Zone *zone, int x, int y, int w, int h, int dir, Ecore_X_Time activate_time)
e_menu_activate_mouse(E_Menu *m, E_Zone *zone, int x, int y, int w, int h, int dir, unsigned int activate_time)
{
E_Menu_Item *pmi;
@ -1211,7 +1211,7 @@ e_menu_idler_before(void)
}
}
EAPI Ecore_X_Window
EAPI Ecore_Window
e_menu_grab_window_get(void)
{
return _e_menu_win;
@ -2839,7 +2839,7 @@ static Eina_Bool
_e_menu_cb_mouse_up(void *data __UNUSED__, int type __UNUSED__, void *event)
{
Ecore_Event_Mouse_Button *ev;
Ecore_X_Time t;
unsigned int t;
int ret = 0;
ev = event;

View File

@ -157,7 +157,7 @@ EINTERN int e_menu_shutdown(void);
EAPI void e_menu_hide_all(void);
EAPI E_Menu *e_menu_new(void);
EAPI void e_menu_activate_key(E_Menu *m, E_Zone *zone, int x, int y, int w, int h, int dir);
EAPI void e_menu_activate_mouse(E_Menu *m, E_Zone *zone, int x, int y, int w, int h, int dir, Ecore_X_Time activate_time);
EAPI void e_menu_activate_mouse(E_Menu *m, E_Zone *zone, int x, int y, int w, int h, int dir, unsigned int activate_time);
EAPI void e_menu_activate(E_Menu *m, E_Zone *zone, int x, int y, int w, int h, int dir);
EAPI void e_menu_deactivate(E_Menu *m);
EAPI int e_menu_freeze(E_Menu *m);
@ -203,7 +203,7 @@ EAPI void e_menu_item_disabled_set(E_Menu_Item *mi, int disable);
EAPI void e_menu_idler_before(void);
EAPI Ecore_X_Window e_menu_grab_window_get(void);
EAPI Ecore_Window e_menu_grab_window_get(void);
#endif
#endif

View File

@ -151,16 +151,16 @@ e_pixmap_free(E_Pixmap *cp)
e_pixmap_image_clear(cp, 0);
switch (cp->type)
{
#ifndef WAYLAND_ONLY
case E_PIXMAP_TYPE_X:
#ifndef WAYLAND_ONLY
if (cp->parent) eina_hash_set(pixmaps[cp->type], &cp->parent, NULL);
break;
#endif
#ifdef HAVE_WAYLAND_CLIENTS
break;
case E_PIXMAP_TYPE_WL:
#ifdef HAVE_WAYLAND_CLIENTS
if (cp->parent) eina_hash_set(pixmaps[cp->type], &cp->parent, NULL);
break;
#endif
break;
}
eina_hash_del_by_key(pixmaps[cp->type], &cp->win);
return 0;
@ -190,8 +190,8 @@ e_pixmap_new(E_Pixmap_Type type, ...)
va_start(l, type);
switch (type)
{
#ifndef WAYLAND_ONLY
case E_PIXMAP_TYPE_X:
#ifndef WAYLAND_ONLY
xwin = va_arg(l, uint32_t);
if (pixmaps[type])
{
@ -207,10 +207,10 @@ e_pixmap_new(E_Pixmap_Type type, ...)
cp = _e_pixmap_new(type);
cp->win = xwin;
eina_hash_add(pixmaps[type], &xwin, cp);
break;
#endif
#ifdef HAVE_WAYLAND_CLIENTS
break;
case E_PIXMAP_TYPE_WL:
#ifdef HAVE_WAYLAND_CLIENTS
id = va_arg(l, unsigned int);
if (pixmaps[type])
{
@ -226,8 +226,8 @@ e_pixmap_new(E_Pixmap_Type type, ...)
cp = _e_pixmap_new(type);
cp->win = id;
eina_hash_add(pixmaps[type], &id, cp);
break;
#endif
break;
}
va_end(l);
return cp;
@ -319,8 +319,8 @@ e_pixmap_refresh(E_Pixmap *cp)
if (!cp->dirty) return EINA_TRUE;
switch (cp->type)
{
#ifndef WAYLAND_ONLY
case E_PIXMAP_TYPE_X:
#ifndef WAYLAND_ONLY
{
uint32_t pixmap;
@ -347,10 +347,10 @@ e_pixmap_refresh(E_Pixmap *cp)
else
ecore_x_pixmap_free(pixmap);
}
break;
#endif
#ifdef HAVE_WAYLAND_CLIENTS
break;
case E_PIXMAP_TYPE_WL:
#ifdef HAVE_WAYLAND_CLIENTS
{
E_Wayland_Surface *ews;
E_Wayland_Buffer *buff;
@ -364,9 +364,9 @@ e_pixmap_refresh(E_Pixmap *cp)
cp->w = wl_shm_buffer_get_width(shm_buffer);
cp->h = wl_shm_buffer_get_height(shm_buffer);
success = (cp->w > 0) && (cp->h > 0);
break;
}
#endif
break;
default: break;
}
if (success)
@ -470,27 +470,27 @@ e_pixmap_native_surface_init(E_Pixmap *cp, Evas_Native_Surface *ns)
ns->version = EVAS_NATIVE_SURFACE_VERSION;
switch (cp->type)
{
#ifndef WAYLAND_ONLY
case E_PIXMAP_TYPE_X:
#ifndef WAYLAND_ONLY
ns->type = EVAS_NATIVE_SURFACE_X11;
ns->data.x11.visual = cp->visual;
ns->data.x11.pixmap = cp->pixmap;
break;
#endif
#ifdef HAVE_WAYLAND_CLIENTS
break;
case E_PIXMAP_TYPE_WL:
return EINA_FALSE;
#ifdef HAVE_WAYLAND_CLIENTS
#warning FIXME WL NATIVE SURFACES!
ns->type = EVAS_NATIVE_SURFACE_OPENGL;
ns->version = EVAS_NATIVE_SURFACE_VERSION;
ns->data.opengl.texture_id = NULL;
ns->data.opengl.framebuffer_id = NULL;
ns->data.opengl.texture_id = 0;
ns->data.opengl.framebuffer_id = 0;
ns->data.opengl.x = 0;
ns->data.opengl.y = 0;
ns->data.opengl.w = cp->w;
ns->data.opengl.h = cp->h;
break;
#endif
break;
default:
break;
}
@ -506,8 +506,8 @@ e_pixmap_image_clear(E_Pixmap *cp, Eina_Bool cache)
cp->failures = 0;
switch (cp->type)
{
#ifndef WAYLAND_ONLY
case E_PIXMAP_TYPE_X:
#ifndef WAYLAND_ONLY
if (cache)
{
void *i;
@ -520,10 +520,10 @@ e_pixmap_image_clear(E_Pixmap *cp, Eina_Bool cache)
cp->images_cache = eina_list_append(cp->images_cache, cp->image);
cp->image = NULL;
}
break;
#endif
#ifdef HAVE_WAYLAND_CLIENTS
break;
case E_PIXMAP_TYPE_WL: //lel wayland
#ifdef HAVE_WAYLAND_CLIENTS
if (cache)
{
if (cp->copy_image)
@ -547,6 +547,7 @@ e_pixmap_image_clear(E_Pixmap *cp, Eina_Bool cache)
cp->copy_image = 1;
}
#endif
break;
default:
break;
}
@ -565,16 +566,16 @@ e_pixmap_image_refresh(E_Pixmap *cp)
}
switch (cp->type)
{
#ifndef WAYLAND_ONLY
case E_PIXMAP_TYPE_X:
#ifndef WAYLAND_ONLY
if ((!cp->visual) || (!cp->client->depth)) return EINA_FALSE;
cp->image = ecore_x_image_new(cp->w, cp->h, cp->visual, cp->client->depth);
if (cp->image)
cp->image_argb = ecore_x_image_is_argb32_get(cp->image);
break;
#endif
#ifdef HAVE_WAYLAND_CLIENTS
break;
case E_PIXMAP_TYPE_WL:
#ifdef HAVE_WAYLAND_CLIENTS
{
struct wl_shm_buffer *shm_buffer;
@ -586,9 +587,9 @@ e_pixmap_image_refresh(E_Pixmap *cp)
if (cp->h != wl_shm_buffer_get_height(shm_buffer))
CRI("ACK!");
cp->image = wl_shm_buffer_get_data(shm_buffer);
break;
}
#endif
break;
default:
break;
}
@ -616,15 +617,17 @@ e_pixmap_image_data_get(E_Pixmap *cp)
if (!cp->image) return NULL;
switch (cp->type)
{
#ifndef WAYLAND_ONLY
case E_PIXMAP_TYPE_X:
#ifndef WAYLAND_ONLY
return ecore_x_image_data_get(cp->image, &cp->ibpl, NULL, &cp->ibpp);
#endif
#ifdef HAVE_WAYLAND_CLIENTS
break;
case E_PIXMAP_TYPE_WL:
#ifdef HAVE_WAYLAND_CLIENTS
cp->copy_image = 0;
return cp->image;
#endif
break;
default:
break;
}

View File

@ -81,6 +81,7 @@ e_pointer_window_new(Ecore_X_Window win,
{
E_Pointer *p = NULL;
if (!win) return NULL;
p = E_OBJECT_ALLOC(E_Pointer, E_POINTER_TYPE, _e_pointer_free);
if (!p) return NULL;
@ -225,6 +226,7 @@ e_pointer_idler_before(void)
if (!p->e_cursor) continue;
if (!p->evas) continue;
if (!p->win) continue;
updates = evas_render_updates(p->evas);
if ((updates) || (p->hot.update))

View File

@ -3,7 +3,6 @@
static Ecore_Event_Handler *_e_screensaver_handler_on = NULL;
static Ecore_Event_Handler *_e_screensaver_handler_off = NULL;
static Ecore_Event_Handler *_e_screensaver_handler_config_mode = NULL;
static Ecore_Event_Handler *_e_screensaver_handler_screensaver_notify = NULL;
static Ecore_Event_Handler *_e_screensaver_handler_border_fullscreen = NULL;
static Ecore_Event_Handler *_e_screensaver_handler_border_unfullscreen = NULL;
static Ecore_Event_Handler *_e_screensaver_handler_border_remove = NULL;
@ -83,14 +82,19 @@ e_screensaver_update(void)
changed = EINA_TRUE;
}
if (changed) ecore_x_screensaver_set(timeout, interval, blanking, expose);
if (changed)
#ifdef WAYLAND_ONLY
#else
ecore_x_screensaver_set(timeout, interval, blanking, expose);
#endif
}
EAPI void
e_screensaver_force_update(void)
{
int timeout = e_screensaver_timeout_get(EINA_TRUE);
#ifdef WAYLAND_ONLY
#else
ecore_x_screensaver_set(timeout + 10,
0,
// e_config->screensaver_interval,
@ -101,6 +105,7 @@ e_screensaver_force_update(void)
// e_config->screensaver_interval,
e_config->screensaver_blanking,
e_config->screensaver_expose);
#endif
}
static Eina_Bool
@ -274,80 +279,6 @@ _e_screensaver_handler_screensaver_off_cb(void *data __UNUSED__, int type __UNUS
return ECORE_CALLBACK_PASS_ON;
}
static Ecore_Timer *idle_timer = NULL;
static Eina_Bool saver_on = EINA_FALSE;
static Eina_Bool dimmed = EINA_FALSE;
static Eina_Bool
_e_screensaver_idle_timer_cb(void *d __UNUSED__)
{
ecore_event_add(E_EVENT_SCREENSAVER_ON, NULL, NULL, NULL);
idle_timer = NULL;
return EINA_FALSE;
}
static Eina_Bool
_e_screensaver_handler_screensaver_notify_cb(void *data __UNUSED__, int type __UNUSED__, void *event)
{
Ecore_X_Event_Screensaver_Notify *e = event;
if ((e->on) && (!saver_on))
{
saver_on = EINA_TRUE;
if (e_config->backlight.idle_dim)
{
double t = e_config->screensaver_timeout -
e_config->backlight.timer;
if (t < 1.0) t = 1.0;
if (idle_timer)
{
ecore_timer_del(idle_timer);
idle_timer = NULL;
}
if (e_config->screensaver_enable)
idle_timer = ecore_timer_add
(t, _e_screensaver_idle_timer_cb, NULL);
if (e_backlight_mode_get(NULL) != E_BACKLIGHT_MODE_DIM)
{
e_backlight_mode_set(NULL, E_BACKLIGHT_MODE_DIM);
dimmed = EINA_TRUE;
}
}
else
{
if (!_e_screensaver_on)
ecore_event_add(E_EVENT_SCREENSAVER_ON, NULL, NULL, NULL);
}
}
else if ((!e->on) && (saver_on))
{
saver_on = EINA_FALSE;
if (idle_timer)
{
ecore_timer_del(idle_timer);
idle_timer = NULL;
if (e_config->backlight.idle_dim)
{
if (e_backlight_mode_get(NULL) != E_BACKLIGHT_MODE_NORMAL)
e_backlight_mode_set(NULL, E_BACKLIGHT_MODE_NORMAL);
}
}
else
{
if (dimmed)
{
if (e_backlight_mode_get(NULL) != E_BACKLIGHT_MODE_NORMAL)
e_backlight_mode_set(NULL, E_BACKLIGHT_MODE_NORMAL);
dimmed = EINA_FALSE;
}
if (_e_screensaver_on)
ecore_event_add(E_EVENT_SCREENSAVER_OFF, NULL, NULL, NULL);
}
}
return ECORE_CALLBACK_PASS_ON;
}
static Eina_Bool
_e_screensaver_handler_border_fullscreen_check_cb(void *data __UNUSED__, int type __UNUSED__, void *event __UNUSED__)
{
@ -379,16 +310,10 @@ e_screensaver_preinit(void)
EINTERN int
e_screensaver_init(void)
{
ecore_x_screensaver_custom_blanking_enable();
_e_screensaver_handler_on = ecore_event_handler_add
(E_EVENT_SCREENSAVER_ON, _e_screensaver_handler_screensaver_on_cb, NULL);
_e_screensaver_handler_off = ecore_event_handler_add
(E_EVENT_SCREENSAVER_OFF, _e_screensaver_handler_screensaver_off_cb, NULL);
_e_screensaver_handler_screensaver_notify = ecore_event_handler_add
(ECORE_X_EVENT_SCREENSAVER_NOTIFY, _e_screensaver_handler_screensaver_notify_cb, NULL);
_e_screensaver_handler_config_mode = ecore_event_handler_add
(E_EVENT_CONFIG_MODE_CHANGED, _e_screensaver_handler_config_mode_cb, NULL);
@ -410,11 +335,6 @@ e_screensaver_init(void)
_e_screensaver_handler_powersave = ecore_event_handler_add
(E_EVENT_POWERSAVE_UPDATE, _e_screensaver_handler_powersave_cb, NULL);
_e_screensaver_timeout = ecore_x_screensaver_timeout_get();
// _e_screensaver_interval = ecore_x_screensaver_interval_get();
_e_screensaver_blanking = ecore_x_screensaver_blank_get();
_e_screensaver_expose = ecore_x_screensaver_expose_get();
e_screensaver_force_update();
return 1;
@ -441,8 +361,6 @@ e_screensaver_shutdown(void)
_e_screensaver_suspend_timer = NULL;
}
ecore_x_screensaver_custom_blanking_disable();
if (_e_screensaver_handler_powersave)
{
ecore_event_handler_del(_e_screensaver_handler_powersave);
@ -455,12 +373,6 @@ e_screensaver_shutdown(void)
_e_screensaver_handler_config_mode = NULL;
}
if (_e_screensaver_handler_screensaver_notify)
{
ecore_event_handler_del(_e_screensaver_handler_screensaver_notify);
_e_screensaver_handler_screensaver_notify = NULL;
}
if (_e_screensaver_handler_border_fullscreen)
{
ecore_event_handler_del(_e_screensaver_handler_border_fullscreen);
@ -506,3 +418,17 @@ e_screensaver_shutdown(void)
return 1;
}
EAPI void
e_screensaver_attrs_set(int timeout, int blanking, int expose)
{
_e_screensaver_timeout = timeout;
// _e_screensaver_interval = ecore_x_screensaver_interval_get();
_e_screensaver_blanking = blanking;
_e_screensaver_expose = expose;
}
EAPI Eina_Bool
e_screensaver_on_get(void)
{
return _e_screensaver_on;
}

View File

@ -11,7 +11,8 @@ EAPI void e_screensaver_update(void);
EAPI void e_screensaver_force_update(void);
EAPI int e_screensaver_timeout_get(Eina_Bool use_idle);
EAPI void e_screensaver_attrs_set(int timeout, int blanking, int expose);
EAPI Eina_Bool e_screensaver_on_get(void);
EAPI extern int E_EVENT_SCREENSAVER_ON;
EAPI extern int E_EVENT_SCREENSAVER_OFF;

View File

@ -1,4 +1,8 @@
#include "e.h"
#ifdef HAVE_WAYLAND_CLIENTS
# include <Ecore_Wayland.h>
#endif
/* local subsystem functions */
static void _e_win_free(E_Win *win);
@ -283,7 +287,7 @@ e_win_new(E_Comp *c)
win->comp = c;
win->ecore_evas = e_canvas_new(c->man->root,
0, 0, 1, 1, 1, 0,
(Ecore_X_Window*)&win->evas_win);
&win->evas_win);
e_canvas_add(win->ecore_evas);
ecore_evas_data_set(win->ecore_evas, "E_Win", win);
ecore_evas_callback_move_set(win->ecore_evas, _e_win_cb_move);
@ -314,7 +318,9 @@ e_win_new(E_Comp *c)
win->max_aspect = 0.0;
wins = eina_list_append(wins, win);
win->pointer = e_pointer_window_new(win->evas_win, 1);
#warning FIXME WL POINTERS
if (c->man->root)
win->pointer = e_pointer_window_new(win->evas_win, 1);
return win;
}
@ -323,21 +329,34 @@ e_win_show(E_Win *win)
{
E_OBJECT_CHECK(win);
E_OBJECT_TYPE_CHECK(win, E_WIN_TYPE);
ecore_evas_show(win->ecore_evas);
if (!win->client)
{
win->client = e_client_new(win->comp, e_pixmap_new(E_PIXMAP_TYPE_X, win->evas_win), 1, 1);
// dont need this - special stuff
// win->client->ignore_first_unmap = 1;
#ifdef HAVE_WAYLAND_CLIENTS
if (!strncmp(ecore_evas_engine_name_get(win->ecore_evas), "wayland", 7))
{
Ecore_Wl_Window *wl_win;
wl_win = ecore_evas_wayland_window_get(win->ecore_evas);
win->client = e_client_new(win->comp, e_pixmap_new(E_PIXMAP_TYPE_WL, wl_win->surface_id), 1, 1);
}
else
#endif
win->client = e_client_new(win->comp, e_pixmap_new(E_PIXMAP_TYPE_X, win->evas_win), 1, 1);
EINA_SAFETY_ON_NULL_RETURN(win->client);
if (!win->placed)
win->client->re_manage = 0;
win->client->internal_ecore_evas = win->ecore_evas;
if (win->state.no_remember) win->client->internal_no_remember = 1;
win->client->internal_no_reopen = win->state.no_reopen;
win->client->changes.size = win->client->changes.pos = 1;
win->client->client.w = win->client->w = win->w;
win->client->client.h = win->client->h = win->h;
win->client->take_focus = win->client->changes.size = win->client->changes.pos = 1;
EC_CHANGED(win->client);
}
_e_win_prop_update(win);
ecore_evas_show(win->ecore_evas);
if (win->state.centered)
e_comp_object_util_center(win->client->frame);
}
EAPI void

View File

@ -24,7 +24,7 @@ struct _E_Win
E_Client *client;
Ecore_Evas *ecore_evas;
Evas *evas;
Ecore_Window evas_win;
Ecore_Window evas_win;
unsigned char placed : 1;
int min_w, min_h, max_w, max_h, base_w, base_h;
int step_x, step_y;

View File

@ -7,7 +7,7 @@ conf_bindingspkgdir = $(MDIR)/conf_bindings/$(MODULE_ARCH)
conf_bindingspkg_LTLIBRARIES = src/modules/conf_bindings/module.la
src_modules_conf_bindings_module_la_LIBADD = $(MOD_LIBS)
src_modules_conf_bindings_module_la_CPPFLAGS = $(MOD_CPPFLAGS)
src_modules_conf_bindings_module_la_CPPFLAGS = $(MOD_CPPFLAGS) -DNEED_X=1
src_modules_conf_bindings_module_la_LDFLAGS = $(MOD_LDFLAGS)
src_modules_conf_bindings_module_la_SOURCES = src/modules/conf_bindings/e_mod_main.c \
src/modules/conf_bindings/e_mod_main.h \

View File

@ -7,7 +7,7 @@ conf_displaypkgdir = $(MDIR)/conf_display/$(MODULE_ARCH)
conf_displaypkg_LTLIBRARIES = src/modules/conf_display/module.la
src_modules_conf_display_module_la_LIBADD = $(MOD_LIBS)
src_modules_conf_display_module_la_CPPFLAGS = $(MOD_CPPFLAGS)
src_modules_conf_display_module_la_CPPFLAGS = $(MOD_CPPFLAGS) -DNEED_X=1
src_modules_conf_display_module_la_LDFLAGS = $(MOD_LDFLAGS)
src_modules_conf_display_module_la_SOURCES = src/modules/conf_display/e_mod_main.c \
src/modules/conf_display/e_mod_main.h \

View File

@ -8,7 +8,7 @@ conf_randrpkgdir = $(MDIR)/conf_randr/$(MODULE_ARCH)
conf_randrpkg_LTLIBRARIES = src/modules/conf_randr/module.la
src_modules_conf_randr_module_la_LIBADD = $(MOD_LIBS)
src_modules_conf_randr_module_la_CPPFLAGS = $(MOD_CPPFLAGS)
src_modules_conf_randr_module_la_CPPFLAGS = $(MOD_CPPFLAGS) -DNEED_X=1
src_modules_conf_randr_module_la_LDFLAGS = $(MOD_LDFLAGS)
src_modules_conf_randr_module_la_SOURCES = src/modules/conf_randr/e_mod_main.c \
src/modules/conf_randr/e_mod_main.h \

View File

@ -7,7 +7,7 @@ conf_themepkgdir = $(MDIR)/conf_theme/$(MODULE_ARCH)
conf_themepkg_LTLIBRARIES = src/modules/conf_theme/module.la
src_modules_conf_theme_module_la_LIBADD = $(MOD_LIBS)
src_modules_conf_theme_module_la_CPPFLAGS = $(MOD_CPPFLAGS)
src_modules_conf_theme_module_la_CPPFLAGS = $(MOD_CPPFLAGS) -DNEED_X=1
src_modules_conf_theme_module_la_LDFLAGS = $(MOD_LDFLAGS)
src_modules_conf_theme_module_la_SOURCES = src/modules/conf_theme/e_mod_main.c \
src/modules/conf_theme/e_mod_main.h \

View File

@ -12,7 +12,7 @@ EVRYHEADERS = src/modules/everything/evry_api.h \
src/modules/everything/evry_types.h
src_modules_everything_module_la_LIBADD = $(MOD_LIBS)
src_modules_everything_module_la_CPPFLAGS = $(MOD_CPPFLAGS)
src_modules_everything_module_la_CPPFLAGS = $(MOD_CPPFLAGS) -DNEED_X=1
src_modules_everything_module_la_LDFLAGS = $(MOD_LDFLAGS)
src_modules_everything_module_la_SOURCES = $(EVRYHEADERS) \
src/modules/everything/e_mod_main.c \

View File

@ -8,7 +8,7 @@ filemanpkgdir = $(MDIR)/fileman/$(MODULE_ARCH)
filemanpkg_LTLIBRARIES = src/modules/fileman/module.la
src_modules_fileman_module_la_LIBADD = $(MOD_LIBS)
src_modules_fileman_module_la_CPPFLAGS = $(MOD_CPPFLAGS)
src_modules_fileman_module_la_CPPFLAGS = $(MOD_CPPFLAGS) -DNEED_X=1
src_modules_fileman_module_la_LDFLAGS = $(MOD_LDFLAGS)
src_modules_fileman_module_la_SOURCES = src/modules/fileman/e_mod_main.c \
src/modules/fileman/e_mod_main.h \

View File

@ -8,7 +8,7 @@ pagerpkgdir = $(MDIR)/pager/$(MODULE_ARCH)
pagerpkg_LTLIBRARIES = src/modules/pager/module.la
src_modules_pager_module_la_LIBADD = $(MOD_LIBS)
src_modules_pager_module_la_CPPFLAGS = $(MOD_CPPFLAGS)
src_modules_pager_module_la_CPPFLAGS = $(MOD_CPPFLAGS) -DNEED_X=1
src_modules_pager_module_la_LDFLAGS = $(MOD_LDFLAGS)
src_modules_pager_module_la_SOURCES = src/modules/pager/e_mod_main.h \
src/modules/pager/e_mod_main.c \

View File

@ -8,7 +8,7 @@ shotpkgdir = $(MDIR)/shot/$(MODULE_ARCH)
shotpkg_LTLIBRARIES = src/modules/shot/module.la
src_modules_shot_module_la_LIBADD = $(MOD_LIBS)
src_modules_shot_module_la_CPPFLAGS = $(MOD_CPPFLAGS)
src_modules_shot_module_la_CPPFLAGS = $(MOD_CPPFLAGS) -DNEED_X=1
src_modules_shot_module_la_LDFLAGS = $(MOD_LDFLAGS)
src_modules_shot_module_la_SOURCES = src/modules/shot/e_mod_main.c

View File

@ -8,16 +8,19 @@ systraypkgdir = $(MDIR)/systray/$(MODULE_ARCH)
systraypkg_LTLIBRARIES = src/modules/systray/module.la
src_modules_systray_module_la_LIBADD = $(MOD_LIBS)
src_modules_systray_module_la_CPPFLAGS = $(MOD_CPPFLAGS)
src_modules_systray_module_la_CPPFLAGS = $(MOD_CPPFLAGS) -DNEED_X=1
src_modules_systray_module_la_LDFLAGS = $(MOD_LDFLAGS)
src_modules_systray_module_la_SOURCES = src/modules/systray/e_mod_main.h \
src/modules/systray/e_mod_main.c \
src/modules/systray/e_mod_xembed.c \
src/modules/systray/e_mod_notifier_host_private.h \
src/modules/systray/e_mod_notifier_host.c \
src/modules/systray/e_mod_notifier_host_dbus.c \
src/modules/systray/e_mod_notifier_watcher.c
if ! HAVE_WAYLAND_ONLY
src_modules_systray_module_la_SOURCES += src/modules/systray/e_mod_xembed.c
endif
PHONIES += systray install-systray
systray: $(systraypkg_LTLIBRARIES) $(systray_DATA)
install-systray: install-systrayDATA install-systraypkgLTLIBRARIES

View File

@ -25,7 +25,7 @@ src/modules/tiling/%.edj: src/modules/tiling/%.edc Makefile
$(EDJE_CC) $(TILING_EDJE_FLAGS) $< $@
src_modules_tiling_module_la_LIBADD = $(MOD_LIBS)
src_modules_tiling_module_la_CPPFLAGS = $(MOD_CPPFLAGS)
src_modules_tiling_module_la_CPPFLAGS = $(MOD_CPPFLAGS) -DNEED_X=1
src_modules_tiling_module_la_LDFLAGS = $(MOD_LDFLAGS)
src_modules_tiling_module_la_SOURCES = src/modules/tiling/e_mod_tiling.c \
src/modules/tiling/e_mod_tiling.h \

View File

@ -8,7 +8,7 @@ winlistpkgdir = $(MDIR)/winlist/$(MODULE_ARCH)
winlistpkg_LTLIBRARIES = src/modules/winlist/module.la
src_modules_winlist_module_la_LIBADD = $(MOD_LIBS)
src_modules_winlist_module_la_CPPFLAGS = $(MOD_CPPFLAGS)
src_modules_winlist_module_la_CPPFLAGS = $(MOD_CPPFLAGS) -DNEED_X=1
src_modules_winlist_module_la_LDFLAGS = $(MOD_LDFLAGS)
src_modules_winlist_module_la_SOURCES = src/modules/winlist/e_mod_main.h \
src/modules/winlist/e_mod_main.c \

View File

@ -127,7 +127,7 @@ src_modules_wizard_page_140_la_LDFLAGS = $(MOD_LDFLAGS)
src_modules_wizard_page_140_la_SOURCES = src/modules/wizard/page_140.c
src_modules_wizard_page_150_la_LIBADD = $(MOD_LIBS)
src_modules_wizard_page_150_la_CPPFLAGS = $(MOD_CPPFLAGS)
src_modules_wizard_page_150_la_CPPFLAGS = $(MOD_CPPFLAGS) -DNEED_X=1
src_modules_wizard_page_150_la_LDFLAGS = $(MOD_LDFLAGS)
src_modules_wizard_page_150_la_SOURCES = src/modules/wizard/page_150.c

View File

@ -8,7 +8,7 @@ xkbswitchpkgdir = $(MDIR)/xkbswitch/$(MODULE_ARCH)
xkbswitchpkg_LTLIBRARIES = src/modules/xkbswitch/module.la
src_modules_xkbswitch_module_la_LIBADD = $(MOD_LIBS)
src_modules_xkbswitch_module_la_CPPFLAGS = $(MOD_CPPFLAGS)
src_modules_xkbswitch_module_la_CPPFLAGS = $(MOD_CPPFLAGS) -DNEED_X=1
src_modules_xkbswitch_module_la_LDFLAGS = $(MOD_LDFLAGS)
src_modules_xkbswitch_module_la_SOURCES = src/modules/xkbswitch/e_mod_main.c \
src/modules/xkbswitch/e_mod_main.h \

View File

@ -236,7 +236,8 @@ _cb_hook_layout(void *data __UNUSED__, E_Comp *comp)
}
else
{
if (ec->illume.conformant.conformant)
#warning X ONLY! SPANK! SPANK! SPANK!!!
if (ec->comp_data->illume.conformant.conformant)
{
if (kbd_on != want_kbd)
{

View File

@ -58,7 +58,6 @@ static void _e_wl_shell_shell_surface_cb_ec_hook_resize_end(void *data, E_Client
static void _e_wl_shell_surface_cb_smart_client_resize(void *data, Evas_Object *obj, void *event_info);
static void _e_wl_shell_mouse_down_helper(E_Client *ec, int button, Evas_Point *output, E_Binding_Event_Mouse_Button *ev, Eina_Bool move);
static void _e_wl_shell_mouse_up_helper(E_Client *ec, int button, Evas_Point *output, E_Binding_Event_Mouse_Button *ev EINA_UNUSED);
/* shell surface interface prototypes */
static void _e_wl_shell_shell_surface_cb_pong(struct wl_client *client EINA_UNUSED, struct wl_resource *resource, unsigned int serial);
@ -613,11 +612,12 @@ _e_wl_shell_shell_surface_create_toplevel(E_Wayland_Surface *ews)
/* create the e client for this surface */
ews->ec = e_pixmap_find_client(E_PIXMAP_TYPE_WL, e_pixmap_window_get(ews->pixmap));
if (!ews->ec)
ews->ec = e_client_new(comp, ews->pixmap, 1, 0);
ews->ec = e_client_new(comp, ews->pixmap, 1, 1);
e_pixmap_ref(ews->pixmap);
ews->ec->argb = 1;
ews->ec->no_shape_cut = 1; // specify no input shape cutting for this client
ews->ec->lock_border = ews->ec->borderless = !ews->ec->internal;
ews->ec->borderless = !ews->ec->internal;
ews->ec->lock_border = 1;
ews->ec->border.changed = ews->ec->changes.border = !ews->ec->borderless;
ews->ec->comp_data = (E_Comp_Client_Data*)ews;
ews->ec->icccm.title = eina_stringshare_ref(ews->shell_surface->title);
@ -644,11 +644,13 @@ _e_wl_shell_shell_surface_create_toplevel(E_Wayland_Surface *ews)
ews->ec->client.w = ews->geometry.w;
ews->ec->client.h = ews->geometry.h;
ews->ec->visible = 1;
evas_object_show(ews->ec->frame);
evas_object_geometry_set(ews->ec->frame, ews->geometry.x, ews->geometry.y,
ews->geometry.w, ews->geometry.h);
evas_object_show(ews->ec->frame);
ews->mapped = EINA_TRUE;
}
@ -671,11 +673,12 @@ _e_wl_shell_shell_surface_create_popup(E_Wayland_Surface *ews)
/* create the e client for this surface */
ews->ec = e_pixmap_find_client(E_PIXMAP_TYPE_WL, e_pixmap_window_get(ews->pixmap));
if (!ews->ec)
ews->ec = e_client_new(comp, ews->pixmap, 1, 0);
ews->ec = e_client_new(comp, ews->pixmap, 1, 1);
e_pixmap_ref(ews->pixmap);
ews->ec->argb = 1;
ews->ec->no_shape_cut = 1; // specify no input shape cutting for this client
ews->ec->lock_border = ews->ec->borderless = !ews->ec->internal;
ews->ec->borderless = !ews->ec->internal;
ews->ec->lock_border = 1;
ews->ec->border.changed = ews->ec->changes.border = !ews->ec->borderless;
ews->ec->comp_data = (E_Comp_Client_Data*)ews;
ews->ec->icccm.title = eina_stringshare_ref(ewss->title);
@ -702,9 +705,14 @@ _e_wl_shell_shell_surface_create_popup(E_Wayland_Surface *ews)
ews->ec->client.w = ews->geometry.w;
ews->ec->client.h = ews->geometry.h;
ews->ec->visible = 1;
evas_object_show(ews->ec->frame);
evas_object_geometry_set(ews->ec->frame, ews->geometry.x, ews->geometry.y,
ews->geometry.w, ews->geometry.h);
evas_object_show(ews->ec->frame);
ews->mapped = EINA_TRUE;
/* set popup properties */
@ -817,12 +825,12 @@ _e_wl_shell_shell_surface_configure(E_Wayland_Surface *ews, Evas_Coord x, Evas_C
ews->ec->client.x = ews->geometry.x = x;
ews->ec->client.y = ews->geometry.y = y;
e_comp_object_frame_xy_adjust(ews->ec->frame, x, y, &ews->ec->x, &ews->ec->y);
ews->ec->changes.size = 1;
ews->ec->changes.pos = 1;
}
ews->ec->client.w = w;
ews->ec->client.h = h;
e_comp_object_frame_wh_adjust(ews->ec->frame, w, h, &ews->ec->w, &ews->ec->h);
ews->ec->changes.pos = 1;
ews->ec->changes.size = 1;
EC_CHANGED(ews->ec);
}
}
@ -923,19 +931,25 @@ _e_wl_shell_shell_surface_unmap(E_Wayland_Surface *ews)
_e_wl_shell_surface_cb_smart_client_resize, ews);
/* surface probably has render updates pending:
* - check ourselves before we wreck ourselves
* - copy image
* - re-render
*/
e_pixmap_image_clear(ews->pixmap, 0);
e_pixmap_dirty(ews->pixmap);
if (e_pixmap_refresh(ews->pixmap))
if (evas_object_visible_get(ews->ec->frame))
{
e_comp_object_damage(ews->ec->frame, 0, 0, ews->ec->w, ews->ec->h);
e_comp_object_render(ews->ec->frame);
/* surface probably has render updates pending:
* - check ourselves before we wreck ourselves
* - copy image
* - re-render
*/
e_pixmap_image_clear(ews->pixmap, 0);
e_pixmap_dirty(ews->pixmap);
if (e_pixmap_refresh(ews->pixmap))
{
e_comp_object_damage(ews->ec->frame, 0, 0, ews->ec->w, ews->ec->h);
e_comp_object_dirty(ews->ec->frame);
e_comp_object_render(ews->ec->frame);
}
e_comp_object_render_update_del(ews->ec->frame);
evas_object_pass_events_set(ews->ec->frame, 1);
evas_object_hide(ews->ec->frame);
}
e_comp_object_render_update_del(ews->ec->frame);
e_object_del(E_OBJECT(ews->ec));
}
@ -1167,13 +1181,12 @@ _e_wl_shell_shell_surface_cb_mouse_up(void *data, Evas *e EINA_UNUSED, Evas_Obje
{
E_Wayland_Surface *ews = NULL;
struct wl_pointer *ptr = NULL;
Evas_Event_Mouse_Up *ev;
Evas_Event_Mouse_Up *ev = event;
int btn = 0;
ev = event;
/* try to cast data to our surface structure */
if (!(ews = data)) return;
if (ews->ec && ews->ec->cur_mouse_action) return;
/* try to get the pointer from this input */
if ((ptr = _e_wl_comp->input->wl.seat.pointer))
@ -1187,7 +1200,6 @@ _e_wl_shell_shell_surface_cb_mouse_up(void *data, Evas *e EINA_UNUSED, Evas_Obje
if (ptr->button_count > 0) ptr->button_count--;
/* send this button press to the pointer */
ptr->grab->interface->button(ptr->grab, ev->timestamp, btn,
WL_POINTER_BUTTON_STATE_RELEASED);
@ -1208,6 +1220,7 @@ _e_wl_shell_shell_surface_cb_mouse_down(void *data, Evas *e EINA_UNUSED, Evas_Ob
/* try to cast data to our surface structure */
if (!(ews = data)) return;
if (ews->ec && ews->ec->cur_mouse_action) return;
/* try to get the pointer from this input */
if ((ptr = _e_wl_comp->input->wl.seat.pointer))
@ -1260,6 +1273,7 @@ _e_wl_shell_shell_surface_cb_mouse_wheel(void *data, Evas *e EINA_UNUSED, Evas_O
/* try to cast data to our surface structure */
if (!(ews = data)) return;
if (ews->ec && ews->ec->cur_mouse_action) return;
/* try to get the pointer from this input */
if ((ptr = _e_wl_comp->input->wl.seat.pointer))
@ -1313,9 +1327,20 @@ _e_wl_shell_shell_surface_cb_key_up(void *data, Evas *e EINA_UNUSED, Evas_Object
/* is the focused surface actually This surface ? */
if (kbd->focus != ews->wl.surface) return;
/* get the keycode for this key from X */
key = ecore_x_keysym_keycode_get(ev->keyname) - 8;
#ifndef WAYLAND_ONLY
if (_e_wl_comp->kbd_handler)
/* get the keycode for this key from X, since we're definitely in X here */
key = ecore_x_keysym_keycode_get(ev->keyname) - 8;
else
#endif
{
xkb_keysym_t sym;
sym = xkb_keysym_from_name(ev->key, 0);
if (!sym)
sym = xkb_keysym_from_name(ev->key, XKB_KEYSYM_CASE_INSENSITIVE);
key = sym - 8;
}
end = (kbd->keys.data + kbd->keys.size);
for (k = kbd->keys.data; k < end; k++)
if ((*k == key)) *k = *--end;
@ -1368,8 +1393,20 @@ _e_wl_shell_shell_surface_cb_key_down(void *data, Evas *e EINA_UNUSED, Evas_Obje
/* if the compositor has a ping callback, call it on this surface */
if (_e_wl_comp->ping_cb) _e_wl_comp->ping_cb(ews, serial);
key = ecore_x_keysym_keycode_get(ev->keyname) - 8;
#ifndef WAYLAND_ONLY
if (_e_wl_comp->kbd_handler)
/* get the keycode for this key from X, since we're definitely in X here */
key = ecore_x_keysym_keycode_get(ev->keyname) - 8;
else
#endif
{
xkb_keysym_t sym;
sym = xkb_keysym_from_name(ev->key, 0);
if (!sym)
sym = xkb_keysym_from_name(ev->key, XKB_KEYSYM_CASE_INSENSITIVE);
key = sym - 8;
}
/* update the keyboards grab properties */
kbd->grab_key = key;
kbd->grab_time = ev->timestamp;
@ -1647,7 +1684,6 @@ _e_wl_shell_shell_surface_cb_pong(struct wl_client *client EINA_UNUSED, struct w
static void
_e_wl_shell_mouse_down_helper(E_Client *ec, int button, Evas_Point *output, E_Binding_Event_Mouse_Button *ev, Eina_Bool move)
{
INF("MOUSE DOWN: %dx%d", output->x, output->y);
if ((button >= 1) && (button <= 3))
{
ec->mouse.last_down[button - 1].mx = output->x;
@ -1712,29 +1748,6 @@ _e_wl_shell_mouse_down_helper(E_Client *ec, int button, Evas_Point *output, E_Bi
ec->mouse.current.my = output->y;
}
static void
_e_wl_shell_mouse_up_helper(E_Client *ec, int button, Evas_Point *output, E_Binding_Event_Mouse_Button *ev EINA_UNUSED)
{
if ((button >= 1) && (button <= 3))
{
ec->mouse.last_up[button - 1].mx = output->x;
ec->mouse.last_up[button - 1].my = output->y;
ec->mouse.last_up[button - 1].x = ec->x;
ec->mouse.last_up[button - 1].y = ec->y;
}
ec->mouse.current.mx = output->x;
ec->mouse.current.my = output->y;
if ((button >= 1) && (button <= 3))
{
ec->mouse.last_up[button - 1].mx = output->x;
ec->mouse.last_up[button - 1].my = output->y;
ec->mouse.last_up[button - 1].x = ec->x;
ec->mouse.last_up[button - 1].y = ec->y;
}
ec->drag.start = 0;
}
static void
_e_wl_shell_shell_surface_cb_move(struct wl_client *client EINA_UNUSED, struct wl_resource *resource, struct wl_resource *seat_resource, unsigned int serial)
{
@ -1784,12 +1797,16 @@ _e_wl_shell_shell_surface_cb_move(struct wl_client *client EINA_UNUSED, struct w
else if (grab->grab.pointer->grab_button == BTN_RIGHT)
ev.button = 3;
/* set the clicked location in the binding event */
e_comp_object_frame_xy_unadjust(ewss->surface->ec->frame, wl_fixed_to_int(ptr->x), wl_fixed_to_int(ptr->y), &ev.canvas.x, &ev.canvas.y);
/* set the clicked location in the binding event
* the ptr coords are relative to the client, so adjust them to be canvas
*/
e_comp_object_frame_xy_unadjust(ewss->surface->ec->frame,
wl_fixed_to_int(ptr->x) + ewss->surface->ec->client.x,
wl_fixed_to_int(ptr->y) + ewss->surface->ec->client.y, &ev.canvas.x, &ev.canvas.y);
/* call our helper function to initiate a move */
_e_wl_shell_mouse_down_helper(ewss->surface->ec, ev.button,
&(Evas_Point){ev.canvas.x + ewss->surface->ec->client.x, ev.canvas.y + ewss->surface->ec->client.y},
&(Evas_Point){ev.canvas.x, ev.canvas.y},
&ev, EINA_TRUE);
}
@ -1848,12 +1865,16 @@ _e_wl_shell_shell_surface_cb_resize(struct wl_client *client EINA_UNUSED, struct
else if (grab->grab.pointer->grab_button == BTN_RIGHT)
ev.button = 3;
/* set the clicked location in the binding event */
e_comp_object_frame_xy_unadjust(ewss->surface->ec->frame, wl_fixed_to_int(ptr->x), wl_fixed_to_int(ptr->y), &ev.canvas.x, &ev.canvas.y);
/* set the clicked location in the binding event
* the ptr coords are relative to the client, so adjust them to be canvas
*/
e_comp_object_frame_xy_unadjust(ewss->surface->ec->frame,
wl_fixed_to_int(ptr->x) + ewss->surface->ec->client.x,
wl_fixed_to_int(ptr->y) + ewss->surface->ec->client.y, &ev.canvas.x, &ev.canvas.y);
/* call our helper function to initiate a resize */
_e_wl_shell_mouse_down_helper(ewss->surface->ec, ev.button,
&(Evas_Point){ev.canvas.x + ewss->surface->ec->client.x, ev.canvas.y + ewss->surface->ec->client.y},
&(Evas_Point){ev.canvas.x, ev.canvas.y},
&ev, EINA_FALSE);
}
@ -2004,7 +2025,7 @@ _e_wl_shell_shell_surface_cb_class_set(struct wl_client *client EINA_UNUSED, str
eina_stringshare_replace(&ewss->clas, clas);
if (!ewss->surface->ec) return;
eina_stringshare_refplace(&ewss->surface->ec->icccm.class, clas);
eina_stringshare_refplace(&ewss->surface->ec->icccm.class, ewss->clas);
}
/* shell move_grab interface functions */
@ -2028,7 +2049,7 @@ _e_wl_shell_move_grab_cb_motion(struct wl_pointer_grab *grab EINA_UNUSED, unsign
}
static void
_e_wl_shell_move_grab_cb_button(struct wl_pointer_grab *grab, unsigned int timestamp EINA_UNUSED, unsigned int button EINA_UNUSED, unsigned int state)
_e_wl_shell_move_grab_cb_button(struct wl_pointer_grab *grab, unsigned int timestamp, unsigned int button, unsigned int state)
{
E_Wayland_Shell_Grab *ewsg = NULL;
struct wl_pointer *ptr;
@ -2057,35 +2078,19 @@ _e_wl_shell_move_grab_cb_button(struct wl_pointer_grab *grab, unsigned int times
if ((ptr->button_count == 0) &&
(state == WL_POINTER_BUTTON_STATE_RELEASED))
{
E_Wayland_Surface *ews = NULL;
E_Binding_Event_Mouse_Button ev;
if (!(ews = ewsg->shell_surface->surface)) return;
/* set button property of the binding event */
if (ptr->grab_button == BTN_LEFT)
ev.button = 1;
else if (ptr->grab_button == BTN_MIDDLE)
ev.button = 2;
else if (ptr->grab_button == BTN_RIGHT)
ev.button = 3;
/* set the clicked location in the binding event */
e_comp_object_frame_xy_unadjust(ews->ec->frame, wl_fixed_to_int(ptr->x), wl_fixed_to_int(ptr->y), &ev.canvas.x, &ev.canvas.y);
/* call our helper function to end a move */
_e_wl_shell_mouse_up_helper(ews->ec, ev.button,
&(Evas_Point){ev.canvas.x + ews->ec->client.x, ev.canvas.y + ews->ec->client.y},
&ev);
struct wl_list *lst;
struct wl_resource *res;
/* end the grab */
_e_wl_shell_grab_end(ewsg);
free(grab);
/* set surface geometry */
_e_wl_shell_shell_surface_configure(ews, ews->ec->x, ews->ec->y,
ews->geometry.w,
ews->geometry.h);
lst = &ptr->focus_resource_list;
if (!wl_list_empty(lst))
{
wl_resource_for_each(res, lst)
e_comp_wl_mouse_button(res, ptr->grab_serial, timestamp, button, state);
}
}
}
@ -2110,7 +2115,7 @@ _e_wl_shell_resize_grab_cb_motion(struct wl_pointer_grab *grab EINA_UNUSED, unsi
}
static void
_e_wl_shell_resize_grab_cb_button(struct wl_pointer_grab *grab, unsigned int timestamp EINA_UNUSED, unsigned int button EINA_UNUSED, unsigned int state)
_e_wl_shell_resize_grab_cb_button(struct wl_pointer_grab *grab, unsigned int timestamp, unsigned int button, unsigned int state)
{
E_Wayland_Shell_Grab *ewsg = NULL;
struct wl_pointer *ptr;
@ -2139,35 +2144,19 @@ _e_wl_shell_resize_grab_cb_button(struct wl_pointer_grab *grab, unsigned int tim
if ((ptr->button_count == 0) &&
(state == WL_POINTER_BUTTON_STATE_RELEASED))
{
E_Wayland_Surface *ews = NULL;
E_Binding_Event_Mouse_Button ev;
if (!(ews = ewsg->shell_surface->surface)) return;
/* set button property of the binding event */
if (ptr->grab_button == BTN_LEFT)
ev.button = 1;
else if (ptr->grab_button == BTN_MIDDLE)
ev.button = 2;
else if (ptr->grab_button == BTN_RIGHT)
ev.button = 3;
/* set the clicked location in the binding event */
e_comp_object_frame_xy_unadjust(ews->ec->frame, wl_fixed_to_int(ptr->x), wl_fixed_to_int(ptr->y), &ev.canvas.x, &ev.canvas.y);
/* call our helper function to end a move */
_e_wl_shell_mouse_up_helper(ews->ec, ev.button,
&(Evas_Point){ev.canvas.x + ews->ec->client.x, ev.canvas.y + ews->ec->client.y},
&ev);
struct wl_list *lst;
struct wl_resource *res;
/* end the grab */
_e_wl_shell_grab_end(ewsg);
free(grab);
/* set surface geometry */
_e_wl_shell_shell_surface_configure(ews, ews->ec->x, ews->ec->y,
ews->geometry.w,
ews->geometry.h);
lst = &ptr->focus_resource_list;
if (!wl_list_empty(lst))
{
wl_resource_for_each(res, lst)
e_comp_wl_mouse_button(res, ptr->grab_serial, timestamp, button, state);
}
}
}