src/item.c
src/item_badge.c
src/item_event.c
+ src/key.c
src/layout.c
src/list.c
src/mapbuf.c
description {
state: "default" 0.0;
rel1 { relative: 0.0 134/1210; to, "bg"; } // 154 - 70
- rel2 { relative: 1.0 1194/1210; to, "bg"; }
+ rel2 { relative: 1.0 1164/1210; to, "bg"; }
color: 34 34 34 255;
visible: 0;
}
mouse_events: 1;
description {
state: "default" 0.0;
- rel1 { relative: 0.5 54/ITEM_HEIGHT; }
- rel2 { relative: 0.5 54/ITEM_HEIGHT; }
+ rel1 { relative: 0.5 60/ITEM_HEIGHT; to: "bg"; }
+ rel2 { relative: 0.5 60/ITEM_HEIGHT; to: "bg"; }
+ align: 0.5 0.5;
min: 117 117;
fixed: 1 1;
}
description
{
state: "default" 0.0;
- rel1 { relative: 0.0 1.0; to_x, "bg"; to_y, "icon_image"; }
+ rel1 { relative: 0.0 1.0; to_x, "bg"; to_y, "icon_image"; offset: 0 7; }
rel2 { relative: 1.0 1.0; to, "bg"; }
align: 0.5 0.0;
color: 255 255 255 255;
visible: 1;
}
}
+ part {
+ name: "content,blocker";
+ type: RECT;
+ scale: 1;
+ mouse_events: 1;
+ repeat_events: 0;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: 0.0 0.0; }
+ rel2 { relative: 1.0 1.0; }
+ color: 0 0 0 0;
+ visible: 0;
+ }
+ description {
+ state: "block" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ }
}
programs {
+ program {
+ name: "block,content";
+ signal: "block";
+ source: "layout";
+ action: STATE_SET "block" 0.0;
+ target: "content,blocker";
+ }
+ program {
+ name: "unblock,content";
+ signal: "unblock";
+ source: "layout";
+ action: STATE_SET "default" 0.0;
+ target: "content,blocker";
+ }
}
} // group
} // collections
<?xml version="1.0" encoding="utf-8"?>
-<manifest xmlns="http://tizen.org/ns/packages" package="@PACKAGE_NAME@" version="1.1.11" install-location="internal-only">
+<manifest xmlns="http://tizen.org/ns/packages" package="@PACKAGE_NAME@" version="1.1.12" install-location="internal-only">
<label>Simple Menu-screen</label>
<author email="jinny.yoon@samsung.com" href="www.samsung.com">Jin Yoon</author>
<author email="yjoo93.park@samsung.com" href="www.samsung.com">Youngjoo Park</author>
#define PAGE_MAX_APP 16
+extern bool all_apps_layout_is_edited(Evas_Object *all_apps);
+extern void all_apps_layout_edit(Evas_Object *all_apps);
+extern void all_apps_layout_unedit(Evas_Object *all_apps);
+
extern Evas_Object *all_apps_layout_create(Evas_Object *controlbar, int rotate);
extern void all_apps_layout_destroy(Evas_Object *all_apps);
#define BASE_HEIGHT 1280.0f
#define BASE_WIDTH 720.0f
-#define PAGE_PORTRAIT_HEIGHT 1060.0f
+#define PAGE_PORTRAIT_HEIGHT 1030.0f
#define INDEX_HEIGHT 70
#define ITEM_WIDTH 180.0
--- /dev/null
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __MENU_SCREEN_INPUT_KEY_H__
+#define __MENU_SCREEN_INPUT_KEY_H__
+
+#include "util.h"
+
+HAPI void key_register(void);
+HAPI void key_unregister(void);
+HAPI void key_grab_home(void);
+HAPI void key_ungrab_home(void);
+
+#endif //__MENU_SCREEN_INPUT_KEY_H__
+
+// End of a file
#ifndef __MENU_SCREEN_POPUP_H__
#define __MENU_SCREEN_POPUP_H__
-extern void popup_append_list(Evas_Object *popup);
-extern void popup_remove_list(Evas_Object *popup);
-extern void popup_free_list();
-
-extern Evas_Object *popup_create(Evas_Object *parent, const char *warning);
-extern void popup_destroy(Evas_Object *popup);
+extern Evas_Object *popup_exist(void);
+extern void popup_destroy_all(void);
+extern Evas_Object *popup_create_confirm(Evas_Object *parent, const char *warning);
extern Evas_Object *popup_create_uninstall(Evas_Object *parent, Evas_Object *item);
#endif //__MENU_SCREEN_POPUP_H__
Name: org.tizen.menu-screen
Summary: An utility library of the menu screen
-Version: 1.1.11
+Version: 1.1.12
Release: 1.1
Group: TO_BE/FILLED_IN
License: Flora Software License
#include "conf.h"
#include "index.h"
#include "item_event.h"
+#include "key.h"
#include "layout.h"
#include "list.h"
#include "page_scroller.h"
+#include "popup.h"
#include "util.h"
#include "all_apps/layout.h"
#include "all_apps/list.h"
#define IDS_HS_BUTTON_DONE "IDS_HS_BUTTON_DONE"
+
+HAPI bool all_apps_layout_is_edited(Evas_Object *all_apps)
+{
+ retv_if(NULL == all_apps, false);
+ return (bool) evas_object_data_get(all_apps, "is_edited");
+}
+
+
+
HAPI void all_apps_layout_edit(Evas_Object *all_apps)
{
Evas_Object *edit_button;
Evas_Object *scroller;
+ evas_object_data_set(all_apps, "is_edited", (void *) true);
+
edit_button = elm_object_part_content_get(all_apps, ALL_APPS_EDIT_BUTTON_PART);
ret_if(NULL == edit_button);
elm_object_signal_emit(edit_button, "edit_button_state,edit", "menu");
scroller = elm_object_part_content_get(all_apps, "content");
ret_if(NULL == scroller);
page_scroller_edit(scroller);
+
+ key_grab_home();
}
ret_if(NULL == all_apps);
+ key_ungrab_home();
+ popup_destroy_all();
+
+ bool is_edited = (bool) evas_object_data_get(all_apps, "is_edited");
+ if (false == is_edited) return;
+
do {
edit_button = elm_object_part_content_get(all_apps, ALL_APPS_EDIT_BUTTON_PART);
ret_if(NULL == edit_button);
evas_object_data_set(all_apps, "is_under_pkgmgr", (void *) true);
evas_object_data_set(all_apps, "rotate", (void *) rotate);
evas_object_data_set(all_apps, "enable_bg_image", (void *) true);
+ evas_object_data_set(all_apps, "is_edited", (void *) true);
evas_object_size_hint_min_set(all_apps, width, height);
evas_object_size_hint_max_set(all_apps, width, height);
evas_object_resize(all_apps, width, height);
evas_object_data_del(all_apps, "is_under_pkgmgr");
evas_object_data_del(all_apps, "rotate");
evas_object_data_del(all_apps, "enable_bg_image");
+ evas_object_data_del(all_apps, "is_edited");
evas_object_del(all_apps);
}
}
snprintf(sinform, len, D_("IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS"), name);
- popup_create(obj, sinform);
+ popup_create_confirm(obj, sinform);
free(sinform);
layout_disable_block(layout);
--- /dev/null
+ /*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#include <stdlib.h>
+#include <Elementary.h>
+#include <utilX.h>
+#include <Ecore_X.h>
+
+#include "conf.h"
+#include "key.h"
+#include "menu_screen.h"
+#include "page_scroller.h"
+#include "popup.h"
+#include "util.h"
+#include "all_apps/layout.h"
+
+
+
+static struct {
+ Eina_Bool pressed;
+ Ecore_Event_Handler *press_handler;
+ Ecore_Event_Handler *release_handler;
+ Eina_Bool register_handler;
+ Ecore_Timer *long_press;
+ Eina_Bool home_grabbed;
+} key_info = {
+ .pressed = 0,
+ .press_handler = NULL,
+ .release_handler = NULL,
+ .register_handler = EINA_FALSE,
+ .long_press = NULL,
+ .home_grabbed = EINA_FALSE,
+};
+
+
+
+#define KEY_LEFT "Left"
+#define KEY_RIGHT "Right"
+static Eina_Bool _key_release_cb(void *data, int type, void *event)
+{
+ Evas_Event_Key_Up *ev = event;
+
+ retv_if(EINA_FALSE == key_info.register_handler, ECORE_CALLBACK_CANCEL);
+ retv_if(NULL == ev, ECORE_CALLBACK_CANCEL);
+
+ _D("Key(%s) released %d", ev->keyname, key_info.pressed);
+
+ if (key_info.pressed == EINA_FALSE) return ECORE_CALLBACK_CANCEL;
+
+ do {
+ Evas_Object *win;
+ win = menu_screen_get_win();
+ break_if(NULL == win);
+
+ Evas_Object *layout;
+ layout = evas_object_data_get(win, "layout");
+ break_if(NULL == layout);
+
+ Evas_Object *all_apps;
+ all_apps = evas_object_data_get(layout, "all_apps");
+ break_if(NULL == all_apps);
+
+ Evas_Object *scroller = evas_object_data_get(all_apps, "scroller");
+ break_if(NULL == scroller);
+
+ if (!strcmp(ev->keyname, KEY_SELECT) || !strcmp(ev->keyname, KEY_BACK)) {
+ if (popup_exist()) {
+ popup_destroy_all();
+ break;
+ }
+
+ if (all_apps_layout_is_edited(all_apps)) {
+ all_apps_layout_unedit(all_apps);
+ }
+ } else if (!strcmp(ev->keyname, KEY_LEFT) || !strcmp(ev->keyname, KEY_RIGHT)) {
+
+ int cur_idx = page_scroller_get_current_page_no(scroller);
+
+ int idx = 0, x = 0, w = 0;
+ elm_scroller_region_get(scroller, &x, NULL, &w, NULL);
+
+ if (w) idx = x / w;
+ if (cur_idx != idx) {
+ page_scroller_bring_in(scroller, idx);
+ }
+ }
+ } while (0);
+
+ key_info.pressed = EINA_FALSE;
+
+ return ECORE_CALLBACK_CANCEL;
+}
+
+
+
+static Eina_Bool _key_press_cb(void *data, int type, void *event)
+{
+ Evas_Event_Key_Down *ev = event;
+
+ retv_if(EINA_FALSE == key_info.register_handler, ECORE_CALLBACK_CANCEL);
+ retv_if(NULL == ev, ECORE_CALLBACK_CANCEL);
+
+ key_info.pressed = EINA_TRUE;
+ _D("Key pressed %d", key_info.pressed);
+
+ return ECORE_CALLBACK_CANCEL;
+}
+
+
+
+HAPI void key_register(void)
+{
+ if (!key_info.release_handler) {
+ key_info.release_handler = ecore_event_handler_add(ECORE_EVENT_KEY_UP, _key_release_cb, NULL);
+ if (!key_info.release_handler) {
+ _E("Failed to register a key up event handler");
+ }
+ }
+
+ if (!key_info.press_handler) {
+ key_info.press_handler = ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, _key_press_cb, NULL);
+ if (!key_info.press_handler) {
+ _E("Failed to register a key down event handler");
+ }
+ }
+
+ key_info.pressed = EINA_FALSE;
+ key_info.register_handler = EINA_TRUE;
+}
+
+
+
+HAPI void key_unregister(void)
+{
+ if (key_info.long_press) {
+ ecore_timer_del(key_info.long_press);
+ key_info.long_press = NULL;
+ }
+
+ if (key_info.release_handler) {
+ ecore_event_handler_del(key_info.release_handler);
+ key_info.release_handler = NULL;
+ }
+
+ if (key_info.press_handler) {
+ ecore_event_handler_del(key_info.press_handler);
+ key_info.press_handler = NULL;
+ }
+
+ key_info.register_handler = EINA_FALSE;
+}
+
+
+
+HAPI void key_grab_home(void)
+{
+ if (EINA_TRUE == key_info.home_grabbed) return;
+
+ Ecore_X_Window win = elm_win_xwindow_get(menu_screen_get_win());
+ Display* dpy = ecore_x_display_get();
+
+ int ret = utilx_grab_key(dpy, win, KEY_SELECT, TOP_POSITION_GRAB);
+ ret_if(0 != ret);
+
+ ret = utilx_grab_key(dpy, win, KEY_BACK, TOP_POSITION_GRAB);
+ ret_if(0 != ret);
+
+ key_info.home_grabbed = EINA_TRUE;
+}
+
+
+
+HAPI void key_ungrab_home(void)
+{
+ if (key_info.home_grabbed == EINA_FALSE) return;
+
+ Ecore_X_Window win = elm_win_xwindow_get(menu_screen_get_win());
+ Display* dpy = ecore_x_display_get();
+
+ int ret = utilx_ungrab_key(dpy, win, KEY_SELECT);
+ ret_if(0 != ret);
+
+ ret = utilx_ungrab_key(dpy, win, KEY_BACK);
+ ret_if(0 != ret);
+
+ key_info.home_grabbed = EINA_FALSE;
+}
+
+
+
+// End of a file
#include "conf.h"
#include "item.h"
+#include "key.h"
#include "layout.h"
#include "mapbuf.h"
#include "menu_screen.h"
elm_object_content_set(conformant, layout);
mouse_register();
aul_listen_app_dead_signal(_dead_cb, NULL);
+ key_register();
return true;
}
evas_object_hide(menu_screen_info.win);
+ key_unregister();
mouse_unregister();
layout = evas_object_data_del(menu_screen_info.win, "layout");
-static int _count_pages(Evas_Object *scroller)
-{
- const Eina_List *children;
- Evas_Object *box;
-
- box = evas_object_data_get(scroller, "box");
- retv_if(NULL == box, 0);
-
- children = elm_box_children_get(box);
- return eina_list_count(children);
-}
-
-
-
HAPI void page_scroller_bring_in(Evas_Object *scroller, int idx)
{
Evas_Object *index;
#define BUFSZE 1024
-static void _response_cb(void *data, Evas_Object *obj, void *event_info)
-{
+
+static struct {
Evas_Object *popup;
+} popup_info = {
+ .popup = NULL,
+};
+
+
+
+HAPI Evas_Object *popup_exist(void)
+{
+ return popup_info.popup;
+}
+
+
+
+HAPI void popup_destroy_all(void)
+{
+ void (*_destroy_popup)(void *data, Evas_Object *obj, void *event_info);
+
+ if (NULL == popup_info.popup) return;
+
+ _destroy_popup = evas_object_data_get(popup_info.popup, "func_destroy_popup");
+ if (_destroy_popup) _destroy_popup(popup_info.popup, NULL, NULL);
+
+ popup_info.popup = NULL;
+}
+
+
+static void _response_cb(void *data, Evas_Object *obj, void *event_info)
+{
ret_if(NULL == data);
- popup = data;
+
+ Evas_Object *popup = data;
+ evas_object_data_del(popup, "func_destroy_popup");
+ popup_info.popup = NULL;
+
evas_object_del(evas_object_data_del(popup, "button"));
+ evas_object_smart_callback_del(popup, "block,clicked", _response_cb);
evas_object_del(popup);
}
-HAPI Evas_Object *popup_create(Evas_Object *parent, const char *warning)
+HAPI Evas_Object *popup_create_confirm(Evas_Object *parent, const char *warning)
{
Evas_Object *popup;
Evas_Object *btn;
retv_if(NULL == warning, NULL);
+ popup_destroy_all();
+
popup = elm_popup_add(parent);
retv_if(NULL == popup, NULL);
+ evas_object_smart_callback_add(popup, "block,clicked", _response_cb, popup);
+
btn = elm_button_add(popup);
if (NULL == btn) {
evas_object_del(popup);
elm_object_part_content_set(popup, "button1", btn);
evas_object_smart_callback_add(btn, "clicked", _response_cb, popup);
-
evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
elm_object_part_text_set(popup, "title,text", D_("IDS_COM_POP_WARNING"));
elm_object_text_set(popup, warning);
+ elm_popup_orient_set(popup, ELM_POPUP_ORIENT_CENTER);
evas_object_show(popup);
+ evas_object_data_set(popup, "func_destroy_popup", _response_cb);
+ popup_info.popup = popup;
+
return popup;
}
-static void _uninstall_yes_cb(void *data, Evas_Object *obj, void *event_info)
+
+static void _uninstall_no_cb(void *data, Evas_Object *obj, void *event_info)
{
- Evas_Object *popup;
- Evas_Object *item;
+ ret_if(NULL == data);
+
+ Evas_Object *popup = data;
+ evas_object_data_del(popup, "func_destroy_popup");
+ popup_info.popup = NULL;
+ evas_object_del(evas_object_data_del(popup, "button1"));
+ evas_object_del(evas_object_data_del(popup, "button2"));
+ evas_object_data_del(popup, "item");
+ evas_object_smart_callback_del(popup, "block,clicked", _uninstall_no_cb);
+ evas_object_del(popup);
+}
+
+
+
+static void _uninstall_yes_cb(void *data, Evas_Object *obj, void *event_info)
+{
ret_if(NULL == data);
- popup = data;
+ Evas_Object *popup = data;
+ evas_object_data_del(popup, "func_destroy_popup");
+ popup_info.popup = NULL;
+
+ Evas_Object *item;
item = evas_object_data_del(popup, "item");
evas_object_del(evas_object_data_del(popup, "button1"));
evas_object_del(evas_object_data_del(popup, "button2"));
+ evas_object_smart_callback_del(popup, "block,clicked", _uninstall_no_cb);
evas_object_del(popup);
bool is_shortcut = false;
-static void _uninstall_no_cb(void *data, Evas_Object *obj, void *event_info)
-{
- Evas_Object *popup;
-
- ret_if(NULL == data);
- popup = data;
- evas_object_del(evas_object_data_del(popup, "button1"));
- evas_object_del(evas_object_data_del(popup, "button2"));
- evas_object_data_del(popup, "item");
- evas_object_del(popup);
-}
-
-
-
#define IDS_AT_POP_UNINSTALL_PS_Q "IDS_AT_POP_UNINSTALL_PS_Q"
HAPI Evas_Object *popup_create_uninstall(Evas_Object *parent, Evas_Object *item)
{
Evas_Object *btn2;
char warning[BUFSZE];
+ popup_destroy_all();
+
popup = elm_popup_add(parent);
retv_if(NULL == popup, NULL);
evas_object_data_set(popup, "item", item);
+ evas_object_smart_callback_add(popup, "block,clicked", _uninstall_no_cb, popup);
btn1 = elm_button_add(popup);
if (NULL == btn1) {
evas_object_smart_callback_add(btn2, "clicked", _uninstall_no_cb, popup);
evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_data_set(popup, "func_destroy_popup", _uninstall_no_cb);
+ popup_info.popup = popup;
evas_object_show(popup);
char *name= item_get_name(item);