#include "ecore_private.h"
#include "Ecore.h"
+#include <locale.h>
+#include <langinfo.h>
static const char *_ecore_magic_string_get(Ecore_Magic m);
static int _ecore_init_count = 0;
{
if (++_ecore_init_count == 1)
{
+ setlocale(LC_CTYPE, "");
+ if (strcmp(nl_langinfo(CODESET), "UTF-8"))
+ {
+ printf("WARNING: not a utf8 locale!\n");
+ }
#ifndef WIN32
if (getenv("ECORE_FPS_DEBUG")) _ecore_fps_debug = 1;
if (_ecore_fps_debug) _ecore_fps_debug_init();
/* engine/target specific init calls */
Ecore_Evas *ecore_evas_software_x11_new(const char *disp_name, Ecore_X_Window parent, int x, int y, int w, int h);
Ecore_X_Window ecore_evas_software_x11_window_get(Ecore_Evas *ee);
+Ecore_X_Window ecore_evas_software_x11_subwindow_get(Ecore_Evas *ee);
+void ecore_evas_software_x11_direct_resize_set(Ecore_Evas *ee, int on);
+int ecore_evas_software_x11_direct_resize_get(Ecore_Evas *ee);
Ecore_Evas *ecore_evas_gl_x11_new(const char *disp_name, Ecore_X_Window parent, int x, int y, int w, int h);
Ecore_X_Window ecore_evas_gl_x11_window_get(Ecore_Evas *ee);
+Ecore_X_Window ecore_evas_gl_x11_subwindow_get(Ecore_Evas *ee);
+void ecore_evas_gl_x11_direct_resize_set(Ecore_Evas *ee, int on);
+int ecore_evas_gl_x11_direct_resize_get(Ecore_Evas *ee);
Ecore_Evas *ecore_evas_fb_new(char *disp_name, int rotation, int w, int h);
Ecore_X_Pixmap mask;
Ecore_X_GC gc;
Region damages;
+ unsigned char direct_resize : 1;
} x;
#endif
#ifdef BUILD_ECORE_EVAS_FB
ee->w = e->w;
ee->h = e->h;
if (e->win == ee->engine.x.win_container)
- ecore_x_window_resize(ee->engine.x.win, ee->w, ee->h);
+ ecore_x_window_move_resize(ee->engine.x.win, 0, 0, ee->w, ee->h);
if ((ee->rotation == 90) || (ee->rotation == 270))
{
evas_output_size_set(ee->evas, ee->h, ee->w);
_ecore_evas_resize(Ecore_Evas *ee, int w, int h)
{
ecore_x_window_resize(ee->engine.x.win_container, w, h);
+ if (ee->engine.x.direct_resize)
+ {
+ ecore_x_window_move_resize(ee->engine.x.win, 0, 0, w, h);
+ if ((ee->w != w) || (ee->h != h))
+ {
+ ee->w = w;
+ ee->h = h;
+ if ((ee->rotation == 90) || (ee->rotation == 270))
+ {
+ evas_output_size_set(ee->evas, ee->h, ee->w);
+ evas_output_viewport_set(ee->evas, 0, 0, ee->h, ee->w);
+ }
+ else
+ {
+ evas_output_size_set(ee->evas, ee->w, ee->h);
+ evas_output_viewport_set(ee->evas, 0, 0, ee->w, ee->h);
+ }
+ if (ee->prop.avoid_damage)
+ {
+ ecore_evas_avoid_damage_set(ee, 0);
+ ecore_evas_avoid_damage_set(ee, 1);
+ }
+ if (ee->shaped)
+ {
+ ecore_evas_shaped_set(ee, 0);
+ ecore_evas_shaped_set(ee, 1);
+ }
+ }
+ }
}
static void
_ecore_evas_move_resize(Ecore_Evas *ee, int x, int y, int w, int h)
{
ecore_x_window_move_resize(ee->engine.x.win_container, x, y, w, h);
+ if (ee->engine.x.direct_resize)
+ {
+ ecore_x_window_move_resize(ee->engine.x.win, 0, 0, w, h);
+ if ((ee->w != w) || (ee->h != h))
+ {
+ ee->w = w;
+ ee->h = h;
+ if ((ee->rotation == 90) || (ee->rotation == 270))
+ {
+ evas_output_size_set(ee->evas, ee->h, ee->w);
+ evas_output_viewport_set(ee->evas, 0, 0, ee->h, ee->w);
+ }
+ else
+ {
+ evas_output_size_set(ee->evas, ee->w, ee->h);
+ evas_output_viewport_set(ee->evas, 0, 0, ee->w, ee->h);
+ }
+ if (ee->prop.avoid_damage)
+ {
+ ecore_evas_avoid_damage_set(ee, 0);
+ ecore_evas_avoid_damage_set(ee, 1);
+ }
+ if (ee->shaped)
+ {
+ ecore_evas_shaped_set(ee, 0);
+ ecore_evas_shaped_set(ee, 1);
+ }
+ }
+ }
}
static void
int rw, rh;
ecore_x_window_size_get(0, &rw, &rh);
- ecore_x_window_resize(ee->engine.x.win, rw, rh);
+ ecore_x_window_move_resize(ee->engine.x.win, 0, 0, rw, rh);
ecore_x_window_reparent(ee->engine.x.win, 0, 0, 0);
ecore_x_window_raise(ee->engine.x.win);
ecore_x_window_show(ee->engine.x.win);
ecore_x_window_size_get(ee->engine.x.win_container, &pw, &ph);
ecore_x_window_reparent(ee->engine.x.win, ee->engine.x.win_container, 0, 0);
- ecore_x_window_resize(ee->engine.x.win, pw, ph);
+ ecore_x_window_move_resize(ee->engine.x.win, 0, 0, pw, ph);
ecore_x_window_shape_mask_set(ee->engine.x.win, 0);
if (ee->should_be_visible) ecore_x_window_show(ee->engine.x.win_container);
ee->w = pw;
ee->h = ph;
}
- ecore_x_window_resize(ee->engine.x.win, ee->w, ee->h);
+ ecore_x_window_move_resize(ee->engine.x.win, 0, 0, ee->w, ee->h);
if ((ee->rotation == 90) || (ee->rotation == 270))
{
evas_output_size_set(ee->evas, ee->h, ee->w);
#endif
}
+/**
+ * To be documented.
+ *
+ * FIXME: To be fixed.
+ */
+Ecore_X_Window
+ecore_evas_software_x11_subwindow_get(Ecore_Evas *ee)
+{
+#ifdef BUILD_ECORE_X
+ return ee->engine.x.win;
+#else
+ return 0;
+#endif
+}
+
+/**
+ * To be documented.
+ *
+ * FIXME: To be fixed.
+ */
+void
+ecore_evas_software_x11_direct_resize_set(Ecore_Evas *ee, int on)
+{
+#ifdef BUILD_ECORE_X
+ ee->engine.x.direct_resize = on;
+#else
+ return;
+#endif
+}
+
+/**
+ * To be documented.
+ *
+ * FIXME: To be fixed.
+ */
+int
+ecore_evas_software_x11_direct_resize_get(Ecore_Evas *ee)
+{
+#ifdef BUILD_ECORE_X
+ return ee->engine.x.direct_resize;
+#else
+ return 0;
+#endif
+}
+
+/**
+ * To be documented.
+ *
+ * FIXME: To be fixed.
+ */
Ecore_Evas *
ecore_evas_gl_x11_new(const char *disp_name, Ecore_X_Window parent,
int x, int y, int w, int h)
return 0;
#endif
}
+
+/**
+ * To be documented.
+ *
+ * FIXME: To be fixed.
+ */
+Ecore_X_Window
+ecore_evas_gl_x11_subwindow_get(Ecore_Evas *ee)
+{
+#ifdef BUILD_ECORE_X
+ return ee->engine.x.win;
+#else
+ return 0;
+#endif
+}
+
+/**
+ * To be documented.
+ *
+ * FIXME: To be fixed.
+ */
+void
+ecore_evas_gl_x11_direct_resize_set(Ecore_Evas *ee, int on)
+{
+#ifdef BUILD_ECORE_X
+ ee->engine.x.direct_resize = on;
+#else
+ return;
+#endif
+}
+
+/**
+ * To be documented.
+ *
+ * FIXME: To be fixed.
+ */
+int
+ecore_evas_gl_x11_direct_resize_get(Ecore_Evas *ee)
+{
+#ifdef BUILD_ECORE_X
+ return ee->engine.x.direct_resize;
+#else
+ return 0;
+#endif
+}
+
new_txt = NULL;
break;
}
+ else
+ {
+ if (new_txt) free(new_txt);
+ new_txt = NULL;
+ break;
+ }
}
if (inb == 0)
{
ECORE_X_EVENT_MASK_WINDOW_FOCUS_IN = (1L << 30),
ECORE_X_EVENT_MASK_WINDOW_FOCUS_OUT = (1L << 31)
} Ecore_X_Event_Mask;
-
+
+ typedef enum _Ecore_X_Gravity {
+ ECORE_X_GRAVITY_FORGET = 0,
+ ECORE_X_GRAVITY_UNMAP = 0,
+ ECORE_X_GRAVITY_NW = 1,
+ ECORE_X_GRAVITY_N = 2,
+ ECORE_X_GRAVITY_NE = 3,
+ ECORE_X_GRAVITY_W = 4,
+ ECORE_X_GRAVITY_CENTER = 5,
+ ECORE_X_GRAVITY_E = 6,
+ ECORE_X_GRAVITY_SW = 7,
+ ECORE_X_GRAVITY_S = 8,
+ ECORE_X_GRAVITY_SE = 9,
+ ECORE_X_GRAVITY_STATIC = 10
+ } Ecore_X_Gravity;
+
typedef struct _Ecore_X_Event_Key_Down Ecore_X_Event_Key_Down;
typedef struct _Ecore_X_Event_Key_Up Ecore_X_Event_Key_Up;
typedef struct _Ecore_X_Event_Mouse_Button_Down Ecore_X_Event_Mouse_Button_Down;
void ecore_x_window_background_color_set(Ecore_X_Window win,
unsigned long color);
-
+void ecore_x_window_gravity_set(Ecore_X_Window win,
+ Ecore_X_Gravity grav);
+void ecore_x_window_pixel_gravity_set(Ecore_X_Window win,
+ Ecore_X_Gravity grav);
+
Ecore_X_Atom ecore_x_window_prop_any_type(void);
void ecore_x_window_prop_property_set(Ecore_X_Window win, Ecore_X_Atom type, Ecore_X_Atom format, int size, void *data, int number);
int ecore_x_window_prop_property_get(Ecore_X_Window win, Ecore_X_Atom property, Ecore_X_Atom type, int size, unsigned char **data, int *num);
void ecore_x_window_client_sniff(Ecore_X_Window win);
Ecore_X_Atom ecore_x_atom_get(char *name);
- typedef enum _Ecore_X_Gravity {
- ECORE_X_GRAVITY_FORGET = 0,
- ECORE_X_GRAVITY_UNMAP = 0,
- ECORE_X_GRAVITY_NW = 1,
- ECORE_X_GRAVITY_N = 2,
- ECORE_X_GRAVITY_NE = 3,
- ECORE_X_GRAVITY_W = 4,
- ECORE_X_GRAVITY_CENTER = 5,
- ECORE_X_GRAVITY_E = 6,
- ECORE_X_GRAVITY_SW = 7,
- ECORE_X_GRAVITY_S = 8,
- ECORE_X_GRAVITY_SE = 9,
- ECORE_X_GRAVITY_STATIC = 10
- } Ecore_X_Gravity;
void
ecore_x_icccm_state_set(Ecore_X_Window win, Ecore_X_Window_State_Hint state);
void
int *step_x, int *step_y,
double *min_aspect,
double *max_aspect);
+ void
+ ecore_x_icccm_title_set(Ecore_X_Window win, const char *t);
+ char *
+ ecore_x_icccm_title_get(Ecore_X_Window win);
void ecore_x_netwm_init(void);
void ecore_x_netwm_wm_identify(Ecore_X_Window root, Ecore_X_Window check, const char *wm_name);
-#include <Ecore.h>
+#include "Ecore.h"
#include "ecore_x_private.h"
-#include <Ecore_X.h>
+#include "Ecore_X.h"
static Ecore_X_Selection_Data _xdnd_selection;
static Ecore_X_DND_Protocol *_xdnd;
#include "Ecore.h"
#include "ecore_x_private.h"
#include "Ecore_X.h"
-#include "Ecore_Txt.h"
static void _ecore_x_event_free_window_prop_name_class_change(void *data, void *ev);
static void _ecore_x_event_free_window_prop_title_change(void *data, void *ev);
return 1;
}
+void
+ecore_x_icccm_title_set(Ecore_X_Window win, const char *t)
+{
+ char *list[1];
+ XTextProperty xprop;
+ int ret;
+
+#ifdef X_HAVE_UTF8_STRING
+ list[0] = strdup(t);
+ ret = Xutf8TextListToTextProperty(_ecore_x_disp, list, 1, XUTF8StringStyle, &xprop);
+#else
+ list[0] = strdup(t);
+ ret = XmbTextListToTextProperty(_ecore_x_disp, list, 1, XStdICCTextStyle, &xprop);
+#endif
+ if (ret >= Success)
+ {
+ XSetWMName(_ecore_x_disp, win, &xprop);
+ XFree(xprop.value);
+ }
+ else
+ {
+ if (XStringListToTextProperty(list, 1, &xprop) >= Success)
+ {
+ XSetWMName(_ecore_x_disp, win, &xprop);
+ XFree(xprop.value);
+ }
+ }
+ free(list[0]);
+}
+
+char *
+ecore_x_icccm_title_get(Ecore_X_Window win)
+{
+ XTextProperty xprop;
+
+ if (XGetWMName(_ecore_x_disp, win, &xprop))
+ {
+ if (xprop.value)
+ {
+ char **list = NULL;
+ char *t = NULL;
+ int num = 0;
+
+ if (xprop.encoding == _ecore_x_atom_string)
+ {
+ t = strdup(xprop.value);
+ }
+ else if (xprop.encoding == _ecore_x_atom_utf8_string)
+ {
+ t = strdup(xprop.value);
+ }
+ else
+ {
+ int ret;
+
+#ifdef X_HAVE_UTF8_STRING
+ ret = Xutf8TextPropertyToTextList(_ecore_x_disp, &xprop,
+ &list, &num);
+#else
+ ret = XmbTextPropertyToTextList(_ecore_x_disp, &xprop,
+ &list, &num);
+#endif
+ if ((ret == XLocaleNotSupported) ||
+ (ret == XNoMemory) ||
+ (ret == XConverterNotFound))
+ {
+ t = strdup(xprop.value);
+ }
+ else if (ret >= Success)
+ {
+ if ((num >= 1) && (list))
+ {
+ /* FIXME: convert to utf8 */
+ t = strdup(list[0]);
+ }
+ if (list) XFreeStringList(list);
+ }
+ }
+ XFree(xprop.value);
+ return t;
+ }
+ }
+ return NULL;
+}
+
/* FIXME: move these things in here as they are icccm related */
/* get/set wm protocols */
-/* get/set title */
/* get/set name/class */
/* get/set machine */
/* get/set command */
/* FIXME: this is for simulation only */
#include "Ecore_Job.h"
+#include "Ecore_Txt.h"
typedef struct _Ecore_X_Reply Ecore_X_Reply;
-#include <Ecore.h>
+#include "Ecore.h"
#include "ecore_x_private.h"
-#include <Ecore_X.h>
-#include <Ecore_Txt.h>
+#include "Ecore_X.h"
static Ecore_X_Selection_Data selections[3] = {{0}};
static Ecore_X_Selection_Data request_data[3] = {{0}};
attr.background_pixel = color;
XChangeWindowAttributes(_ecore_x_disp, win, CWBackPixel, &attr);
}
+
+void
+ecore_x_window_gravity_set(Ecore_X_Window win, Ecore_X_Gravity grav)
+{
+ XSetWindowAttributes att;
+
+ att.win_gravity = grav;
+ XChangeWindowAttributes(_ecore_x_disp, win, CWWinGravity, &att);
+}
+
+void
+ecore_x_window_pixel_gravity_set(Ecore_X_Window win, Ecore_X_Gravity grav)
+{
+ XSetWindowAttributes att;
+
+ att.bit_gravity = grav;
+ XChangeWindowAttributes(_ecore_x_disp, win, CWBitGravity, &att);
+}