summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--configure.in17
-rw-r--r--elementary.pc.in4
-rw-r--r--src/bin/Makefile.am2
-rw-r--r--src/lib/Elementary.h1
-rw-r--r--src/lib/Makefile.am4
-rw-r--r--src/lib/elc_hoversel.c85
-rw-r--r--src/lib/elm_entry.c6
-rw-r--r--src/lib/elm_main.c57
-rw-r--r--src/lib/elm_priv.h6
-rw-r--r--src/lib/elm_win.c39
10 files changed, 196 insertions, 25 deletions
diff --git a/configure.in b/configure.in
index 17ec80cf0..b82117602 100644
--- a/configure.in
+++ b/configure.in
@@ -35,7 +35,6 @@ PKG_CHECK_MODULES([ELEMENTARY], [
eet
evas
ecore
- ecore-x
ecore-evas
ecore-job
ecore-txt
@@ -44,6 +43,22 @@ PKG_CHECK_MODULES([ELEMENTARY], [
edbus
])
+have_elementary_x="no"
+PKG_CHECK_MODULES([ELEMENTARY_X], [ecore-x], [
+ AC_DEFINE(HAVE_ELEMENTARY_X, 1, [X11 support for Elementary])
+ have_elementary_x="yes"
+ ], [
+ have_elementary_x="no"
+ ])
+
+have_elementary_fb="no"
+PKG_CHECK_MODULES([ELEMENTARY_FB], [ecore-fb], [
+ AC_DEFINE(HAVE_ELEMENTARY_FB, 1, [FB support for Elementary])
+ have_elementary_fb="yes"
+ ], [
+ have_elementary_fb="no"
+ ])
+
my_libs="-lm"
AC_SUBST(my_libs)
diff --git a/elementary.pc.in b/elementary.pc.in
index bfd814ee0..6ee3ecce2 100644
--- a/elementary.pc.in
+++ b/elementary.pc.in
@@ -8,5 +8,5 @@ Description: Mobile device touchscreen widget library
Requires: evas ecore ecore-x ecore-evas ecore-job ecore-txt ecore-file eet edje
Version: @VERSION@
Libs: -L${libdir} -lelementary
-Libs.private: @my_libs@ @ELEMENTARY_LIBS@
-Cflags: -I${includedir} -I${includedir}/elementary
+Libs.private: @my_libs@ @ELEMENTARY_LIBS@ @ELEMENTARY_X_LIBS@ @ELEMENTARY_FB_LIBS@
+Cflags: -I${includedir} -I${includedir}/elementary @ELEMENTARY_CFLAGS@ @ELEMENTARY_X_CFLAGS@ @ELEMENTARY_FB_CFLAGS@
diff --git a/src/bin/Makefile.am b/src/bin/Makefile.am
index db3e761d6..5cd5c395c 100644
--- a/src/bin/Makefile.am
+++ b/src/bin/Makefile.am
@@ -7,7 +7,7 @@ AM_CPPFLAGS = \
-I$(top_srcdir)/src/lib \
-I$(top_srcdir)/src/bin \
-DPACKAGE_DATA_DIR=\"$(datadir)/$(PACKAGE)\" \
-@ELEMENTARY_CFLAGS@
+@ELEMENTARY_CFLAGS@ @ELEMENTARY_X_CFLAGS@ @ELEMENTARY_FB_CFLAGS@
bin_PROGRAMS = elementary_test
diff --git a/src/lib/Elementary.h b/src/lib/Elementary.h
index 3d1fc1bba..53b8805c8 100644
--- a/src/lib/Elementary.h
+++ b/src/lib/Elementary.h
@@ -45,7 +45,6 @@
#include <Eet.h>
#include <Evas.h>
#include <Ecore.h>
-#include <Ecore_X.h>
#include <Ecore_Evas.h>
#include <Ecore_Job.h>
#include <Ecore_Txt.h>
diff --git a/src/lib/Makefile.am b/src/lib/Makefile.am
index e3a8e730c..7f50e0896 100644
--- a/src/lib/Makefile.am
+++ b/src/lib/Makefile.am
@@ -7,7 +7,7 @@ AM_CPPFLAGS = \
-I$(top_srcdir) \
-I$(top_srcdir)/src/lib \
-DPACKAGE_DATA_DIR=\"$(datadir)/$(PACKAGE)\" \
-@ELEMENTARY_CFLAGS@
+@ELEMENTARY_CFLAGS@ @ELEMENTARY_X_CFLAGS@ @ELEMENTARY_FB_CFLAGS@
lib_LTLIBRARIES = libelementary.la
@@ -54,7 +54,7 @@ els_icon.h
libelementary_la_CFLAGS =
-libelementary_la_LIBADD = @my_libs@ @ELEMENTARY_LIBS@
+libelementary_la_LIBADD = @my_libs@ @ELEMENTARY_LIBS@ @ELEMENTARY_X_LIBS@ @ELEMENTARY_FB_LIBS@
libelementary_la_LDFLAGS = -version-info @version_info@
libelementary_la_DEPENDENCIES = $(top_builddir)/elementary_config.h
diff --git a/src/lib/elc_hoversel.c b/src/lib/elc_hoversel.c
index 5cca67f37..60923fef8 100644
--- a/src/lib/elc_hoversel.c
+++ b/src/lib/elc_hoversel.c
@@ -5,7 +5,7 @@ typedef struct _Widget_Data Widget_Data;
struct _Widget_Data
{
- Evas_Object *pop, *hover;
+ Evas_Object *btn, *hover;
Evas_Object *hover_parent;
const char *hover_style;
};
@@ -37,6 +37,8 @@ _sizing_eval(Evas_Object *obj)
Widget_Data *wd = elm_widget_data_get(obj);
Evas_Coord minw = -1, minh = -1, maxw = -1, maxh = -1;
+ evas_object_size_hint_min_get(wd->btn, &minw, &minh);
+ evas_object_size_hint_max_get(wd->btn, &maxw, &maxh);
evas_object_size_hint_min_set(obj, minw, minh);
evas_object_size_hint_max_set(obj, maxw, maxh);
}
@@ -54,6 +56,39 @@ _hover_clicked(void *data, Evas_Object *obj, void *event_info)
}
static void
+_button_clicked(void *data, Evas_Object *obj, void *event_info)
+{
+ Widget_Data *wd = elm_widget_data_get(data);
+ Evas_Object *bt, *bx, *ic;
+ wd->hover = elm_hover_add(data);
+ elm_hover_style_set(wd->hover, "hoversel_vertical");
+ evas_object_smart_callback_add(wd->hover, "clicked", _hover_clicked, data);
+ elm_hover_parent_set(wd->hover, wd->hover_parent);
+ elm_hover_target_set(wd->hover, wd->btn);
+
+ bx = elm_box_add(wd->hover);
+ elm_box_homogenous_set(bx, 1);
+
+ bt = elm_button_add(wd->hover);
+ elm_button_style_set(bt, "hoversel_vertical_entry");
+ elm_button_label_set(bt, "Forward");
+ evas_object_size_hint_weight_set(bt, 1.0, 0.0);
+ evas_object_size_hint_align_set(bt, -1.0, -1.0);
+ elm_box_pack_end(bx, bt);
+ evas_object_show(bt);
+
+ // FIXME: fill.
+
+ elm_hover_content_set
+ (wd->hover,
+ elm_hover_best_content_location_get(wd->hover, ELM_HOVER_AXIS_VERTICAL),
+ bx);
+ evas_object_show(bx);
+
+ evas_object_show(wd->hover);
+}
+
+static void
_parent_del(void *data, Evas *e, Evas_Object *obj, void *event_info)
{
Widget_Data *wd = elm_widget_data_get(data);
@@ -74,12 +109,12 @@ elm_hoversel_add(Evas_Object *parent)
elm_widget_del_pre_hook_set(obj, _del_pre_hook);
elm_widget_del_hook_set(obj, _del_hook);
-// wd->scroller = elm_scroller_add(parent);
-// elm_widget_resize_object_set(obj, wd->scroller);
-
-// evas_object_event_callback_add(wd->entry, EVAS_CALLBACK_CHANGED_SIZE_HINTS,
-// _changed_size_hints, obj);
-
+ wd->btn = elm_button_add(parent);
+ elm_button_style_set(wd->btn, "hoversel_vertical");
+ elm_widget_resize_object_set(obj, wd->btn);
+ evas_object_event_callback_add(wd->btn, EVAS_CALLBACK_CHANGED_SIZE_HINTS,
+ _changed_size_hints, obj);
+ evas_object_smart_callback_add(wd->btn, "clicked", _button_clicked, obj);
_sizing_eval(obj);
return obj;
}
@@ -96,20 +131,42 @@ elm_hoversel_hover_parent_set(Evas_Object *obj, Evas_Object *parent)
}
EAPI void
-elm_hoversel_hover_style_set(Evas_Object *obj, const char *style)
+elm_hoversel_label_set(Evas_Object *obj, const char *label)
{
Widget_Data *wd = elm_widget_data_get(obj);
- if (wd->hover_style) eina_stringshare_del(wd->hover_style);
- wd->hover_style = NULL;
- if (style) wd->hover_style = eina_stringshare_add(style);
-}
+ elm_button_label_set(wd->btn, label);
+}
+
+EAPI void
+elm_hoversel_icon_set(Evas_Object *obj, Evas_Object *icon)
+{
+ Widget_Data *wd = elm_widget_data_get(obj);
+ elm_button_icon_set(wd->btn, icon);
+}
EAPI void
elm_hoversel_hover_end(Evas_Object *obj)
{
Widget_Data *wd = elm_widget_data_get(obj);
if (wd->hover) evas_object_del(wd->hover);
- if (wd->pop) evas_object_del(wd->pop);
wd->hover = NULL;
- wd->pop = NULL;
+}
+
+EAPI void * // FIXME: return some sort of handle other than void *
+elm_hoversel_item_add(Evas_Object *obj, const char *label, const char *icon_file, int icon_type, void (*func) (void *data, Evas_Object *obj, void *event_into), const void *data)
+{
+ Widget_Data *wd = elm_widget_data_get(obj);
+ // FIXME: implement
+}
+
+EAPI void
+elm_hoversel_item_del(void *item)
+{
+ // FIXME: implement
+}
+
+EAPI void
+elm_hoversel_item_enabled_set(void *item, Evas_Bool enabled)
+{
+ // FIXME: implement
}
diff --git a/src/lib/elm_entry.c b/src/lib/elm_entry.c
index 174cb1fe1..9f596b90e 100644
--- a/src/lib/elm_entry.c
+++ b/src/lib/elm_entry.c
@@ -42,8 +42,10 @@ _del_hook(Evas_Object *obj)
{
Widget_Data *wd = elm_widget_data_get(obj);
entries = eina_list_remove(entries, obj);
+#ifdef HAVE_ELEMENTARY_X
ecore_event_handler_del(wd->sel_notify_handler);
ecore_event_handler_del(wd->sel_clear_handler);
+#endif
if (wd->cut_sel) eina_stringshare_del(wd->cut_sel);
if (wd->deferred_recalc_job) ecore_job_del(wd->deferred_recalc_job);
free(wd);
@@ -548,6 +550,7 @@ _signal_key_enter(void *data, Evas_Object *obj, const char *emission, const char
evas_object_smart_callback_call(data, "activated", NULL);
}
+#ifdef HAVE_ELEMENTARY_X
static int
_event_selection_notify(void *data, int type, void *event)
{
@@ -590,6 +593,7 @@ _event_selection_clear(void *data, int type, void *event)
}
return 1;
}
+#endif
EAPI Evas_Object *
elm_entry_add(Evas_Object *parent)
@@ -632,6 +636,7 @@ elm_entry_add(Evas_Object *parent)
elm_widget_resize_object_set(obj, wd->ent);
_sizing_eval(obj);
+#ifdef HAVE_ELEMENTARY_X
if (elm_win_xwindow_get(elm_widget_top_get(parent)) != 0)
{
wd->sel_notify_handler =
@@ -641,6 +646,7 @@ elm_entry_add(Evas_Object *parent)
ecore_event_handler_add(ECORE_X_EVENT_SELECTION_CLEAR,
_event_selection_clear, obj);
}
+#endif
entries = eina_list_prepend(entries, obj);
return obj;
diff --git a/src/lib/elm_main.c b/src/lib/elm_main.c
index 097547124..a90ee0426 100644
--- a/src/lib/elm_main.c
+++ b/src/lib/elm_main.c
@@ -2,7 +2,9 @@
#include "elm_priv.h"
static int _elm_signal_exit(void *data, int ev_type, void *ev);
+#ifdef HAVE_ELEMENTARY_X
static int _elm_window_property_change(void *data, int ev_type, void *ev);
+#endif
static void _elm_rescale(void);
char *_elm_appname = NULL;
@@ -17,6 +19,7 @@ _elm_signal_exit(void *data, int ev_type, void *ev)
return 1;
}
+#ifdef HAVE_ELEMENTARY_X
static int
_elm_window_property_change(void *data, int ev_type, void *ev)
{
@@ -42,6 +45,7 @@ _elm_window_property_change(void *data, int ev_type, void *ev)
}
return 1;
}
+#endif
static void
_elm_rescale(void)
@@ -55,6 +59,7 @@ EAPI void
elm_init(int argc, char **argv)
{
int i;
+ const char *elm_engine, *elm_scale;
eet_init();
ecore_init();
@@ -68,14 +73,46 @@ elm_init(int argc, char **argv)
_elm_appname = strdup(ecore_file_file_get(argv[0]));
+ elm_engine = getenv("ELM_ENGINE");
+ elm_scale = getenv("ELM_SCALE");
+
// FIXME: actually load config
_elm_config = ELM_NEW(Elm_Config);
_elm_config->engine = ELM_SOFTWARE_X11;
+ if (elm_engine)
+ {
+ if ((!strcasecmp(elm_engine, "x11")) ||
+ (!strcasecmp(elm_engine, "x")) ||
+ (!strcasecmp(elm_engine, "software-x11")) ||
+ (!strcasecmp(elm_engine, "software_x11")))
+ _elm_config->engine = ELM_SOFTWARE_X11;
+ else if ((!strcasecmp(elm_engine, "x11-16")) ||
+ (!strcasecmp(elm_engine, "x16")) ||
+ (!strcasecmp(elm_engine, "software-16-x11")) ||
+ (!strcasecmp(elm_engine, "software_16_x11")))
+ _elm_config->engine = ELM_SOFTWARE_16_X11;
+ else if ((!strcasecmp(elm_engine, "xrender")) ||
+ (!strcasecmp(elm_engine, "xr")) ||
+ (!strcasecmp(elm_engine, "xrender-x11")) ||
+ (!strcasecmp(elm_engine, "xrender_x11")))
+ _elm_config->engine = ELM_XRENDER_X11;
+ else if ((!strcasecmp(elm_engine, "fb")) ||
+ (!strcasecmp(elm_engine, "software-fb")) ||
+ (!strcasecmp(elm_engine, "software_fb")))
+ _elm_config->engine = ELM_SOFTWARE_FB;
+ else if ((!strcasecmp(elm_engine, "opengl")) ||
+ (!strcasecmp(elm_engine, "gl")) ||
+ (!strcasecmp(elm_engine, "opengl-x11")) ||
+ (!strcasecmp(elm_engine, "opengl_x11")))
+ _elm_config->engine = ELM_OPENGL_X11;
+ }
+
_elm_config->thumbscroll_enable = 1;
_elm_config->thumbscroll_threshhold = 24;
_elm_config->thumbscroll_momentum_threshhold = 100.0;
_elm_config->thumbscroll_friction = 1.0;
_elm_config->scale = 1.0;
+
_elm_config->bgpixmap = 0;
_elm_config->compositing = 1;
@@ -84,6 +121,7 @@ elm_init(int argc, char **argv)
(_elm_config->engine == ELM_XRENDER_X11) ||
(_elm_config->engine == ELM_OPENGL_X11))
{
+#ifdef HAVE_ELEMENTARY_X
int val = 1000;
ecore_x_init(NULL);
@@ -100,14 +138,31 @@ elm_init(int argc, char **argv)
}
if (!ecore_x_screen_is_composited(0))
_elm_config->compositing = 0;
+#endif
}
-
+
+ if (elm_scale)
+ {
+ _elm_config->scale = atof(elm_scale);
+ }
}
EAPI void
elm_shutdown(void)
{
_elm_win_shutdown();
+
+ if ((_elm_config->engine == ELM_SOFTWARE_X11) ||
+ (_elm_config->engine == ELM_SOFTWARE_16_X11) ||
+ (_elm_config->engine == ELM_XRENDER_X11) ||
+ (_elm_config->engine == ELM_OPENGL_X11))
+ {
+#ifdef HAVE_ELEMENTARY_X
+ ecore_event_handler_del(_elm_event_property_change);
+ _elm_event_property_change = NULL;
+ ecore_x_shutdown();
+#endif
+ }
free(_elm_config);
free(_elm_appname);
diff --git a/src/lib/elm_priv.h b/src/lib/elm_priv.h
index 566e89a3e..fe38b76d6 100644
--- a/src/lib/elm_priv.h
+++ b/src/lib/elm_priv.h
@@ -3,6 +3,12 @@
#include "elementary_config.h"
+#ifdef HAVE_ELEMENTARY_X
+#include <Ecore_X.h>
+#endif
+#ifdef HAVE_ELEMENTARY_FB
+#include <Ecore_Fb.h>
+#endif
#ifdef HAVE_ALLOCA_H
#include <alloca.h>
#endif
diff --git a/src/lib/elm_win.c b/src/lib/elm_win.c
index 2d55aa57f..8a3801c38 100644
--- a/src/lib/elm_win.c
+++ b/src/lib/elm_win.c
@@ -10,7 +10,9 @@ struct _Elm_Win
Evas_Object *parent;
Evas_Object *win_obj;
Eina_List *subobjs;
+#ifdef HAVE_ELEMENTARY_X
Ecore_X_Window xwin;
+#endif
Ecore_Job *deferred_resize_job;
Ecore_Job *deferred_child_eval_job;
@@ -34,7 +36,9 @@ static void _elm_win_obj_callback_del(void *data, Evas *e, Evas_Object *obj, voi
static void _elm_win_obj_callback_changed_size_hints(void *data, Evas *e, Evas_Object *obj, void *event_info);
static void _elm_win_delete_request(Ecore_Evas *ee);
static void _elm_win_resize_job(void *data);
+#ifdef HAVE_ELEMENTARY_X
static void _elm_win_xwin_update(Elm_Win *win);
+#endif
static void _elm_win_eval_subobjs(Evas_Object *obj);
static void _elm_win_subobj_callback_del(void *data, Evas *e, Evas_Object *obj, void *event_info);
static void _elm_win_subobj_callback_changed_size_hints(void *data, Evas *e, Evas_Object *obj, void *event_info);
@@ -78,7 +82,19 @@ static void
_elm_win_obj_intercept_resize(void *data, Evas_Object *obj, Evas_Coord w, Evas_Coord h)
{
Elm_Win *win = data;
- ecore_evas_resize(win->ee, w, h);
+ switch (_elm_config->engine)
+ {
+ case ELM_SOFTWARE_FB:
+ break;
+ case ELM_SOFTWARE_X11:
+ case ELM_SOFTWARE_16_X11:
+ case ELM_XRENDER_X11:
+ case ELM_OPENGL_X11:
+ ecore_evas_resize(win->ee, w, h);
+ break;
+ default:
+ break;
+ }
}
static void
@@ -249,6 +265,7 @@ _elm_win_xwindow_get(Elm_Win *win)
static void
_elm_win_xwin_update(Elm_Win *win)
{
+#ifdef HAVE_ELEMENTARY_X
_elm_win_xwindow_get(win);
if (win->parent)
{
@@ -281,6 +298,7 @@ _elm_win_xwin_update(Elm_Win *win)
if (win->xwin)
ecore_x_e_virtual_keyboard_state_set
(win->xwin, (Ecore_X_Virtual_Keyboard_State)win->kbdmode);
+#endif
}
static void
@@ -367,7 +385,6 @@ elm_win_add(Evas_Object *parent, const char *name, Elm_Win_Type type)
break;
case ELM_SOFTWARE_FB:
win->ee = ecore_evas_fb_new(NULL, 0, 1, 1);
- ecore_evas_fullscreen_set(win->ee, 1);
break;
case ELM_SOFTWARE_16_X11:
win->ee = ecore_evas_software_x11_16_new(NULL, 0, 0, 0, 1, 1);
@@ -430,13 +447,25 @@ elm_win_add(Evas_Object *parent, const char *name, Elm_Win_Type type)
// evas_font_hinting_set(win->evas, EVAS_FONT_HINTING_NONE);
// evas_font_hinting_set(win->evas, EVAS_FONT_HINTING_AUTO);
// evas_font_hinting_set(win->evas, EVAS_FONT_HINTING_BYTECODE);
- edje_frametime_set(1.0 / 30.0);
+ edje_frametime_set(1.0 / 60.0);
edje_scale_set(_elm_config->scale);
_elm_win_xwin_update(win);
_elm_win_list = eina_list_append(_elm_win_list, win->win_obj);
+ switch (_elm_config->engine)
+ {
+ case ELM_SOFTWARE_FB:
+ ecore_evas_fullscreen_set(win->ee, 1);
+ break;
+ case ELM_SOFTWARE_X11:
+ case ELM_SOFTWARE_16_X11:
+ case ELM_XRENDER_X11:
+ case ELM_OPENGL_X11:
+ default:
+ break;
+ }
return win->win_obj;
}
@@ -545,9 +574,11 @@ elm_win_keyboard_mode_set(Evas_Object *obj, Elm_Win_Keyboard_Mode mode)
if (mode == win->kbdmode) return;
_elm_win_xwindow_get(win);
win->kbdmode = mode;
+#ifdef HAVE_ELEMENTARY_X
if (win->xwin)
ecore_x_e_virtual_keyboard_state_set
(win->xwin, (Ecore_X_Virtual_Keyboard_State)win->kbdmode);
+#endif
}
EAPI void
@@ -556,9 +587,11 @@ elm_win_keyboard_win_set(Evas_Object *obj, Evas_Bool is_keyboard)
Elm_Win *win = evas_object_data_get(obj, "__Elm");
if (!win) return;
_elm_win_xwindow_get(win);
+#ifdef HAVE_ELEMENTARY_X
if (win->xwin)
ecore_x_e_virtual_keyboard_set
(win->xwin, is_keyboard);
+#endif
}
EAPI Ecore_X_Window