--- /dev/null
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+PROJECT(cbhm C)
+
+SET(PREFIX ${CMAKE_INSTALL_PREFIX})
+SET(LIBDIR "${PREFIX}/lib")
+SET(DATADIR "${PREFIX}/share")
+SET(LOCALEDIR "${DATADIR}/locale")
+SET(VERSION 0.1.0)
+
+SET(SRCS src/main.c
+ src/item_manager.c
+ src/xconverter.c
+ src/xhandler.c
+ src/clipdrawer.c
+ src/storage.c
+)
+
+INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR})
+
+IF ( MDM_ENABLE )
+ ADD_DEFINITIONS( -DMDM_ENABLE )
+ SET(MDM_REQUIRED_PKGS "mdm")
+ENDIF ( MDM_ENABLE )
+
+INCLUDE(FindPkgConfig)
+ pkg_check_modules(pkgs REQUIRED elementary eet appcore-efl appcore-common x11 ecore-x utilX eina evas ecore ecore-file ecore-evas edje ecore-input notification vconf vconf-internal-keys libsystemd-daemon ${MDM_REQUIED_PKGS})
+
+FOREACH(flag ${pkgs_CFLAGS})
+ SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
+ENDFOREACH(flag)
+
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} -fvisibility=hidden -Wall -fPIC -g")
+
+ADD_DEFINITIONS("-DPREFIX=\"${CMAKE_INSTALL_PREFIX}\"")
+
+ADD_EXECUTABLE(${PROJECT_NAME} ${SRCS})
+#for XV extension screenshot
+TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${pkgs_LDFLAGS})
+
+ADD_CUSTOM_TARGET(cbhmdrawer.edj
+ COMMAND edje_cc
+ -id ${CMAKE_CURRENT_SOURCE_DIR}/data/images
+ -sd ${CMAKE_CURRENT_SOURCE_DIR}/data/sounds
+ ${CMAKE_SOURCE_DIR}/data/themes/cbhmdrawer.edc ${CMAKE_BINARY_DIR}/data/themes/cbhmdrawer.edj
+ DEPENDS ${CMAKE_SOURCE_DIR}/data/themes/cbhmdrawer.edc
+)
+ADD_DEPENDENCIES(${PROJECT_NAME} cbhmdrawer.edj)
+
+INSTALL(TARGETS ${PROJECT_NAME} DESTINATION bin)
+INSTALL(FILES ${CMAKE_BINARY_DIR}/data/themes/cbhmdrawer.edj DESTINATION ${DATADIR}/edje)
+INSTALL(FILES ${CMAKE_BINARY_DIR}/data/tables/_ChangeableColorInfo.xml DESTINATION ${DATADIR}/tables)
+INSTALL(FILES ${CMAKE_BINARY_DIR}/data/tables/_ChangeableFontInfo.xml DESTINATION ${DATADIR}/tables)
+ADD_SUBDIRECTORY(po)
+INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/../systemd/cbhm.service DESTINATION ${LIBDIR}/systemd/user)
+INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/../systemd/cbhm.service DESTINATION ${LIBDIR}/systemd/system)
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<ChangeableColorTable num="1">
+ <Theme style="Dark">
+ <ChangeableColorInfo id="AO001" inputColor="W" hue="0" saturation="0" value="-72" alpha="100" />
+ <ChangeableColorInfo id="AO002L1" inputColor="W" hue="51" saturation="12" value="-3" alpha="100" />
+ <ChangeableColorInfo id="AO002L2" inputColor="W" hue="0" saturation="0" value="0" alpha="100" />
+ <ChangeableColorInfo id="AO003" inputColor="W" hue="0" saturation="0" value="0" alpha="100" />
+ <ChangeableColorInfo id="AO004" inputColor="K" hue="0" saturation="0" value="0" alpha="50" />
+ <ChangeableColorInfo id="AO004P" inputColor="3" hue="-8" saturation="3" value="-57" alpha="100" />
+ <ChangeableColorInfo id="AO004L1" inputColor="W" hue="0" saturation="0" value="0" alpha="25" />
+ <ChangeableColorInfo id="AO005" inputColor="W" hue="0" saturation="0" value="0" alpha="100" />
+ <ChangeableColorInfo id="AO005P" inputColor="3" hue="-8" saturation="3" value="-57" alpha="100" />
+ <ChangeableColorInfo id="AO006" inputColor="K" hue="0" saturation="0" value="8" alpha="100" />
+ <ChangeableColorInfo id="AO006L1" inputColor="W" hue="0" saturation="0" value="0" alpha="8" />
+ <ChangeableColorInfo id="ATO001" inputColor="K" hue="0" saturation="0" value="0" alpha="100" />
+ <ChangeableColorInfo id="ATO002" inputColor="K" hue="0" saturation="0" value="0" alpha="100" />
+ <ChangeableColorInfo id="ATO003" inputColor="W" hue="0" saturation="0" value="0" alpha="100" />
+ <ChangeableColorInfo id="ATO004" inputColor="W" hue="0" saturation="0" value="0" alpha="100" />
+ <ChangeableColorInfo id="ATO004P" inputColor="W" hue="0" saturation="0" value="0" alpha="100" />
+ <ChangeableColorInfo id="ATO004D" inputColor="W" hue="0" saturation="0" value="0" alpha="40" />
+ </Theme>
+ <Theme style="Light">
+ <ChangeableColorInfo id="AO001" inputColor="W" hue="0" saturation="0" value="-72" alpha="100" />
+ <ChangeableColorInfo id="AO002L1" inputColor="W" hue="51" saturation="12" value="-3" alpha="100" />
+ <ChangeableColorInfo id="AO002L2" inputColor="W" hue="0" saturation="0" value="0" alpha="100" />
+ <ChangeableColorInfo id="AO003" inputColor="W" hue="0" saturation="0" value="0" alpha="100" />
+ <ChangeableColorInfo id="AO004" inputColor="K" hue="0" saturation="0" value="0" alpha="50" />
+ <ChangeableColorInfo id="AO004P" inputColor="3" hue="-8" saturation="3" value="-57" alpha="100" />
+ <ChangeableColorInfo id="AO004L1" inputColor="W" hue="0" saturation="0" value="0" alpha="25" />
+ <ChangeableColorInfo id="AO005" inputColor="W" hue="0" saturation="0" value="0" alpha="100" />
+ <ChangeableColorInfo id="AO005P" inputColor="3" hue="-8" saturation="3" value="-57" alpha="100" />
+ <ChangeableColorInfo id="AO006" inputColor="K" hue="0" saturation="0" value="8" alpha="100" />
+ <ChangeableColorInfo id="AO006L1" inputColor="W" hue="0" saturation="0" value="0" alpha="8" />
+ <ChangeableColorInfo id="ATO001" inputColor="K" hue="0" saturation="0" value="0" alpha="100" />
+ <ChangeableColorInfo id="ATO002" inputColor="K" hue="0" saturation="0" value="0" alpha="100" />
+ <ChangeableColorInfo id="ATO003" inputColor="W" hue="0" saturation="0" value="0" alpha="100" />
+ <ChangeableColorInfo id="ATO004" inputColor="W" hue="0" saturation="0" value="0" alpha="100" />
+ <ChangeableColorInfo id="ATO004P" inputColor="W" hue="0" saturation="0" value="0" alpha="100" />
+ <ChangeableColorInfo id="ATO004D" inputColor="W" hue="0" saturation="0" value="0" alpha="40" />
+ </Theme>
+</ChangeableColorTable>
+<ChangeableColorTable num="2">
+ <Theme style="Dark">
+ <ChangeableColorInfo id="AO001" inputColor="W" hue="0" saturation="0" value="-72" alpha="100" />
+ <ChangeableColorInfo id="AO002L1" inputColor="4" hue="0" saturation="-3" value="11" alpha="100" />
+ <ChangeableColorInfo id="AO002L2" inputColor="W" hue="0" saturation="0" value="0" alpha="100" />
+ <ChangeableColorInfo id="AO003" inputColor="W" hue="0" saturation="0" value="0" alpha="100" />
+ <ChangeableColorInfo id="AO004" inputColor="K" hue="0" saturation="0" value="0" alpha="50" />
+ <ChangeableColorInfo id="AO004P" inputColor="3" hue="0" saturation="0" value="0" alpha="100" />
+ <ChangeableColorInfo id="AO004L1" inputColor="W" hue="0" saturation="0" value="0" alpha="25" />
+ <ChangeableColorInfo id="AO005" inputColor="W" hue="0" saturation="0" value="0" alpha="100" />
+ <ChangeableColorInfo id="AO005P" inputColor="3" hue="0" saturation="0" value="0" alpha="100" />
+ <ChangeableColorInfo id="AO006" inputColor="K" hue="0" saturation="0" value="8" alpha="100" />
+ <ChangeableColorInfo id="AO006L1" inputColor="W" hue="0" saturation="0" value="0" alpha="8" />
+ <ChangeableColorInfo id="ATO001" inputColor="K" hue="0" saturation="0" value="0" alpha="100" />
+ <ChangeableColorInfo id="ATO002" inputColor="K" hue="0" saturation="0" value="0" alpha="100" />
+ <ChangeableColorInfo id="ATO003" inputColor="W" hue="0" saturation="0" value="0" alpha="100" />
+ <ChangeableColorInfo id="ATO004" inputColor="W" hue="0" saturation="0" value="0" alpha="100" />
+ <ChangeableColorInfo id="ATO004P" inputColor="W" hue="0" saturation="0" value="0" alpha="100" />
+ <ChangeableColorInfo id="ATO004D" inputColor="W" hue="0" saturation="0" value="0" alpha="40" />
+ </Theme>
+ <Theme style="Light">
+ <ChangeableColorInfo id="AO001" inputColor="W" hue="0" saturation="0" value="-72" alpha="100" />
+ <ChangeableColorInfo id="AO002L1" inputColor="4" hue="0" saturation="-3" value="11" alpha="100" />
+ <ChangeableColorInfo id="AO002L2" inputColor="W" hue="0" saturation="0" value="0" alpha="100" />
+ <ChangeableColorInfo id="AO003" inputColor="W" hue="0" saturation="0" value="0" alpha="100" />
+ <ChangeableColorInfo id="AO004" inputColor="K" hue="0" saturation="0" value="0" alpha="50" />
+ <ChangeableColorInfo id="AO004P" inputColor="3" hue="0" saturation="0" value="0" alpha="100" />
+ <ChangeableColorInfo id="AO004L1" inputColor="W" hue="0" saturation="0" value="0" alpha="25" />
+ <ChangeableColorInfo id="AO005" inputColor="W" hue="0" saturation="0" value="0" alpha="100" />
+ <ChangeableColorInfo id="AO005P" inputColor="3" hue="0" saturation="0" value="0" alpha="100" />
+ <ChangeableColorInfo id="AO006" inputColor="K" hue="0" saturation="0" value="8" alpha="100" />
+ <ChangeableColorInfo id="AO006L1" inputColor="W" hue="0" saturation="0" value="0" alpha="8" />
+ <ChangeableColorInfo id="ATO001" inputColor="K" hue="0" saturation="0" value="0" alpha="100" />
+ <ChangeableColorInfo id="ATO002" inputColor="K" hue="0" saturation="0" value="0" alpha="100" />
+ <ChangeableColorInfo id="ATO003" inputColor="W" hue="0" saturation="0" value="0" alpha="100" />
+ <ChangeableColorInfo id="ATO004" inputColor="W" hue="0" saturation="0" value="0" alpha="100" />
+ <ChangeableColorInfo id="ATO004P" inputColor="W" hue="0" saturation="0" value="0" alpha="100" />
+ <ChangeableColorInfo id="ATO004D" inputColor="W" hue="0" saturation="0" value="0" alpha="40" />
+ </Theme>
+</ChangeableColorTable>
+<ChangeableColorTable num="3">
+ <Theme style="Dark">
+ <ChangeableColorInfo id="AO001" inputColor="W" hue="0" saturation="0" value="-72" alpha="100" />
+ <ChangeableColorInfo id="AO002L1" inputColor="4" hue="0" saturation="-27" value="60" alpha="100" />
+ <ChangeableColorInfo id="AO002L2" inputColor="W" hue="0" saturation="0" value="0" alpha="100" />
+ <ChangeableColorInfo id="AO003" inputColor="W" hue="0" saturation="0" value="0" alpha="100" />
+ <ChangeableColorInfo id="AO004" inputColor="K" hue="0" saturation="0" value="0" alpha="50" />
+ <ChangeableColorInfo id="AO004P" inputColor="3" hue="0" saturation="0" value="0" alpha="100" />
+ <ChangeableColorInfo id="AO004L1" inputColor="W" hue="0" saturation="0" value="0" alpha="25" />
+ <ChangeableColorInfo id="AO005" inputColor="W" hue="0" saturation="0" value="0" alpha="100" />
+ <ChangeableColorInfo id="AO005P" inputColor="3" hue="0" saturation="0" value="0" alpha="100" />
+ <ChangeableColorInfo id="AO006" inputColor="K" hue="0" saturation="0" value="8" alpha="100" />
+ <ChangeableColorInfo id="AO006L1" inputColor="W" hue="0" saturation="0" value="0" alpha="8" />
+ <ChangeableColorInfo id="ATO001" inputColor="K" hue="0" saturation="0" value="0" alpha="100" />
+ <ChangeableColorInfo id="ATO002" inputColor="K" hue="0" saturation="0" value="0" alpha="100" />
+ <ChangeableColorInfo id="ATO003" inputColor="W" hue="0" saturation="0" value="0" alpha="100" />
+ <ChangeableColorInfo id="ATO004" inputColor="W" hue="0" saturation="0" value="0" alpha="100" />
+ <ChangeableColorInfo id="ATO004P" inputColor="W" hue="0" saturation="0" value="0" alpha="100" />
+ <ChangeableColorInfo id="ATO004D" inputColor="W" hue="0" saturation="0" value="0" alpha="40" />
+ </Theme>
+ <Theme style="Light">
+ <ChangeableColorInfo id="AO001" inputColor="W" hue="0" saturation="0" value="-72" alpha="100" />
+ <ChangeableColorInfo id="AO002L1" inputColor="4" hue="0" saturation="-27" value="60" alpha="100" />
+ <ChangeableColorInfo id="AO002L2" inputColor="W" hue="0" saturation="0" value="0" alpha="100" />
+ <ChangeableColorInfo id="AO003" inputColor="W" hue="0" saturation="0" value="0" alpha="100" />
+ <ChangeableColorInfo id="AO004" inputColor="K" hue="0" saturation="0" value="0" alpha="50" />
+ <ChangeableColorInfo id="AO004P" inputColor="3" hue="0" saturation="0" value="0" alpha="100" />
+ <ChangeableColorInfo id="AO004L1" inputColor="W" hue="0" saturation="0" value="0" alpha="25" />
+ <ChangeableColorInfo id="AO005" inputColor="W" hue="0" saturation="0" value="0" alpha="100" />
+ <ChangeableColorInfo id="AO005P" inputColor="3" hue="0" saturation="0" value="0" alpha="100" />
+ <ChangeableColorInfo id="AO006" inputColor="K" hue="0" saturation="0" value="8" alpha="100" />
+ <ChangeableColorInfo id="AO006L1" inputColor="W" hue="0" saturation="0" value="0" alpha="8" />
+ <ChangeableColorInfo id="ATO001" inputColor="K" hue="0" saturation="0" value="0" alpha="100" />
+ <ChangeableColorInfo id="ATO002" inputColor="K" hue="0" saturation="0" value="0" alpha="100" />
+ <ChangeableColorInfo id="ATO003" inputColor="W" hue="0" saturation="0" value="0" alpha="100" />
+ <ChangeableColorInfo id="ATO004" inputColor="W" hue="0" saturation="0" value="0" alpha="100" />
+ <ChangeableColorInfo id="ATO004P" inputColor="W" hue="0" saturation="0" value="0" alpha="100" />
+ <ChangeableColorInfo id="ATO004D" inputColor="W" hue="0" saturation="0" value="0" alpha="40" />
+ </Theme>
+</ChangeableColorTable>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<FontInfoTable>
+ <FontInfo id="ATO001" style="R" size="28" />
+ <FontInfo id="ATO002" style="R" size="26" />
+ <FontInfo id="ATO003" style="B" size="34" />
+ <FontInfo id="ATO004" style="B" size="32" />
+ <FontInfo id="ATO004P" style="B" size="32" />
+ <FontInfo id="ATO004D" style="B" size="32" />
+</FontInfoTable>
--- /dev/null
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.
+ *
+ */
+collections {
+
+#include "scroller.edc"
+#include "popup_layout.edc"
+
+// Clipboard
+#define CLIPBOARD_H_INC 528
+#define CLIPBOARD_LANDSCAPE_H_INC 400
+#define CLIPBOARD_PANEL_TOP_PADDING_INC 0
+#define CLIPBOARD_PANEL_LEFT_PADDING_INC 16 // also used for RIGHT_PADDING
+#define CLIPBOARD_PANEL_H_INC 84
+#define CLIPBOARD_CLOSE_BTN_BG_W_INC (CLIPBOARD_PANEL_LEFT_PADDING_INC + CLIPBOARD_CLOSE_BTN_W_INC + CLIPBOARD_PANEL_LEFT_PADDING_INC)
+#define CLIPBOARD_CLOSE_BTN_W_INC 72
+#define CLIPBOARD_CLOSE_BTN_H_INC 72
+#define CLIPBOARD_FUNCTION_BTN_MIN_W_INC 60
+#define CLIPBOARD_FUNCTION_BTN_MAX_W_INC 225
+#define CLIPBOARD_FUNCTION_BTN_LANDSCAPE_MAX_W_INC 505
+#define CLIPBOARD_FUNCTION_BTN_LEFT_SIZE_INC 16 // also used for BTN_RIGHT
+#define CLIPBOARD_FUNCTION_BTN_TEXT_MAX_W_INC (CLIPBOARD_FUNCTION_BTN_MAX_W_INC - CLIPBOARD_FUNCTION_BTN_LEFT_SIZE_INC - CLIPBOARD_FUNCTION_BTN_LEFT_SIZE_INC)
+#define CLIPBOARD_FUNCTION_BTN_TEXT_LANDSCAPE_MAX_W_INC (CLIPBOARD_FUNCTION_BTN_LANDSCAPE_MAX_W_INC - CLIPBOARD_FUNCTION_BTN_LEFT_SIZE_INC - CLIPBOARD_FUNCTION_BTN_LEFT_SIZE_INC)
+#define CLIPBOARD_FUNCTION_BTN_H_INC 60
+
+#define CLIPBOARD_CONTENT_TOP_LEFT_PADDING_INC 0 0
+#define CLIPBOARD_CONTENT_BOTTOM_RIGHT_PADDING_INC 16 0
+#define CLIPBOARD_CONTENT_COLOR_INC 62 62 62 255
+
+#define CLIPBOARD_TITLE_FONT_SIZE_INC 34
+#define CLIPBOARD_TITLE_FONT_COLOR_INC 250 250 250 255
+#define CLIPBOARD_FUNCTION_FONT_SIZE_INC 32
+#define CLIPBOARD_FUNCTION_FONT_COLOR_INC 250 250 250 255
+#define CLIPBOARD_FUNCTION_FONT_COLOR_DIM_INC 107 108 109 255
+
+#define CLIPBOARD_TITLE_TOP_LEFT_PADDING_INC CLIPBOARD_PANEL_LEFT_PADDING_INC CLIPBOARD_PANEL_TOP_PADDING_INC
+#define CLIPBOARD_FUNCTION_BTN_RIGHT_PADDING_INC (CLIPBOARD_PANEL_LEFT_PADDING_INC + CLIPBOARD_FUNCTION_BTN_LEFT_SIZE_INC)
+
+// Grid Item
+#define GRID_ITEM_W_INC 196
+#define GRID_ITEM_H_INC 196
+
+#define GRID_ITEM_BG_LEFT_PADDING_INC 6
+#define GRID_ITEM_BG_RIGHT_PADDING_INC 8
+#define GRID_ITEM_BG_TOP_PADDING_INC 8
+#define GRID_ITEM_BG_BOTTOM_PADDING_INC 6
+
+#define GRID_TEXT_ITEM_BG_LEFT_PADDING_INC 6
+#define GRID_TEXT_ITEM_BG_RIGHT_PADDING_INC 8
+#define GRID_TEXT_ITEM_BG_TOP_PADDING_INC 28
+#define GRID_TEXT_ITEM_BG_BOTTOM_PADDING_INC 26
+
+#define GRID_ITEM_OUTER_LINE_SIZE_INC 3
+#define GRID_TEXT_ITEM_INNER_LINE_SIZE_INC 2
+#define GRID_TEXT_ITEM_LEFT_PADDING_INC 12
+#define GRID_TEXT_ITEM_TOP_PADDING_INC 8
+#define GRID_TEXT_ITEM_FONT_SIZE_INC 32
+#define GRID_COMBINED_ITEM_LEFT_PADDING_INC 6
+#define GRID_COMBINED_ITEM_TOP_PADDING_INC 6
+#define GRID_COMBINED_ITEM_FONT_SIZE_INC 30
+
+#define GRID_COMBINED_ITEM_PADDING_INC 4
+
+#define GRID_ITEM_DELETE_BTN_TOP_PADDING_INC 11 // also used for RIGHT_PADDING
+#define GRID_ITEM_DELETE_BTN_SIZE_INC 54 54
+#define GRID_ITEM_LOCK_BTN_SIZE_INC 54 54
+
+#define GRID_TEXT_ITEM_COLOR_INC 237 233 208 255
+
+#define GRID_ITEM_BG_W_INC (GRID_ITEM_W_INC + GRID_ITEM_BG_LEFT_PADDING_INC + GRID_ITEM_BG_RIGHT_PADDING_INC)
+#define GRID_ITEM_BG_H_INC (GRID_ITEM_H_INC + GRID_ITEM_BG_TOP_PADDING_INC + GRID_ITEM_BG_BOTTOM_PADDING_INC)
+#define GRID_TEXT_ITEM_W_INC (GRID_ITEM_W_INC - GRID_TEXT_ITEM_LEFT_PADDING_INC - GRID_TEXT_ITEM_LEFT_PADDING_INC - GRID_TEXT_ITEM_BG_LEFT_PADDING_INC - GRID_TEXT_ITEM_BG_RIGHT_PADDING_INC)
+#define GRID_TEXT_ITEM_H_INC (GRID_ITEM_H_INC - GRID_TEXT_ITEM_TOP_PADDING_INC - GRID_TEXT_ITEM_TOP_PADDING_INC - GRID_TEXT_ITEM_BG_TOP_PADDING_INC - GRID_TEXT_ITEM_BG_BOTTOM_PADDING_INC)
+#define GRID_IMAGE_ITEM_W_INC (GRID_ITEM_W_INC - GRID_ITEM_OUTER_LINE_SIZE_INC - GRID_ITEM_OUTER_LINE_SIZE_INC)
+#define GRID_IMAGE_ITEM_H_INC (GRID_ITEM_H_INC - GRID_ITEM_OUTER_LINE_SIZE_INC - GRID_ITEM_OUTER_LINE_SIZE_INC)
+#define GRID_COMBINED_ITEM_W_INC (GRID_ITEM_W_INC - GRID_ITEM_OUTER_LINE_SIZE_INC - GRID_ITEM_OUTER_LINE_SIZE_INC - GRID_COMBINED_ITEM_LEFT_PADDING_INC - GRID_COMBINED_ITEM_LEFT_PADDING_INC)
+#define GRID_COMBINED_ITEM_IMAGE_H_INC 80
+
+#define SCROLLER_BOTTOM_RIGHT_PADDING_INC 8
+#define SCROLLER_TOP_PADDING_INC 11
+#define SCROLLER_TOP_LANDSCAPE_PADDING_INC 52
+
+#define GENGRID_ITEM_SELECT_VI_EFFECT \
+} \
+description { state: "pressed" 0.0; \
+ inherit: "default" 0.0; \
+ map { \
+ on: 1; \
+ perspective: "persp1"; \
+ smooth: 0; \
+ } \
+} \
+description { state: "selected" 0.0; \
+ inherit: "default" 0.0; \
+ map { \
+ on: 1; \
+ perspective: "persp"; \
+ smooth: 1; \
+ }
+
+#define GENGRID_PROGRAM_ITEM_SELECT_VI_EFFECT( TARGET ) \
+ program { name: "vi_pressed"; \
+ action: STATE_SET "pressed" 0.0; \
+ TARGET \
+ after: "vi_zoom_in"; \
+ } \
+ program { name: "vi_zoom_in"; \
+ action: STATE_SET "selected" 0.0; \
+ TARGET \
+ transition: SIN_FAC 0.167 1.1; \
+ } \
+ program { name: "vi_zoom_out"; \
+ action: STATE_SET "pressed" 0.0; \
+ TARGET \
+ transition: SIN_FAC 0.167 1.1; \
+ after: "vi_default"; \
+ } \
+ program { name: "vi_default"; \
+ action: STATE_SET "default" 0.0; \
+ TARGET \
+ }
+
+
+ sounds {
+ sample {
+ name: "touch_sound" RAW;
+ source: "button-pressed.wav";
+ }
+ }
+
+ group { name: "cbhmdrawer";
+ images {
+ image: "B12_panel_title_bg.#.png" COMP;
+ image: "B12_panel_title_bg_line.#.png" COMP;
+ image: "B12_panel_button.#.png" COMP;
+ image: "B12_panel_button_line.#.png" COMP;
+ image: "B12_panel_button_dim.png" COMP;
+ image: "B12_panel_icon_close.png" COMP;
+ }
+ data.item: "clipboard_height" CLIPBOARD_H_INC;
+ data.item: "clipboard_landscape_height" CLIPBOARD_LANDSCAPE_H_INC;
+ data.item: "grid_item_bg_w" GRID_ITEM_BG_W_INC;
+ data.item: "grid_item_bg_h" GRID_ITEM_BG_H_INC;
+ data.item: "grid_image_item_w" GRID_IMAGE_ITEM_W_INC;
+ data.item: "grid_image_item_h" GRID_IMAGE_ITEM_H_INC;
+
+ script {
+ public g_landscape = 0; // Flag for landscape mode
+ }
+
+ parts {
+ part { name: "background";
+ type: RECT;
+ scale: 1;
+ mouse_events: 1;
+ description { state: "default" 0.0;
+ rel1 { relative: 0.0 0.0; }
+ rel2 { relative: 1.0 1.0; }
+ color_class: "AO001";
+ }
+ }
+ part { name: "top_left_padding";
+ type: SPACER;
+ scale: 1;
+ description { state: "default" 0.0;
+ fixed: 1 1;
+ align: 0.0 0.0;
+ min: CLIPBOARD_TITLE_TOP_LEFT_PADDING_INC;
+ max: CLIPBOARD_TITLE_TOP_LEFT_PADDING_INC;
+ rel1 { relative: 0.0 0.0; to: "background"; }
+ rel2 { relative: 0.0 0.0; to: "background"; }
+ }
+ }
+ part { name: "background/title";
+ type: RECT;
+ scale: 1;
+ mouse_events: 1;
+ description { state: "default" 0.0;
+ fixed: 0 1;
+ align: 0.0 0.0;
+ min: 0 CLIPBOARD_PANEL_H_INC;
+ rel1 { relative: 0.0 1.0; to_x: "background"; to_y: "top_left_padding"; }
+ rel2 { relative: 1.0 1.0; to_x: "background"; to_y: "top_left_padding"; }
+ color: 0 0 0 0;
+ }
+ }
+ part { name: "background/title/image";
+ type: IMAGE;
+ scale: 1;
+ mouse_events: 1;
+ description { state: "default" 0.0;
+ rel1 { relative: 0.0 0.0; to: "background";}
+ rel2 { relative: 1.0 1.0; to: "background/title";}
+ color_class: "AO006";
+ image {
+ normal: "B12_panel_title_bg.#.png";
+ }
+ }
+ }
+ part { name: "background/title/image/line";
+ scale: 1;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ rel1.to: "background/title/image";
+ rel2.to: "background/title/image";
+ color_class: "AO006L1";
+ image.normal: "B12_panel_title_bg_line.#.png";
+ }
+ }
+ part { name: "background/title/close/bg";
+ type: RECT;
+ scale: 1;
+ mouse_events: 1;
+ description { state: "default" 0.0;
+ fixed: 1 0;
+ align: 0.0 0.5;
+ min: CLIPBOARD_CLOSE_BTN_BG_W_INC 0;
+ max: CLIPBOARD_CLOSE_BTN_BG_W_INC -1;
+ color: 0 0 0 0;
+ rel1 { relative: 0.0 0.0; to: "background/title"; }
+ rel2 { relative: 0.0 1.0; to: "background/title"; }
+ }
+ }
+ part { name: "background/title/close/image";
+ type: IMAGE;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ fixed: 1 1;
+ align: 0.5 0.5;
+ min: CLIPBOARD_CLOSE_BTN_W_INC CLIPBOARD_CLOSE_BTN_H_INC;
+ max: CLIPBOARD_CLOSE_BTN_W_INC CLIPBOARD_CLOSE_BTN_H_INC;
+ rel1 { to: "background/title/close/bg"; }
+ rel2 { to: "background/title/close/bg"; }
+ color_class: "AO005";
+ image { normal: "B12_panel_icon_close.png"; }
+ }
+ description { state: "pressed" 0.0;
+ inherit: "default" 0.0;
+ color_class: "AO005P";
+ }
+ }
+ part { name: "title_text_right_padding";
+ type: SPACER;
+ scale: 1;
+ description { state: "default" 0.0;
+ fixed: 1 0;
+ align: 1.0 0.5;
+ min: CLIPBOARD_PANEL_LEFT_PADDING_INC 0;
+ rel1 { relative: 0.0 0.0; to_x: "background/title/delete_all/image"; to_y: "background/title"; }
+ rel2 { relative: 0.0 1.0; to_x: "background/title/delete_all/image"; to_y: "background/title"; }
+ }
+ }
+ part { name: "panel_title";
+ type: TEXT;
+ scale: 1;
+ description { state: "default" 0.0;
+ align: 0.0 0.5;
+ text {
+ min: 0 1;
+ max: 1 0;
+ align: 0.5 0.5;
+ text_class: "ATO003";
+ }
+ rel1 { relative: 1.0 0.0; to_x: "background/title/close/bg"; to_y: "background/title"; }
+ rel2 { relative: 0.0 1.0; to_x: "title_text_right_padding"; to_y: "background/title"; }
+ }
+ }
+ part { name: "delete_text_left_padding";
+ type: SPACER;
+ scale: 1;
+ description { state: "default" 0.0;
+ fixed: 1 0;
+ align: 1.0 0.5;
+ min: CLIPBOARD_FUNCTION_BTN_LEFT_SIZE_INC 0;
+ rel1 { relative: 0.0 0.0; to: "panel_function_delete"; }
+ rel2 { relative: 0.0 1.0; to: "panel_function_delete"; }
+ }
+ }
+ part { name: "delete_text_right_padding";
+ type: SPACER;
+ scale: 1;
+ description { state: "default" 0.0;
+ fixed: 1 0;
+ align: 0.0 0.5;
+ min: CLIPBOARD_FUNCTION_BTN_LEFT_SIZE_INC 0;
+ rel1 { relative: 1.0 0.0; to: "panel_function_delete"; }
+ rel2 { relative: 1.0 1.0; to: "panel_function_delete"; }
+ }
+ }
+ part { name: "background/title/delete/image";
+ type: IMAGE;
+ scale: 1;
+ mouse_events: 1;
+ description { state: "default" 0.0;
+ align: 0.5 0.5;
+ min: CLIPBOARD_FUNCTION_BTN_MIN_W_INC CLIPBOARD_FUNCTION_BTN_H_INC;
+ max: -1 CLIPBOARD_FUNCTION_BTN_H_INC;
+ fixed: 1 1;
+ visible: 1;
+ rel1 { relative: 0.0 0.0; to: "delete_text_left_padding"; }
+ rel2 { relative: 1.0 1.0; to: "delete_text_right_padding"; }
+ color_class: "AO004";
+ image { normal: "B12_panel_button.#.png";
+ }
+ }
+ description { state: "pressed" 0.0;
+ inherit: "default" 0.0;
+ color_class: "AO004P";
+ }
+ description { state: "disabled" 0.0;
+ inherit: "default" 0.0;
+ image { normal: "B12_panel_button_dim.png"; }
+ }
+ }
+ part { name: "background/title/delete/image/line";
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ rel1.to: "background/title/delete/image";
+ rel2.to: "background/title/delete/image";
+ color_class: "AO004L1";
+ image.normal: "B12_panel_button_line.#.png";
+ }
+ }
+ part { name: "delete_right_padding";
+ type: SPACER;
+ scale: 1;
+ description { state: "default" 0.0;
+ fixed: 1 0;
+ align: 1.0 0.5;
+ min: CLIPBOARD_FUNCTION_BTN_RIGHT_PADDING_INC 0;
+ max: CLIPBOARD_FUNCTION_BTN_RIGHT_PADDING_INC -1;
+ rel1 { relative: 1.0 0.0; to: "background/title"; }
+ rel2 { relative: 1.0 1.0; to: "background/title"; }
+ }
+ }
+ part { name: "delete_text_bg";
+ type: SPACER;
+ scale: 1;
+ description { state: "default" 0.0;
+ fixed: 1 0;
+ align: 1.0 0.5;
+ min: CLIPBOARD_FUNCTION_BTN_TEXT_MAX_W_INC 0;
+ max: CLIPBOARD_FUNCTION_BTN_TEXT_MAX_W_INC -1;
+ rel1 { relative: 0.0 0.0; to: "delete_right_padding"; }
+ rel2 { relative: 0.0 1.0; to: "delete_right_padding"; }
+ }
+ description { state: "landscape" 0.0;
+ inherit: "default" 0.0;
+ min: CLIPBOARD_FUNCTION_BTN_TEXT_LANDSCAPE_MAX_W_INC 0;
+ max: CLIPBOARD_FUNCTION_BTN_TEXT_LANDSCAPE_MAX_W_INC -1;
+ }
+ }
+ part { name: "panel_function_delete";
+ type: TEXT;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ align: 1.0 0.5;
+ text {
+ min: 0 1;
+ max: 1 0;
+ align: 1.0 0.5;
+ text_class: "ATO004";
+ }
+ rel1.to: "delete_text_bg";
+ rel2.to: "delete_text_bg";
+ }
+ description { state: "disabled" 0.0;
+ inherit: "default" 0.0;
+ color: CLIPBOARD_FUNCTION_FONT_COLOR_DIM_INC;
+ }
+ }
+ part { name: "delete_all_text_left_padding";
+ type: SPACER;
+ scale: 1;
+ description { state: "default" 0.0;
+ fixed: 1 0;
+ align: 1.0 0.5;
+ min: CLIPBOARD_FUNCTION_BTN_LEFT_SIZE_INC 0;
+ rel1 { relative: 0.0 0.0; to: "panel_function_delete_all"; }
+ rel2 { relative: 0.0 1.0; to: "panel_function_delete_all"; }
+ }
+ }
+ part { name: "delete_all_text_right_padding";
+ type: SPACER;
+ scale: 1;
+ description { state: "default" 0.0;
+ fixed: 1 0;
+ align: 0.0 0.5;
+ min: CLIPBOARD_FUNCTION_BTN_LEFT_SIZE_INC 0;
+ rel1 { relative: 1.0 0.0; to: "panel_function_delete_all"; }
+ rel2 { relative: 1.0 1.0; to: "panel_function_delete_all"; }
+ }
+ }
+ part { name: "background/title/delete_all/image";
+ type: IMAGE;
+ scale: 1;
+ mouse_events: 1;
+ description { state: "default" 0.0;
+ align: 0.5 0.5;
+ min: CLIPBOARD_FUNCTION_BTN_MIN_W_INC CLIPBOARD_FUNCTION_BTN_H_INC;
+ max: -1 CLIPBOARD_FUNCTION_BTN_H_INC;
+ fixed: 1 1;
+ visible: 1;
+ rel1 { relative: 0.0 0.0; to: "delete_all_text_left_padding"; }
+ rel2 { relative: 1.0 1.0; to: "delete_all_text_right_padding"; }
+ color_class: "AO004";
+ image { normal: "B12_panel_button.#.png";
+ }
+ }
+ description { state: "pressed" 0.0;
+ inherit: "default" 0.0;
+ color_class: "AO004P";
+ image { normal: "B12_panel_button.#.png"; }
+ }
+ description { state: "disabled" 0.0;
+ inherit: "default" 0.0;
+ image { normal: "B12_panel_button.#.png"; }
+ }
+ }
+ part { name: "background/title/delete_all/image/line";
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ rel1.to: "background/title/delete_all/image";
+ rel2.to: "background/title/delete_all/image";
+ color_class: "AO004L1";
+ image.normal: "B12_panel_button_line.#.png";
+ }
+ }
+ part { name: "delete_all_right_padding";
+ type: SPACER;
+ scale: 1;
+ description { state: "default" 0.0;
+ fixed: 1 0;
+ align: 1.0 0.5;
+ min: CLIPBOARD_FUNCTION_BTN_RIGHT_PADDING_INC 0;
+ max: CLIPBOARD_FUNCTION_BTN_RIGHT_PADDING_INC -1;
+ rel1 { relative: 0.0 0.0; to_x: "delete_text_left_padding"; to_y: "background/title"; }
+ rel2 { relative: 0.0 1.0; to_x: "delete_text_left_padding"; to_y: "background/title"; }
+ }
+ }
+ part { name: "delete_all_text_bg";
+ type: SPACER;
+ scale: 1;
+ description { state: "default" 0.0;
+ fixed: 1 0;
+ align: 1.0 0.5;
+ min: CLIPBOARD_FUNCTION_BTN_TEXT_MAX_W_INC 0;
+ max: CLIPBOARD_FUNCTION_BTN_TEXT_MAX_W_INC -1;
+ rel1 { relative: 0.0 0.0; to: "delete_all_right_padding"; }
+ rel2 { relative: 0.0 1.0; to: "delete_all_right_padding"; }
+ }
+ description { state: "landscape" 0.0;
+ inherit: "default" 0.0;
+ min: CLIPBOARD_FUNCTION_BTN_TEXT_LANDSCAPE_MAX_W_INC 0;
+ max: CLIPBOARD_FUNCTION_BTN_TEXT_LANDSCAPE_MAX_W_INC -1;
+ }
+ }
+ part { name: "panel_function_delete_all";
+ type: TEXT;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ align: 1.0 0.5;
+ text {
+ min: 0 1;
+ max: 1 0;
+ align: 0.5 0.5;
+ text_class: "ATO004";
+ }
+ rel1.to: "delete_all_text_bg";
+ rel2.to: "delete_all_text_bg";
+ }
+ description { state: "disabled" 0.0;
+ inherit: "default" 0.0;
+ color: CLIPBOARD_FUNCTION_FONT_COLOR_DIM_INC;
+ }
+ }
+ part { name: "delete_disabler";
+ type: RECT;
+ description { state: "default" 0.0;
+ color: 0 0 0 0;
+ rel1.to: "background/title/delete/image";
+ rel2.to: "background/title/delete/image";
+ visible: 0;
+ }
+ description { state: "disabled" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ }
+ part { name: "delete_all_disabler";
+ type: RECT;
+ description { state: "default" 0.0;
+ color: 0 0 0 0;
+ rel1.to: "background/title/delete_all/image";
+ rel2.to: "background/title/delete_all/image";
+ visible: 0;
+ }
+ description { state: "disabled" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ }
+ part { name: "historyitems_top_left_padding";
+ type: SPACER;
+ scale: 1;
+ description { state: "default" 0.0;
+ fixed: 1 1;
+ align: 0.0 0.0;
+ min: CLIPBOARD_CONTENT_TOP_LEFT_PADDING_INC;
+ max: CLIPBOARD_CONTENT_TOP_LEFT_PADDING_INC;
+ rel1 { relative: 0.0 1.0; to: "background/title"; }
+ rel2 { relative: 0.0 1.0; to: "background/title"; }
+ }
+ }
+ part { name: "historyitems_bottom_right_padding";
+ type: SPACER;
+ scale: 1;
+ description { state: "default" 0.0;
+ fixed: 1 1;
+ align: 1.0 1.0;
+ min: CLIPBOARD_CONTENT_BOTTOM_RIGHT_PADDING_INC;
+ max: CLIPBOARD_CONTENT_BOTTOM_RIGHT_PADDING_INC;
+ rel1 { relative: 1.0 1.0; to: "background"; }
+ rel2 { relative: 1.0 1.0; to: "background"; }
+ }
+ }
+ part { name: "historyitems";
+ type: SWALLOW;
+ mouse_events: 1;
+ description { state: "default" 0.0;
+ rel1 { relative: 1.0 1.0; to: "historyitems_top_left_padding"; }
+ rel2 { relative: 1.0 1.0; to: "historyitems_bottom_right_padding"; }
+ visible: 1;
+ }
+ description { state: "hidden" 0.0;
+ inherit: "default" 0.0;
+ visible: 0;
+ }
+ }
+ }
+ programs {
+ program { name: "historyitems_hide";
+ signal: "elm,state,hide,historyitems";
+ source: "elm";
+ action: STATE_SET "hidden" 0.0;
+ target: "historyitems";
+ }
+ program { name: "historyitems_show";
+ signal: "elm,state,show,historyitems";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "historyitems";
+ }
+ program { name: "mouse_down_closebtn";
+ signal: "mouse,down,1";
+ source: "background/title/close/bg";
+ action: STATE_SET "pressed" 0.0;
+ target: "background/title/close/image";
+ }
+ program { name: "mouse_out_closebtn";
+ signal: "mouse,out";
+ source: "background/title/close/bg";
+ action: STATE_SET "default" 0.0;
+ target: "background/title/close/image";
+ }
+ program { name: "play_sound_closebtn";
+ signal: "mouse,clicked,1";
+ source: "background/title/close/bg";
+ action: PLAY_SAMPLE "touch_sound" 1.0;
+ }
+ program { name: "mouse_down_delbtn";
+ signal: "mouse,down,1";
+ source: "background/title/delete/image";
+ action: STATE_SET "pressed" 0.0;
+ target: "background/title/delete/image";
+ }
+ program { name: "mouse_out_delbtn";
+ signal: "mouse,out";
+ source: "background/title/delete/image";
+ action: STATE_SET "default" 0.0;
+ target: "background/title/delete/image";
+ }
+ program { name: "mouse_up_delbtn";
+ signal: "mouse,up,1";
+ source: "background/title/delete/image";
+ action: STATE_SET "default" 0.0;
+ target: "background/title/delete/image";
+ }
+ program { name: "mouse_down_del_all_btn";
+ signal: "mouse,down,1";
+ source: "background/title/delete_all/image";
+ action: STATE_SET "pressed" 0.0;
+ target: "background/title/delete_all/image";
+ }
+ program { name: "mouse_out_del_all_btn";
+ signal: "mouse,out";
+ source: "background/title/delete_all/image";
+ action: STATE_SET "default" 0.0;
+ target: "background/title/delete_all/image";
+ }
+ program { name: "mouse_up_del_all_btn";
+ signal: "mouse,up,1";
+ source: "background/title/delete_all/image";
+ action: STATE_SET "default" 0.0;
+ target: "background/title/delete_all/image";
+ }
+ program { name: "play_sound_delbtn";
+ signal: "mouse,clicked,1";
+ source: "background/title/delete/image";
+ action: PLAY_SAMPLE "touch_sound" 1.0;
+ }
+ program { name: "play_sound_del_all_btn";
+ signal: "mouse,clicked,1";
+ source: "background/title/delete_all/image";
+ action: PLAY_SAMPLE "touch_sound" 1.0;
+ }
+ program { name: "show_panel_function";
+ source: "elm";
+ signal: "elm,state,show,function";
+ action: STATE_SET "show" 0.0;
+ target: "panel_function_delete_all";
+ target: "panel_function_delete";
+ }
+ program { name: "hide_panel_function";
+ source: "elm";
+ signal: "elm,state,hide,function";
+ action: STATE_SET "default" 0.0;
+ target: "panel_function_delete_all";
+ target: "panel_function_delete";
+ }
+ program { name: "hide_del_mode";
+ source: "elm";
+ signal: "elm,state,hide,delmode";
+ action: STATE_SET "hide" 0.0;
+ target: "background/title/delete/image";
+ }
+ program { name: "show_del_mode";
+ source: "elm";
+ signal: "elm,state,show,delmode";
+ action: STATE_SET "default" 0.0;
+ target: "background/title/delete/image";
+ }
+ program { name: "disable_del";
+ source: "elm";
+ signal: "elm,state,disable,del";
+ action: STATE_SET "disabled" 0.0;
+ target: "delete_disabler";
+ target: "delete_all_disabler";
+ target: "panel_function_delete_all";
+ target: "background/title/delete/image";
+ target: "background/title/delete_all/image";
+ target: "panel_function_delete";
+ }
+ program { name: "enable_del";
+ source: "elm";
+ signal: "elm,state,enable,del";
+ action: STATE_SET "default" 0.0;
+ target: "delete_disabler";
+ target: "delete_all_disabler";
+ target: "panel_function_delete_all";
+ target: "background/title/delete/image";
+ target: "background/title/delete_all/image";
+ target: "panel_function_delete";
+ }
+ program { name: "change_to_landscape";
+ script {
+ new st[32];
+ new Float:vl;
+
+ if (!get_int(g_landscape)) {
+ get_state(PART:"delete_text_bg", st, 32, vl);
+ if (!strcmp(st, "default")) {
+ set_state(PART:"delete_text_bg", "landscape", 0.0);
+ set_state(PART:"delete_all_text_bg", "landscape", 0.0);
+ }
+ set_int(g_landscape, 1);
+ }
+ }
+ }
+ program { name: "change_to_portrait";
+ script {
+ new st[32];
+ new Float:vl;
+
+ if (get_int(g_landscape)) {
+ get_state(PART:"delete_text_bg", st, 32, vl);
+ if (!strcmp(st, "landscape")) {
+ set_state(PART:"delete_text_bg", "default", 0.0);
+ set_state(PART:"delete_all_text_bg", "default", 0.0);
+ }
+ set_int(g_landscape, 0);
+ }
+ }
+ }
+ program { name: "landscape_mode";
+ source: "elm";
+ signal: "elm,state,orient,90";
+ after: "change_to_landscape";
+ }
+ program { name: "landscape_mode2";
+ source: "elm";
+ signal: "elm,state,orient,270";
+ after: "change_to_landscape";
+ }
+ program { name: "portrait_mode";
+ source: "elm";
+ signal: "elm,state,orient,0";
+ after: "change_to_portrait";
+ }
+ program { name: "portrait_mode2";
+ source: "elm";
+ signal: "elm,state,orient,180";
+ after: "change_to_portrait";
+ }
+ }
+ }
+
+ group { name: "elm/scroller/base/grid_cbhm";
+ alias: "elm/gengrid/base/cbhm";
+ inherit: "elm/scroller/base/list_effect";
+
+ images {
+ image: "B12_panel_scroll_bar.png" COMP;
+ }
+ parts {
+ part { name: "padding.left";
+ type: SPACER;
+ scale:1 ;
+ description { state: "default" 0.0;
+ min: SCROLLER_BOTTOM_RIGHT_PADDING_INC SCROLLER_TOP_PADDING_INC;
+ max: SCROLLER_BOTTOM_RIGHT_PADDING_INC SCROLLER_TOP_PADDING_INC;
+ rel1 {
+ relative: 0.0 0.0;
+ to: "bg";
+ }
+ rel2.to: "bg";
+ fixed: 1 1;
+ align: 0.0 0.0;
+ }
+ description { state: "landscape" 0.0;
+ inherit: "default" 0.0;
+ min: 0 SCROLLER_TOP_LANDSCAPE_PADDING_INC;
+ max: 0 SCROLLER_TOP_LANDSCAPE_PADDING_INC;
+ }
+ }
+ part { name: "padding.right";
+ type: SPACER;
+ scale:1 ;
+ description { state: "default" 0.0;
+ min: SCROLLER_BOTTOM_RIGHT_PADDING_INC 0;
+ max: SCROLLER_BOTTOM_RIGHT_PADDING_INC 0;
+ rel1 {
+ relative: 1.0 1.0;
+ to: "bg";
+ }
+ rel2.to: "bg";
+ fixed: 1 1;
+ align: 1.0 1.0;
+ }
+ }
+ part { name: "elm.swallow.content";
+ description { state: "default" 0.0;
+ rel1 {
+ relative: 1.0 1.0;
+ to: "padding.left";
+ offset: 0 0;
+ }
+ rel2 {
+ relative: 0.0 0.0;
+ to: "padding.right";
+ offset: -1 -1;
+ }
+ }
+ }
+ part { name: "elm.dragable.hbar";
+ description { state: "default" 0.0;
+ min: SCROLLER_DEFAULT_SCROLLBAR_HBAR_MIN_SIZE_INC;
+ max: SCROLLER_DEFAULT_SCROLLBAR_HBAR_MAX_SIZE_INC;
+ image {
+ normal: "B12_panel_scroll_bar.png";
+ border: SCROLLER_DEFAULT_SCROLLBAR_HBAR_IMAGE_BORDER;
+ border_scale: 1;
+ middle: DEFAULT;
+ }
+ }
+ }
+ }
+ programs {
+ program { name: "change_to_landscape";
+ script {
+ new st[32];
+ new Float:vl;
+
+ if (!get_int(g_landscape)) {
+ get_state(PART:"padding.left", st, 32, vl);
+ if (!strcmp(st, "default")) {
+ set_state(PART:"padding.left", "landscape", 0.0);
+ }
+ set_int(g_landscape, 1);
+ }
+ }
+ }
+ program { name: "change_to_portrait";
+ script {
+ new st[32];
+ new Float:vl;
+
+ if (get_int(g_landscape)) {
+ get_state(PART:"padding.left", st, 32, vl);
+ if (!strcmp(st, "landscape")) {
+ set_state(PART:"padding.left", "default", 0.0);
+ }
+ set_int(g_landscape, 0);
+ }
+ }
+ }
+ program { name: "landscape_mode";
+ source: "elm";
+ signal: "elm,state,orient,90";
+ after: "change_to_landscape";
+ }
+ program { name: "landscape_mode2";
+ source: "elm";
+ signal: "elm,state,orient,270";
+ after: "change_to_landscape";
+ }
+ program { name: "portrait_mode";
+ source: "elm";
+ signal: "elm,state,orient,0";
+ after: "change_to_portrait";
+ }
+ program { name: "portrait_mode2";
+ source: "elm";
+ signal: "elm,state,orient,180";
+ after: "change_to_portrait";
+ }
+ }
+ }
+
+ group { name: "elm/gengrid/item/clipboard/image_style/default";
+ data.item: "contents" "elm.swallow.content";
+
+ images {
+ image: "B12_thumbnail_bg.#.png" COMP;
+ image: "B12_thumbnail_bg_line.#.png" COMP;
+ image: "B12_button_delete.png" COMP;
+ image: "B12_button_delete_press.png" COMP;
+ image: "B12_icon_lock.png" COMP;
+ }
+
+ parts {
+ part { name: "persp";
+ type: RECT;
+ description { state: "default" 0.0;
+ min: 32 32;
+ max: 32 32;
+ fixed: 1 1;
+ align: 0.5 0.5;
+ color: 0 0 0 0;
+ visible: 1;
+ perspective {
+ zplane: -70;
+ focal: 1000;
+ }
+ }
+ }
+ part { name: "persp1";
+ type: RECT;
+ description { state: "default" 0.0;
+ min: 32 32;
+ max: 32 32;
+ fixed: 1 1;
+ align: 0.5 0.5;
+ color: 0 0 0 0;
+ visible: 1;
+ perspective {
+ zplane: 0;
+ focal: 1000;
+ }
+ }
+ }
+ part { name: "bg";
+ type: RECT;
+ scale: 1;
+ description { state: "default" 0.0;
+ color: 0 0 0 0;
+ GENGRID_ITEM_SELECT_VI_EFFECT
+ }
+ }
+ part { name: "item_outer_bg";
+ scale: 1;
+ mouse_events: 1;
+ description { state: "default" 0.0;
+ rel1 { relative: 0.0 0.0; to: "item_outer_bg_top_left_padding"; }
+ rel2 { relative: 1.0 1.0; to: "item_outer_bg_bottom_right_padding"; }
+ color_class: "AO003";
+ image.normal: "B12_thumbnail_bg.#.png";
+ GENGRID_ITEM_SELECT_VI_EFFECT
+ }
+ }
+ part { name: "item_outer_bg_line";
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ rel2.to: "item_outer_bg";
+ rel1.to: "item_outer_bg";
+ color_class: "AO003";
+ image.normal: "B12_thumbnail_bg_line.#.png";
+ GENGRID_ITEM_SELECT_VI_EFFECT
+ }
+ }
+ part { name: "item_outer_bg_top_left_padding";
+ type: SPACER;
+ scale: 1;
+ description { state: "default" 0.0;
+ fixed: 1 1;
+ align: 1.0 1.0;
+ min: GRID_ITEM_OUTER_LINE_SIZE_INC GRID_ITEM_OUTER_LINE_SIZE_INC;
+ max: GRID_ITEM_OUTER_LINE_SIZE_INC GRID_ITEM_OUTER_LINE_SIZE_INC;
+ rel1 { relative: 0.0 0.0; to: "elm.swallow.content"; }
+ rel2 { relative: 0.0 0.0; to: "elm.swallow.content"; }
+ }
+ }
+ part { name: "item_outer_bg_bottom_right_padding";
+ type: SPACER;
+ scale: 1;
+ description { state: "default" 0.0;
+ fixed: 1 1;
+ align: 0.0 0.0;
+ min: GRID_ITEM_OUTER_LINE_SIZE_INC GRID_ITEM_OUTER_LINE_SIZE_INC;
+ max: GRID_ITEM_OUTER_LINE_SIZE_INC GRID_ITEM_OUTER_LINE_SIZE_INC;
+ rel1 { relative: 1.0 1.0; to: "elm.swallow.content"; }
+ rel2 { relative: 1.0 1.0; to: "elm.swallow.content"; }
+ }
+ }
+ part { name: "elm.swallow.content";
+ type: SWALLOW;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ fixed: 1 1;
+ max: GRID_IMAGE_ITEM_W_INC GRID_IMAGE_ITEM_H_INC;
+ rel1 { relative: 0.5 0.5; to: "bg"; }
+ rel2 { relative: 0.5 0.5; to: "bg"; }
+ GENGRID_ITEM_SELECT_VI_EFFECT
+ }
+ }
+ part { name: "elm.rect.dim";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ visible: 0;
+ color: 0 0 0 200;
+ rel1.to: "elm.swallow.content";
+ rel2.to: "elm.swallow.content";
+ }
+ description { state: "show" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ }
+ part { name: "icon_lock/img";
+ scale: 1;
+ mouse_events: 1;
+ description { state: "default" 0.0;
+ rel1 { relative: 0.5 0.5; to: "item_outer_bg"; }
+ rel2 { relative: 0.5 0.5; to: "item_outer_bg"; }
+ align: 0.5 0.5;
+ fixed: 1 1;
+ min: GRID_ITEM_LOCK_BTN_SIZE_INC;
+ max: GRID_ITEM_LOCK_BTN_SIZE_INC;
+ visible: 0;
+ }
+ description { state: "show" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ image {
+ normal: "B12_icon_lock.png";
+ }
+ }
+ }
+ part { name: "delbtn_top_left_padding";
+ type: SPACER;
+ scale: 1;
+ description { state: "default" 0.0;
+ fixed: 1 1;
+ align: 1.0 1.0;
+ min: GRID_ITEM_DELETE_BTN_TOP_PADDING_INC GRID_ITEM_DELETE_BTN_TOP_PADDING_INC;
+ max: GRID_ITEM_DELETE_BTN_TOP_PADDING_INC GRID_ITEM_DELETE_BTN_TOP_PADDING_INC;
+ rel1 { relative: 0.0 0.0; to: "item_outer_bg_top_left_padding"; }
+ rel2 { relative: 0.0 0.0; to: "item_outer_bg_top_left_padding"; }
+ }
+ }
+ part { name: "delbtn";
+ type: SPACER;
+ scale: 1;
+ description { state: "default" 0.0;
+ rel1 { relative: 0.0 0.0; to: "delbtn_top_left_padding"; }
+ rel2 { relative: 0.0 0.0; to: "delbtn_top_left_padding"; }
+ align: 0.0 0.0;
+ fixed: 1 1;
+ min: GRID_ITEM_DELETE_BTN_SIZE_INC;
+ max: GRID_ITEM_DELETE_BTN_SIZE_INC;
+ }
+ }
+ part { name: "delbtn/img";
+ scale: 1;
+ mouse_events: 1;
+ description { state: "default" 0.0;
+ rel1.to: "delbtn";
+ rel2.to: "delbtn";
+ visible: 0;
+ }
+ description { state: "show" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ image {
+ normal: "B12_button_delete.png";
+ }
+ }
+ description { state: "pressed" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ image {
+ normal: "B12_button_delete_press.png";
+ }
+ }
+ }
+ }
+ programs {
+ program { name: "selected";
+ signal: "elm,state,selected";
+ source: "elm";
+ script {
+ new st[31], st2[31];
+ new Float:vl, Float:vl2;
+ get_state(PART:"delbtn/img", st, 30, vl);
+ get_state(PART:"elm.rect.dim", st2, 30, vl2);
+ if (!strcmp(st, "default") && !strcmp(st2, "default"))
+ run_program(PROGRAM:"vi_pressed");
+ }
+ }
+ program { name: "unselected";
+ signal: "elm,state,unselected";
+ source: "elm";
+ script {
+ new st[31], st2[31];
+ new Float:vl, Float:vl2;
+ get_state(PART:"delbtn/img", st, 30, vl);
+ get_state(PART:"elm.rect.dim", st2, 30, vl2);
+ if (!strcmp(st, "default") && !strcmp(st2, "default"))
+ run_program(PROGRAM:"vi_zoom_out");
+ }
+ }
+ GENGRID_PROGRAM_ITEM_SELECT_VI_EFFECT(
+ target: "bg";
+ target: "item_outer_bg";
+ target: "item_outer_bg_line";
+ target: "elm.swallow.content";
+ )
+ program { name: "mouse_down";
+ signal: "mouse,down,1";
+ source: "delbtn/img";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"delbtn/img", st, 30, vl);
+ if (!strcmp(st, "show"))
+ set_state(PART:"delbtn/img", "pressed", 0.0);
+ }
+ }
+ program { name: "mouse_out";
+ signal: "mouse,out";
+ source: "delbtn/img";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"delbtn/img", st, 30, vl);
+ if (!strcmp(st, "pressed"))
+ set_state(PART:"delbtn/img", "show", 0.0);
+ }
+ }
+ program { name: "mouse_up";
+ signal: "mouse,up,1";
+ source: "delbtn/img";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"delbtn/img", st, 30, vl);
+ if (!strcmp(st, "pressed"))
+ set_state(PART:"delbtn/img", "show", 0.0);
+ }
+ }
+ program { name: "play_sound_delbtn";
+ signal: "mouse,clicked,1";
+ source: "delbtn/img";
+ action: PLAY_SAMPLE "touch_sound" 1.0;
+ }
+ program { name: "play_sound_item";
+ signal: "mouse,clicked,1";
+ source: "item_outer_bg";
+ script {
+ new st[31], st2[31];
+ new Float:vl, Float:vl2;
+ get_state(PART:"delbtn/img", st, 30, vl);
+ get_state(PART:"elm.rect.dim", st2, 30, vl2);
+ if (!strcmp(st, "default") && !strcmp(st2, "default"))
+ play_sample("touch_sound", 1.0);
+ }
+ }
+ program { name: "show_lock_icon";
+ source: "elm";
+ signal: "elm,state,show,lockicon";
+ script {
+ set_state(PART:"icon_lock/img", "show", 0.0);
+ }
+ }
+ program { name: "hide_lock_icon";
+ source: "elm";
+ signal: "elm,state,hide,lockicon";
+ script {
+ set_state(PART:"icon_lock/img", "hide", 0.0);
+ }
+ }
+ program { name: "show_delbtn";
+ source: "elm";
+ signal: "elm,state,show,delbtn";
+ script {
+ set_state(PART:"delbtn/img", "show", 0.0);
+ }
+ }
+ program { name: "hide_delbtn";
+ source: "elm";
+ signal: "elm,state,hide,delbtn";
+ script {
+ set_state(PART:"delbtn/img", "default", 0.0);
+ }
+ }
+ program { name: "show_dim";
+ source: "elm";
+ signal: "elm,state,show,dim";
+ action: STATE_SET "show" 0.0;
+ target: "elm.rect.dim";
+ }
+ program { name: "hide_dim";
+ source: "elm";
+ signal: "elm,state,hide,dim";
+ action: STATE_SET "default" 0.0;
+ target: "elm.rect.dim";
+ }
+ }
+ }
+
+ group { name: "elm/gengrid/item/clipboard/text_style/default";
+ data.item: "texts" "elm.text";
+
+ images {
+ image: "B12_memo_bg.#.png" COMP;
+ image: "B12_memo_bg_line.#.png" COMP;
+ image: "B12_button_delete.png" COMP;
+ image: "B12_button_delete_press.png" COMP;
+ image: "B12_icon_lock.png" COMP;
+ }
+
+ styles {
+ style { name: "clipboard_01_style";
+ base: "font=Tizen:style=Regular font_size="GRID_TEXT_ITEM_FONT_SIZE_INC" color=#000000FF color_class=ATO001 align=left wrap=mixed text_class=ATO001";
+ tag: "br" "\n";
+ tag: "ps" "ps";
+ tag: "tab" "\t";
+ }
+ style { name: "clipboard_01_style_pressed";
+ base: "font=Tizen:style=Regular font_size="GRID_TEXT_ITEM_FONT_SIZE_INC" color=#FAFAFAFF color_class=ATO001 align=left wrap=mixed text_class=ATO001";
+ tag: "br" "\n";
+ tag: "ps" "ps";
+ tag: "tab" "\t";
+ }
+ }
+
+ parts {
+ part { name: "persp";
+ type: RECT;
+ description { state: "default" 0.0;
+ min: 32 32;
+ max: 32 32;
+ fixed: 1 1;
+ align: 0.5 0.5;
+ color: 0 0 0 0;
+ visible: 1;
+ perspective {
+ zplane: -70;
+ focal: 1000;
+ }
+ }
+ }
+ part { name: "persp1";
+ type: RECT;
+ description { state: "default" 0.0;
+ min: 32 32;
+ max: 32 32;
+ fixed: 1 1;
+ align: 0.5 0.5;
+ color: 0 0 0 0;
+ visible: 1;
+ perspective {
+ zplane: 0;
+ focal: 1000;
+ }
+ }
+ }
+ part { name: "bg";
+ type: RECT;
+ scale: 1;
+ description { state: "default" 0.0;
+ color: 0 0 0 0;
+ GENGRID_ITEM_SELECT_VI_EFFECT
+ }
+ }
+ part { name: "top_left_padding";
+ type: SPACER;
+ scale: 1;
+ description { state: "default" 0.0;
+ fixed: 1 1;
+ align: 0.0 0.0;
+ min: GRID_TEXT_ITEM_BG_LEFT_PADDING_INC GRID_TEXT_ITEM_BG_TOP_PADDING_INC;
+ max: GRID_TEXT_ITEM_BG_LEFT_PADDING_INC GRID_TEXT_ITEM_BG_TOP_PADDING_INC;
+ rel1 { relative: 0.0 0.0; to: "bg"; }
+ rel2 { relative: 0.0 0.0; to: "bg"; }
+ }
+ }
+ part { name: "bottom_right_padding";
+ type: SPACER;
+ scale: 1;
+ description { state: "default" 0.0;
+ fixed: 1 1;
+ align: 1.0 1.0;
+ min: GRID_TEXT_ITEM_BG_RIGHT_PADDING_INC GRID_TEXT_ITEM_BG_BOTTOM_PADDING_INC;
+ max: GRID_TEXT_ITEM_BG_RIGHT_PADDING_INC GRID_TEXT_ITEM_BG_BOTTOM_PADDING_INC;
+ rel1 { relative: 1.0 1.0; to: "bg"; }
+ rel2 { relative: 1.0 1.0; to: "bg"; }
+ }
+ }
+ part { name: "item_outer_bg";
+ type: RECT;
+ scale: 1;
+ mouse_events: 1;
+ description { state: "default" 0.0;
+ rel1 { relative: 1.0 1.0; to: "top_left_padding"; }
+ rel2 { relative: 0.0 0.0; to: "bottom_right_padding"; }
+ GENGRID_ITEM_SELECT_VI_EFFECT
+ }
+ }
+ part { name: "item_inner_bg_top_left_padding";
+ type: SPACER;
+ scale: 1;
+ description { state: "default" 0.0;
+ fixed: 1 1;
+ align: 0.0 0.0;
+ min: GRID_ITEM_OUTER_LINE_SIZE_INC GRID_ITEM_OUTER_LINE_SIZE_INC;
+ max: GRID_ITEM_OUTER_LINE_SIZE_INC GRID_ITEM_OUTER_LINE_SIZE_INC;
+ rel1 { relative: 0.0 0.0; to: "item_outer_bg"; }
+ rel2 { relative: 0.0 0.0; to: "item_outer_bg"; }
+ }
+ }
+ part { name: "item_inner_bg_bottom_right_padding";
+ type: SPACER;
+ scale: 1;
+ description { state: "default" 0.0;
+ fixed: 1 1;
+ align: 1.0 1.0;
+ min: GRID_ITEM_OUTER_LINE_SIZE_INC GRID_ITEM_OUTER_LINE_SIZE_INC;
+ max: GRID_ITEM_OUTER_LINE_SIZE_INC GRID_ITEM_OUTER_LINE_SIZE_INC;
+ rel1 { relative: 1.0 1.0; to: "item_outer_bg"; }
+ rel2 { relative: 1.0 1.0; to: "item_outer_bg"; }
+ }
+ }
+ part { name: "item_inner_bg";
+ type: RECT;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ rel1 { relative: 1.0 1.0; to: "item_inner_bg_top_left_padding"; }
+ rel2 { relative: 0.0 0.0; to: "item_inner_bg_bottom_right_padding"; }
+ color: 250 250 250 255;
+ GENGRID_ITEM_SELECT_VI_EFFECT
+ }
+ }
+ part { name: "item_bg_top_left_padding";
+ type: SPACER;
+ scale: 1;
+ description { state: "default" 0.0;
+ fixed: 1 1;
+ align: 0.0 0.0;
+ min: GRID_TEXT_ITEM_INNER_LINE_SIZE_INC GRID_TEXT_ITEM_INNER_LINE_SIZE_INC;
+ max: GRID_TEXT_ITEM_INNER_LINE_SIZE_INC GRID_TEXT_ITEM_INNER_LINE_SIZE_INC;
+ rel1 { relative: 0.0 0.0; to: "item_inner_bg"; }
+ rel2 { relative: 0.0 0.0; to: "item_inner_bg"; }
+ }
+ }
+ part { name: "item_bg_bottom_right_padding";
+ type: SPACER;
+ scale: 1;
+ description { state: "default" 0.0;
+ fixed: 1 1;
+ align: 1.0 1.0;
+ min: GRID_TEXT_ITEM_INNER_LINE_SIZE_INC GRID_TEXT_ITEM_INNER_LINE_SIZE_INC;
+ max: GRID_TEXT_ITEM_INNER_LINE_SIZE_INC GRID_TEXT_ITEM_INNER_LINE_SIZE_INC;
+ rel1 { relative: 1.0 1.0; to: "item_inner_bg"; }
+ rel2 { relative: 1.0 1.0; to: "item_inner_bg"; }
+ }
+ }
+ part { name: "item_bg";
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ rel1 { relative: 1.0 0.0; to: "item_bg_top_left_padding"; }
+ rel2 { relative: 0.0 0.0; to: "item_bg_bottom_right_padding"; }
+ color_class: "AO002L1";
+ image.normal: "B12_memo_bg.#.png";
+ GENGRID_ITEM_SELECT_VI_EFFECT
+ }
+ }
+ part { name: "text_top_left_padding";
+ type: SPACER;
+ scale: 1;
+ description { state: "default" 0.0;
+ fixed: 1 1;
+ align: 0.0 0.0;
+ min: GRID_TEXT_ITEM_LEFT_PADDING_INC GRID_TEXT_ITEM_TOP_PADDING_INC;
+ max: GRID_TEXT_ITEM_LEFT_PADDING_INC GRID_TEXT_ITEM_TOP_PADDING_INC;
+ rel1 { relative: 0.0 0.0; to: "item_outer_bg"; }
+ rel2 { relative: 0.0 0.0; to: "item_outer_bg"; }
+ }
+ }
+ part { name: "text_bottom_right_padding";
+ type: SPACER;
+ scale: 1;
+ description { state: "default" 0.0;
+ fixed: 1 1;
+ align: 1.0 1.0;
+ min: GRID_TEXT_ITEM_LEFT_PADDING_INC GRID_TEXT_ITEM_TOP_PADDING_INC;
+ max: GRID_TEXT_ITEM_LEFT_PADDING_INC GRID_TEXT_ITEM_TOP_PADDING_INC;
+ rel1 { relative: 1.0 1.0; to: "item_outer_bg"; }
+ rel2 { relative: 1.0 1.0; to: "item_outer_bg"; }
+ }
+ }
+ part { name: "elm.text";
+ type: TEXTBLOCK;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ text {
+ style: "clipboard_01_style";
+ align: 0.0 0.0;
+ }
+ rel1 { relative: 1.0 1.0; to: "text_top_left_padding"; }
+ rel2 { relative: 0.0 0.0; to: "text_bottom_right_padding"; }
+ }
+ description { state: "pressed" 0.0;
+ inherit: "default" 0.0;
+ text {
+ style: "clipboard_01_style_pressed";
+ align: 0.0 0.0;
+ }
+ GENGRID_ITEM_SELECT_VI_EFFECT
+ }
+ }
+ part { name: "elm.rect.dim";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ visible: 0;
+ color: 0 0 0 200;
+ rel1.to: "item_bg";
+ rel2.to: "item_bg";
+ }
+ description { state: "show" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ }
+ part { name: "icon_lock/img";
+ scale: 1;
+ mouse_events: 1;
+ description { state: "default" 0.0;
+ rel1 { relative: 0.5 0.5; to: "item_bg"; }
+ rel2 { relative: 0.5 0.5; to: "item_bg"; }
+ align: 0.5 0.5;
+ fixed: 1 1;
+ min: GRID_ITEM_LOCK_BTN_SIZE_INC;
+ max: GRID_ITEM_LOCK_BTN_SIZE_INC;
+ visible: 0;
+ }
+ description { state: "show" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ image {
+ normal: "B12_icon_lock.png";
+ }
+ }
+ }
+ part { name: "delbtn_top_left_padding";
+ type: SPACER;
+ scale: 1;
+ description { state: "default" 0.0;
+ fixed: 1 1;
+ align: 1.0 1.0;
+ min: GRID_ITEM_DELETE_BTN_TOP_PADDING_INC GRID_ITEM_DELETE_BTN_TOP_PADDING_INC;
+ max: GRID_ITEM_DELETE_BTN_TOP_PADDING_INC GRID_ITEM_DELETE_BTN_TOP_PADDING_INC;
+ rel1 { relative: 0.0 0.0; to: "item_outer_bg"; }
+ rel2 { relative: 0.0 0.0; to: "item_outer_bg"; }
+ }
+ }
+ part { name: "delbtn";
+ type: SPACER;
+ scale: 1;
+ description { state: "default" 0.0;
+ rel1 { relative: 0.0 0.0; to: "delbtn_top_left_padding"; }
+ rel2 { relative: 0.0 0.0; to: "delbtn_top_left_padding"; }
+ align: 0.0 0.0;
+ fixed: 1 1;
+ min: GRID_ITEM_DELETE_BTN_SIZE_INC;
+ max: GRID_ITEM_DELETE_BTN_SIZE_INC;
+ }
+ }
+ part { name: "delbtn/img";
+ scale: 1;
+ mouse_events: 1;
+ description { state: "default" 0.0;
+ rel1.to: "delbtn";
+ rel2.to: "delbtn";
+ visible: 0;
+ }
+ description { state: "show" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ image {
+ normal: "B12_button_delete.png";
+ }
+ }
+ description { state: "pressed" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ image {
+ normal: "B12_button_delete_press.png";
+ }
+ }
+ }
+ }
+ programs {
+ program { name: "selected";
+ signal: "elm,state,selected";
+ source: "elm";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"delbtn/img", st, 30, vl);
+ if (!strcmp(st, "default"))
+ run_program(PROGRAM:"vi_pressed");
+ }
+ }
+ program { name: "unselected";
+ signal: "elm,state,unselected";
+ source: "elm";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"delbtn/img", st, 30, vl);
+ if (!strcmp(st, "default"))
+ run_program(PROGRAM:"vi_zoom_out");
+ }
+ }
+ GENGRID_PROGRAM_ITEM_SELECT_VI_EFFECT(
+ target: "bg";
+ target: "item_outer_bg";
+ target: "item_inner_bg";
+ target: "item_bg";
+ target: "elm.text";
+ )
+ program { name: "mouse_down";
+ signal: "mouse,down,1";
+ source: "delbtn/img";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"delbtn/img", st, 30, vl);
+ if (!strcmp(st, "show"))
+ set_state(PART:"delbtn/img", "pressed", 0.0);
+ }
+ }
+ program { name: "mouse_out";
+ signal: "mouse,out";
+ source: "delbtn/img";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"delbtn/img", st, 30, vl);
+ if (!strcmp(st, "pressed"))
+ set_state(PART:"delbtn/img", "show", 0.0);
+ }
+ }
+ program { name: "mouse_up";
+ signal: "mouse,up,1";
+ source: "delbtn/img";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"delbtn/img", st, 30, vl);
+ if (!strcmp(st, "pressed"))
+ set_state(PART:"delbtn/img", "show", 0.0);
+ }
+ }
+ program { name: "play_sound_delbtn";
+ signal: "mouse,clicked,1";
+ source: "delbtn/img";
+ action: PLAY_SAMPLE "touch_sound" 1.0;
+ }
+ program { name: "play_sound_item";
+ signal: "mouse,clicked,1";
+ source: "item_outer_bg";
+ script {
+ new st[31], st2[31];
+ new Float:vl, Float:vl2;
+ get_state(PART:"delbtn/img", st, 30, vl);
+ get_state(PART:"elm.rect.dim", st2, 30, vl2);
+ if (!strcmp(st, "default") && !strcmp(st2, "default"))
+ play_sample("touch_sound", 1.0);
+ }
+ }
+ program { name: "show_lock_icon";
+ source: "elm";
+ signal: "elm,state,show,lockicon";
+ script {
+ set_state(PART:"icon_lock/img", "show", 0.0);
+ }
+ }
+ program { name: "hide_lock_icon";
+ source: "elm";
+ signal: "elm,state,hide,lockicon";
+ script {
+ set_state(PART:"icon_lock/img", "hide", 0.0);
+ }
+ }
+ program { name: "show_delbtn";
+ source: "elm";
+ signal: "elm,state,show,delbtn";
+ script {
+ set_state(PART:"delbtn/img", "show", 0.0);
+ }
+ }
+ program { name: "hide_delbtn";
+ source: "elm";
+ signal: "elm,state,hide,delbtn";
+ script {
+ set_state(PART:"delbtn/img", "default", 0.0);
+ }
+ }
+ program { name: "show_dim";
+ source: "elm";
+ signal: "elm,state,show,dim";
+ action: STATE_SET "show" 0.0;
+ target: "elm.rect.dim";
+ }
+ program { name: "hide_dim";
+ source: "elm";
+ signal: "elm,state,hide,dim";
+ action: STATE_SET "default" 0.0;
+ target: "elm.rect.dim";
+ }
+ }
+ }
+
+ group { name: "elm/gengrid/item/clipboard/combined_style/default";
+ data.item: "texts" "elm.text";
+ data.item: "contents" "elm.swallow.content";
+
+ images {
+ image: "B12_memo_bg.#.png" COMP;
+ image: "B12_memo_bg_line.#.png" COMP;
+ image: "B12_button_delete.png" COMP;
+ image: "B12_button_delete_press.png" COMP;
+ image: "B12_icon_lock.png" COMP;
+ }
+
+ styles {
+ style { name: "clipboard_02_style";
+ base: "font=Tizen:style=Regular font_size="GRID_COMBINED_ITEM_FONT_SIZE_INC" color=#000000FF color_class=ATO002 align=left wrap=mixed text_class=ATO002";
+ tag: "br" "\n";
+ tag: "ps" "ps";
+ tag: "tab" "\t";
+ }
+ style { name: "clipboard_02_style_pressed";
+ base: "font=Tizen:style=Regular font_size="GRID_COMBINED_ITEM_FONT_SIZE_INC" color=#FAFAFAFF color_class-ATO002 align=left wrap=mixed text_class=ATO002";
+ tag: "br" "\n";
+ tag: "ps" "ps";
+ tag: "tab" "\t";
+ }
+ }
+
+ parts {
+ part { name: "persp";
+ type: RECT;
+ description { state: "default" 0.0;
+ min: 32 32;
+ max: 32 32;
+ fixed: 1 1;
+ align: 0.5 0.5;
+ color: 0 0 0 0;
+ visible: 1;
+ perspective {
+ zplane: -70;
+ focal: 1000;
+ }
+ }
+ }
+ part { name: "persp1";
+ type: RECT;
+ description { state: "default" 0.0;
+ min: 32 32;
+ max: 32 32;
+ fixed: 1 1;
+ align: 0.5 0.5;
+ color: 0 0 0 0;
+ visible: 1;
+ perspective {
+ zplane: 0;
+ focal: 1000;
+ }
+ }
+ }
+ part { name: "bg";
+ type: RECT;
+ scale: 1;
+ description { state: "default" 0.0;
+ color: 0 0 0 0;
+ GENGRID_ITEM_SELECT_VI_EFFECT
+ }
+ }
+ part { name: "top_left_padding";
+ type: SPACER;
+ scale: 1;
+ description { state: "default" 0.0;
+ fixed: 1 1;
+ align: 0.0 0.0;
+ min: GRID_TEXT_ITEM_BG_LEFT_PADDING_INC GRID_TEXT_ITEM_BG_TOP_PADDING_INC;
+ max: GRID_TEXT_ITEM_BG_LEFT_PADDING_INC GRID_TEXT_ITEM_BG_TOP_PADDING_INC;
+ rel1 { relative: 0.0 0.0; to: "bg"; }
+ rel2 { relative: 0.0 0.0; to: "bg"; }
+ }
+ }
+ part { name: "bottom_right_padding";
+ type: SPACER;
+ scale: 1;
+ description { state: "default" 0.0;
+ fixed: 1 1;
+ align: 1.0 1.0;
+ min: GRID_TEXT_ITEM_BG_RIGHT_PADDING_INC GRID_TEXT_ITEM_BG_BOTTOM_PADDING_INC;
+ max: GRID_TEXT_ITEM_BG_RIGHT_PADDING_INC GRID_TEXT_ITEM_BG_BOTTOM_PADDING_INC;
+ rel1 { relative: 1.0 1.0; to: "bg"; }
+ rel2 { relative: 1.0 1.0; to: "bg"; }
+ }
+ }
+ part { name: "item_outer_bg";
+ type: RECT;
+ scale: 1;
+ mouse_events: 1;
+ description { state: "default" 0.0;
+ rel1 { relative: 1.0 1.0; to: "top_left_padding"; }
+ rel2 { relative: 0.0 0.0; to: "bottom_right_padding"; }
+ GENGRID_ITEM_SELECT_VI_EFFECT
+ }
+ }
+ part { name: "item_inner_bg_top_left_padding";
+ type: SPACER;
+ scale: 1;
+ description { state: "default" 0.0;
+ fixed: 1 1;
+ align: 0.0 0.0;
+ min: GRID_ITEM_OUTER_LINE_SIZE_INC GRID_ITEM_OUTER_LINE_SIZE_INC;
+ max: GRID_ITEM_OUTER_LINE_SIZE_INC GRID_ITEM_OUTER_LINE_SIZE_INC;
+ rel1 { relative: 0.0 0.0; to: "item_outer_bg"; }
+ rel2 { relative: 0.0 0.0; to: "item_outer_bg"; }
+ }
+ }
+ part { name: "item_inner_bg_bottom_right_padding";
+ type: SPACER;
+ scale: 1;
+ description { state: "default" 0.0;
+ fixed: 1 1;
+ align: 1.0 1.0;
+ min: GRID_ITEM_OUTER_LINE_SIZE_INC GRID_ITEM_OUTER_LINE_SIZE_INC;
+ max: GRID_ITEM_OUTER_LINE_SIZE_INC GRID_ITEM_OUTER_LINE_SIZE_INC;
+ rel1 { relative: 1.0 1.0; to: "item_outer_bg"; }
+ rel2 { relative: 1.0 1.0; to: "item_outer_bg"; }
+ }
+ }
+ part { name: "item_inner_bg";
+ type: RECT;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ rel1 { relative: 1.0 1.0; to: "item_inner_bg_top_left_padding"; }
+ rel2 { relative: 0.0 0.0; to: "item_inner_bg_bottom_right_padding"; }
+ color: 250 250 250 255;
+ GENGRID_ITEM_SELECT_VI_EFFECT
+ }
+ }
+ part { name: "item_bg_top_left_padding";
+ type: SPACER;
+ scale: 1;
+ description { state: "default" 0.0;
+ fixed: 1 1;
+ align: 0.0 0.0;
+ min: GRID_TEXT_ITEM_INNER_LINE_SIZE_INC GRID_TEXT_ITEM_INNER_LINE_SIZE_INC;
+ max: GRID_TEXT_ITEM_INNER_LINE_SIZE_INC GRID_TEXT_ITEM_INNER_LINE_SIZE_INC;
+ rel1 { relative: 0.0 0.0; to: "item_inner_bg"; }
+ rel2 { relative: 0.0 0.0; to: "item_inner_bg"; }
+ }
+ }
+ part { name: "item_bg_bottom_right_padding";
+ type: SPACER;
+ scale: 1;
+ description { state: "default" 0.0;
+ fixed: 1 1;
+ align: 1.0 1.0;
+ min: GRID_TEXT_ITEM_INNER_LINE_SIZE_INC GRID_TEXT_ITEM_INNER_LINE_SIZE_INC;
+ max: GRID_TEXT_ITEM_INNER_LINE_SIZE_INC GRID_TEXT_ITEM_INNER_LINE_SIZE_INC;
+ rel1 { relative: 1.0 1.0; to: "item_inner_bg"; }
+ rel2 { relative: 1.0 1.0; to: "item_inner_bg"; }
+ }
+ }
+ part { name: "item_bg";
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ rel1 { relative: 1.0 0.0; to: "item_bg_top_left_padding"; }
+ rel2 { relative: 0.0 0.0; to: "item_bg_bottom_right_padding"; }
+ color_class: "AO002L1";
+ image.normal: "B12_memo_bg.#.png";
+ GENGRID_ITEM_SELECT_VI_EFFECT
+ }
+ }
+ part { name: "content_top_left_padding";
+ type: SPACER;
+ scale: 1;
+ description { state: "default" 0.0;
+ fixed: 1 1;
+ align: 0.0 0.0;
+ min: GRID_COMBINED_ITEM_LEFT_PADDING_INC GRID_COMBINED_ITEM_TOP_PADDING_INC;
+ max: GRID_COMBINED_ITEM_LEFT_PADDING_INC GRID_COMBINED_ITEM_TOP_PADDING_INC;
+ rel1 { relative: 0.0 0.0; to: "item_outer_bg"; }
+ rel2 { relative: 0.0 0.0; to: "item_outer_bg"; }
+ }
+ }
+ part { name: "text_bottom_right_padding";
+ type: SPACER;
+ scale: 1;
+ description { state: "default" 0.0;
+ fixed: 1 1;
+ align: 1.0 1.0;
+ min: GRID_COMBINED_ITEM_LEFT_PADDING_INC GRID_COMBINED_ITEM_TOP_PADDING_INC;
+ max: GRID_COMBINED_ITEM_LEFT_PADDING_INC GRID_COMBINED_ITEM_TOP_PADDING_INC;
+ rel1 { relative: 1.0 1.0; to: "item_outer_bg"; }
+ rel2 { relative: 1.0 1.0; to: "item_outer_bg"; }
+ }
+ }
+ part { name: "elm.swallow.content";
+ type: SWALLOW;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ align: 0.0 0.0;
+ max: GRID_COMBINED_ITEM_W_INC GRID_COMBINED_ITEM_IMAGE_H_INC;
+ rel1 { relative: 1.0 1.0; to: "content_top_left_padding"; }
+ rel2 { relative: 1.0 1.0; to: "content_top_left_padding"; }
+ GENGRID_ITEM_SELECT_VI_EFFECT
+ }
+ }
+ part { name: "separator_padding";
+ type: SPACER;
+ scale: 1;
+ description { state: "default" 0.0;
+ fixed: 1 1;
+ align: 0.5 0.0;
+ min: 0 GRID_COMBINED_ITEM_PADDING_INC;
+ max: -1 GRID_COMBINED_ITEM_PADDING_INC;
+ rel1 { relative: 0.0 1.0; to: "elm.swallow.content"; }
+ rel2 { relative: 0.0 1.0; to_x: "text_bottom_right_padding"; to_y: "elm.swallow.content"; }
+ }
+ }
+ part { name: "elm.text";
+ type: TEXTBLOCK;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ text {
+ style: "clipboard_02_style";
+ align: 0.0 0.0;
+ }
+ rel1 { relative: 0.0 1.0; to: "separator_padding"; }
+ rel2 { relative: 0.0 0.0; to: "text_bottom_right_padding"; }
+ }
+ description { state: "pressed" 0.0;
+ inherit: "default" 0.0;
+ text {
+ style: "clipboard_02_style_pressed";
+ align: 0.0 0.0;
+ }
+ GENGRID_ITEM_SELECT_VI_EFFECT
+ }
+ }
+ part { name: "elm.rect.dim";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ visible: 0;
+ color: 0 0 0 200;
+ rel1.to: "item_bg";
+ rel2.to: "item_bg";
+ }
+ description { state: "show" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ }
+ part { name: "icon_lock/img";
+ scale: 1;
+ mouse_events: 1;
+ description { state: "default" 0.0;
+ rel1 { relative: 0.5 0.5; to: "item_bg"; }
+ rel2 { relative: 0.5 0.5; to: "item_bg"; }
+ align: 0.5 0.5;
+ fixed: 1 1;
+ min: GRID_ITEM_LOCK_BTN_SIZE_INC;
+ max: GRID_ITEM_LOCK_BTN_SIZE_INC;
+ visible: 0;
+ }
+ description { state: "show" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ image {
+ normal: "B12_icon_lock.png";
+ }
+ }
+ }
+ part { name: "delbtn_top_left_padding";
+ type: SPACER;
+ scale: 1;
+ description { state: "default" 0.0;
+ fixed: 1 1;
+ align: 1.0 1.0;
+ min: GRID_ITEM_DELETE_BTN_TOP_PADDING_INC GRID_ITEM_DELETE_BTN_TOP_PADDING_INC;
+ max: GRID_ITEM_DELETE_BTN_TOP_PADDING_INC GRID_ITEM_DELETE_BTN_TOP_PADDING_INC;
+ rel1 { relative: 0.0 0.0; to: "item_outer_bg"; }
+ rel2 { relative: 0.0 0.0; to: "item_outer_bg"; }
+ }
+ }
+ part { name: "delbtn";
+ type: SPACER;
+ scale: 1;
+ description { state: "default" 0.0;
+ rel1 { relative: 0.0 1.0; to: "delbtn_top_left_padding"; }
+ rel2 { relative: 0.0 1.0; to: "delbtn_top_left_padding"; }
+ align: 0.0 0.0;
+ fixed: 1 1;
+ min: GRID_ITEM_DELETE_BTN_SIZE_INC;
+ max: GRID_ITEM_DELETE_BTN_SIZE_INC;
+ }
+ }
+ part { name: "delbtn/img";
+ scale: 1;
+ mouse_events: 1;
+ description { state: "default" 0.0;
+ rel1.to: "delbtn";
+ rel2.to: "delbtn";
+ visible: 0;
+ }
+ description { state: "show" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ image {
+ normal: "B12_button_delete.png";
+ }
+ }
+ description { state: "pressed" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ image {
+ normal: "B12_button_delete_press.png";
+ }
+ }
+ }
+ }
+ programs {
+ program { name: "selected";
+ signal: "elm,state,selected";
+ source: "elm";
+ script {
+ new st[31], st2[31];
+ new Float:vl, Float:vl2;
+ get_state(PART:"delbtn/img", st, 30, vl);
+ get_state(PART:"elm.rect.dim", st2, 30, vl2);
+ if (!strcmp(st, "default") && !strcmp(st2, "default"))
+ run_program(PROGRAM:"vi_pressed");
+ }
+ }
+ program { name: "unselected";
+ signal: "elm,state,unselected";
+ source: "elm";
+ script {
+ new st[31], st2[31];
+ new Float:vl, Float:vl2;
+ get_state(PART:"delbtn/img", st, 30, vl);
+ get_state(PART:"elm.rect.dim", st2, 30, vl2);
+ if (!strcmp(st, "default") && !strcmp(st2, "default"))
+ run_program(PROGRAM:"vi_zoom_out");
+ }
+ }
+ GENGRID_PROGRAM_ITEM_SELECT_VI_EFFECT(
+ target: "bg";
+ target: "item_outer_bg";
+ target: "item_inner_bg";
+ target: "item_bg";
+ target: "elm.swallow.content";
+ target: "elm.text";
+ )
+ program { name: "mouse_down";
+ signal: "mouse,down,1";
+ source: "delbtn/img";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"delbtn/img", st, 30, vl);
+ if (!strcmp(st, "show"))
+ set_state(PART:"delbtn/img", "pressed", 0.0);
+ }
+ }
+ program { name: "mouse_out";
+ signal: "mouse,out";
+ source: "delbtn/img";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"delbtn/img", st, 30, vl);
+ if (!strcmp(st, "pressed"))
+ set_state(PART:"delbtn/img", "show", 0.0);
+ }
+ }
+ program { name: "mouse_up";
+ signal: "mouse,up,1";
+ source: "delbtn/img";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"delbtn/img", st, 30, vl);
+ if (!strcmp(st, "pressed"))
+ set_state(PART:"delbtn/img", "show", 0.0);
+ }
+ }
+ program { name: "play_sound_delbtn";
+ signal: "mouse,clicked,1";
+ source: "delbtn/img";
+ action: PLAY_SAMPLE "touch_sound" 1.0;
+ }
+ program { name: "play_sound_item";
+ signal: "mouse,clicked,1";
+ source: "item_outer_bg";
+ script {
+ new st[31], st2[31];
+ new Float:vl, Float:vl2;
+ get_state(PART:"delbtn/img", st, 30, vl);
+ get_state(PART:"elm.rect.dim", st2, 30, vl2);
+ if (!strcmp(st, "default") && !strcmp(st2, "default"))
+ play_sample("touch_sound", 1.0);
+ }
+ }
+ program { name: "show_lock_icon";
+ source: "elm";
+ signal: "elm,state,show,lockicon";
+ script {
+ set_state(PART:"icon_lock/img", "show", 0.0);
+ }
+ }
+ program { name: "hide_lock_icon";
+ source: "elm";
+ signal: "elm,state,hide,lockicon";
+ script {
+ set_state(PART:"icon_lock/img", "hide", 0.0);
+ }
+ }
+ program { name: "show_delbtn";
+ source: "elm";
+ signal: "elm,state,show,delbtn";
+ script {
+ set_state(PART:"delbtn/img", "show", 0.0);
+ }
+ }
+ program { name: "hide_delbtn";
+ source: "elm";
+ signal: "elm,state,hide,delbtn";
+ script {
+ set_state(PART:"delbtn/img", "default", 0.0);
+ }
+ }
+ program { name: "show_dim";
+ source: "elm";
+ signal: "elm,state,show,dim";
+ action: STATE_SET "show" 0.0;
+ target: "elm.rect.dim";
+ }
+ program { name: "hide_dim";
+ source: "elm";
+ signal: "elm,state,hide,dim";
+ action: STATE_SET "default" 0.0;
+ target: "elm.rect.dim";
+ }
+ }
+ }
+}
--- /dev/null
+#define DEMO_POPUP_CONTENT_LISTSTYLE_CONTENT_DEFAULT_MIN_INC 0 112
+
+group { name: "elm/layout/content/menustyle";
+ parts{
+ part{ name:"elm.swallow.content";
+ type: SWALLOW;
+ scale: 1;
+ description { state: "default" 0.0;
+ min: DEMO_POPUP_CONTENT_LISTSTYLE_CONTENT_DEFAULT_MIN_INC;
+ align: 0.5 0.5;
+ fixed: 1 0;
+ }
+ }
+ }
+}
--- /dev/null
+/*
+ * Copyright (c) 2010 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php)
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * vim:ts=3
+*/
+
+#define SCROLLER_DEFAULT_SCROLLBAR_VBAR_IMAGE "B12_panel_scroll_bar.png"
+#define SCROLLER_DEFAULT_SCROLLBAR_HBAR_IMAGE "B12_panel_scroll_bar.png"
+#define SCROLLER_DEFAULT_SCROLLBAR_VBAR_IMAGE_BORDER 0 0 12 14
+#define SCROLLER_DEFAULT_SCROLLBAR_HBAR_IMAGE_BORDER 12 14 0 0
+#define SCROLLER_DEFAULT_SCROLLBAR_VBAR_MIN_SIZE_INC 18 72
+#define SCROLLER_DEFAULT_SCROLLBAR_VBAR_MAX_SIZE_INC 18 99999
+#define SCROLLER_DEFAULT_SCROLLBAR_HBAR_MIN_SIZE_INC 72 18
+#define SCROLLER_DEFAULT_SCROLLBAR_HBAR_MAX_SIZE_INC 99999 18
+#define SCROLLER_DEFAULT_SCROLLBAR_VBAR_PADDING_SIZE 6
+#define SCROLLER_DEFAULT_SCROLLBAR_HBAR_PADDING_SIZE 0
+#define SCROLLER_MATCHLIST_SCROLLBAR_VBAR_IMAGE "B12_panel_scroll_bar.png"
+#define SCROLLER_MATCHLIST_SCROLLBAR_HBAR_IMAGE "B12_panel_scroll_bar.png"
+#define SCROLLER_MATCHLIST_SCROLLBAR_BG_IMAGE_BORDER 13 13 10 15
+#define SCROLLER_MATCHLIST_SCROLLBAR_VBAR_PADDING_SIZE 6
+#define SCROLLER_MATCHLIST_SCROLLBAR_HBAR_PADDING_SIZE 16
+#define SCROLLER_MATCHLIST_SCROLLBAR_VBAR_MIN_SIZE_INC 16 238
+#define SCROLLER_MATCHLIST_SCROLLBAR_VBAR_MAX_SIZE_INC 16 99999
+#define SCROLLER_MATCHLIST_SCROLLBAR_HBAR_MIN_SIZE_INC 180 16
+#define SCROLLER_MATCHLIST_SCROLLBAR_HBAR_MAX_SIZE_INC 99999 16
+#define SCROLLER_MATCHLIST_SCROLLBAR_VBAR_RUNNER_BORDER 0 0 4 4
+#define SCROLLER_MATCHLIST_SCROLLBAR_HBAR_RUNNER_BORDER 4 4 0 0
+#define SCROLLER_MATCHLIST_SCROLLBAR_VBAR_IMAGE_BORDER 0 0 12 14
+#define SCROLLER_MATCHLIST_SCROLLBAR_HBAR_IMAGE_BORDER 12 14 0 0
+#define SCROLLER_MATCHLIST_SCROLLBAR_VBAR_OVER1 6 6 6 0
+#define SCROLLER_MATCHLIST_SCROLLBAR_VBAR_OVER2 6 6 6 0
+#define SCROLLER_MATCHLIST_SCROLLBAR_HBAR_OVER1 6 6 6 0
+#define SCROLLER_MATCHLIST_SCROLLBAR_HBAR_OVER2 6 6 6 0
+#define SCROLLER_PHOTOCAM_SCROLLBAR_VBAR_IMAGE "B12_panel_scroll_bar.png"
+#define SCROLLER_PHOTOCAM_SCROLLBAR_HBAR_IMAGE "B12_panel_scroll_bar.png"
+#define SCROLLER_PHOTOCAM_SCROLLBAR_VBAR_PADDING_SIZE 6
+#define SCROLLER_PHOTOCAM_SCROLLBAR_HBAR_PADDING_SIZE 16
+#define SCROLLER_PHOTOCAM_SCROLLBAR_VBAR_MIN_SIZE_INC 16 238
+#define SCROLLER_PHOTOCAM_SCROLLBAR_VBAR_MAX_SIZE_INC 16 99999
+#define SCROLLER_PHOTOCAM_SCROLLBAR_HBAR_MIN_SIZE_INC 180 16
+#define SCROLLER_PHOTOCAM_SCROLLBAR_HBAR_MAX_SIZE_INC 99999 16
+#define SCROLLER_PHOTOCAM_SCROLLBAR_VBAR_RUNNER_BORDER 0 0 4 4
+#define SCROLLER_PHOTOCAM_SCROLLBAR_HBAR_RUNNER_BORDER 4 4 0 0
+#define SCROLLER_PHOTOCAM_SCROLLBAR_VBAR_IMAGE_BORDER 0 0 12 14
+#define SCROLLER_PHOTOCAM_SCROLLBAR_HBAR_IMAGE_BORDER 12 14 0 0
+#define SCROLLER_PHOTOCAM_SCROLLBAR_VBAR_OVER1 6 6 6 0
+#define SCROLLER_PHOTOCAM_SCROLLBAR_VBAR_OVER2 6 6 6 0
+#define SCROLLER_PHOTOCAM_SCROLLBAR_HBAR_OVER1 6 6 6 0
+#define SCROLLER_PHOTOCAM_SCROLLBAR_HBAR_OVER2 6 6 6 0
+#define SCROLLER_HANDLER_SCROLLBAR_VBAR_MIN_SIZE_INC 36 234
+#define SCROLLER_HANDLER_SCROLLBAR_HBAR_MIN_SIZE_INC 234 36
+#define SCROLLER_HANDLER_SCROLLBAR_VBAR_MIDDLE_MIN_SIZE_INC 36 37
+#define SCROLLER_HANDLER_SCROLLBAR_HBAR_MIDDLE_MIN_SIZE_INC 37 36
+#define SCROLLER_HANDLER_SCROLLBAR_VBAR_BOTTOM_BORDER 10 10 0 10
+#define SCROLLER_HANDLER_SCROLLBAR_VBAR_RIGHT_BORDER 0 10 10 10
+
+#define BUTTON_JUMP_TOP_PADDING_TO_SCROLLER_MIN_MAX_INC 26 18
+#define BUTTON_JUMP_LEFT_PADDING_TO_SCROLLER_MIN_MAX_INC 26 18
+
+#define GENGRID_POPUP_CONTENT_TOP_PADDING 26
+#define GENGRID_POPUP_CONTENT_BOTTOM_PADDING 26
+
+#define OVERSCROLL_EFFECT_IMAGES\
+ image: "bouncing_left_00.png" COMP;\
+ image: "bouncing_left_01.png" COMP;\
+ image: "bouncing_left_02.png" COMP;\
+ image: "bouncing_left_03.png" COMP;\
+ image: "bouncing_left_04.png" COMP;\
+ image: "bouncing_left_05.png" COMP;\
+ image: "bouncing_left_06.png" COMP;\
+ image: "bouncing_left_07.png" COMP;\
+ image: "bouncing_left_08.png" COMP;\
+ image: "bouncing_left_09.png" COMP;\
+ image: "bouncing_left_10.png" COMP;\
+ image: "bouncing_left_11.png" COMP;\
+ image: "bouncing_left_12.png" COMP;\
+ image: "bouncing_left_13.png" COMP;\
+ image: "bouncing_left_14.png" COMP;\
+ image: "bouncing_left_15.png" COMP;\
+ image: "bouncing_left_16.png" COMP;\
+ image: "bouncing_left_17.png" COMP;\
+ image: "bouncing_left_18.png" COMP;\
+ image: "bouncing_left_19.png" COMP;\
+ image: "bouncing_right_00.png" COMP;\
+ image: "bouncing_right_01.png" COMP;\
+ image: "bouncing_right_02.png" COMP;\
+ image: "bouncing_right_03.png" COMP;\
+ image: "bouncing_right_04.png" COMP;\
+ image: "bouncing_right_05.png" COMP;\
+ image: "bouncing_right_06.png" COMP;\
+ image: "bouncing_right_07.png" COMP;\
+ image: "bouncing_right_08.png" COMP;\
+ image: "bouncing_right_09.png" COMP;\
+ image: "bouncing_right_10.png" COMP;\
+ image: "bouncing_right_11.png" COMP;\
+ image: "bouncing_right_12.png" COMP;\
+ image: "bouncing_right_13.png" COMP;\
+ image: "bouncing_right_14.png" COMP;\
+ image: "bouncing_right_15.png" COMP;\
+ image: "bouncing_right_16.png" COMP;\
+ image: "bouncing_right_17.png" COMP;\
+ image: "bouncing_right_18.png" COMP;\
+ image: "bouncing_right_19.png" COMP;
+
+#define OVERSCROLL_EFFECT_DESCRIPTIONS(NAME)\
+ OVERSCROLL_EFFECT_DESCRIPTION(00, NAME)\
+ OVERSCROLL_EFFECT_DESCRIPTION(01, NAME)\
+ OVERSCROLL_EFFECT_DESCRIPTION(02, NAME)\
+ OVERSCROLL_EFFECT_DESCRIPTION(03, NAME)\
+ OVERSCROLL_EFFECT_DESCRIPTION(04, NAME)\
+ OVERSCROLL_EFFECT_DESCRIPTION(05, NAME)\
+ OVERSCROLL_EFFECT_DESCRIPTION(06, NAME)\
+ OVERSCROLL_EFFECT_DESCRIPTION(07, NAME)\
+ OVERSCROLL_EFFECT_DESCRIPTION(08, NAME)\
+ OVERSCROLL_EFFECT_DESCRIPTION(09, NAME)\
+ OVERSCROLL_EFFECT_DESCRIPTION(10, NAME)\
+ OVERSCROLL_EFFECT_DESCRIPTION(11, NAME)\
+ OVERSCROLL_EFFECT_DESCRIPTION(12, NAME)\
+ OVERSCROLL_EFFECT_DESCRIPTION(13, NAME)\
+ OVERSCROLL_EFFECT_DESCRIPTION(14, NAME)\
+ OVERSCROLL_EFFECT_DESCRIPTION(15, NAME)\
+ OVERSCROLL_EFFECT_DESCRIPTION(16, NAME)\
+ OVERSCROLL_EFFECT_DESCRIPTION(17, NAME)\
+ OVERSCROLL_EFFECT_DESCRIPTION(18, NAME)\
+ OVERSCROLL_EFFECT_DESCRIPTION(19, NAME)
+
+#define OVERSCROLL_EFFECT_DESCRIPTION(NUMBER, NAME)\
+ description { state: "show_effect" "0."NUMBER"";\
+ inherit: "default" 0.0;\
+ visible: 1;\
+ image {\
+ normal: "bouncing_"NAME"_"NUMBER".png";\
+ }\
+ }
+
+#define OVERSCROLL_EFFECT_FUNCTION(NAME, SRC)\
+ program { name: "start_effect_"NAME;\
+ script {\
+ new st[31];\
+ new Float:state;\
+ get_state(PART:SRC, st, 30, state);\
+ if (state < 0.09)\
+ {\
+ state += 0.01;\
+ set_state(PART:SRC, "show_effect", state);\
+ run_program(PROGRAM:"delay_"NAME);\
+ }\
+ else if ((state < 0.19 && state >= 0.09) && !get_int(effect_hold))\
+ {\
+ state += 0.01;\
+ set_state(PART:SRC, "show_effect", state);\
+ run_program(PROGRAM:"delay_"NAME);\
+ }\
+ else if (state >= 0.19 && !get_int(effect_hold))\
+ {\
+ set_int(effect_on, 0);\
+ set_state(PART:SRC, "hidden", 0.0);\
+ run_program(PROGRAM:"end_action_"NAME);\
+ }\
+ else\
+ {\
+ run_program(PROGRAM:"delay_"NAME);\
+ }\
+ }\
+ }\
+ program { name: "content_move_"NAME;\
+ signal: "elm,action,scroll";\
+ source: "elm";\
+ script {\
+ new st[31];\
+ new Float:state;\
+ get_state(PART:SRC, st, 30, state);\
+ if (!strcmp(st, "show_effect"))\
+ {\
+ set_int(effect_on, 0);\
+ set_state(PART:SRC, "hidden", 0.0);\
+ run_program(PROGRAM:"end_action_"NAME);\
+ }\
+ }\
+ }\
+ program { name: "delay_"NAME;\
+ in: 0.033 0.0;\
+ after: "start_effect_"NAME;\
+ }\
+ program { name: "end_action_"NAME;\
+ action: ACTION_STOP;\
+ target: "start_effect_"NAME;\
+ target: "delay_"NAME;\
+ }\
+ program { name: "edge_"NAME;\
+ signal: "elm,edge,"NAME;\
+ source: "elm";\
+ script {\
+ if (!get_int(effect_on)) {\
+ set_int(effect_on, 1);\
+ if (get_int(mouse_down))\
+ set_int(effect_hold, 1);\
+ set_state(PART:SRC, "show_effect", 0.0);\
+ run_program(PROGRAM:"start_effect_"NAME);\
+ }\
+ }\
+ }
+
+group { name: "elm/scroller/base/default";
+ alias: "elm/carousel/base/default";
+ alias: "elm/scroller/base/map_bubble";
+ alias: "elm/gengrid/base/no_effect";
+ alias: "elm/genlist/base/no_effect";
+
+ data {
+ item: "focus_highlight" "on";
+ }
+
+ script {
+ public g_landscape = 0; //Flag for landscape mode
+ public sbvis_v, sbvis_h, sbalways_v, sbalways_h, sbvis_timer;
+ public sh_v, sh_h;
+ public effect_on, effect_hold, mouse_down;
+ public timer0(val) {
+ new v;
+ v = get_int(sbvis_v);
+ if (v) {
+ v = get_int(sbalways_v);
+ if (!v) {
+ emit("do-hide-vbar", "");
+ set_int(sbvis_v, 0);
+ }
+ }
+ v = get_int(sbvis_h);
+ if (v) {
+ v = get_int(sbalways_h);
+ if (!v) {
+ emit("do-hide-hbar", "");
+ set_int(sbvis_h, 0);
+ }
+ }
+ set_int(sbvis_timer, 0);
+ return 0;
+ }
+ }
+ images {
+ image: SCROLLER_DEFAULT_SCROLLBAR_VBAR_IMAGE COMP;
+ image: SCROLLER_DEFAULT_SCROLLBAR_HBAR_IMAGE COMP;
+ }
+ parts {
+ part { name: "bg";
+ type: RECT;
+ scale: 1;
+ description { state: "default" 0.0;
+ rel1.offset: 0 0;
+ rel2.offset: -1 -1;
+ color: 255 255 255 0;
+ }
+ }
+ part { name: "clipper";
+ type: RECT;
+ mouse_events: 0;
+ scale: 1;
+ description { state: "default" 0.0;
+ rel1.to: "bg";
+ rel2.to: "bg";
+ rel1.offset: 0 0;
+ rel2.offset: -1 -1;
+ }
+ }
+ part { name: "elm.swallow.content";
+ clip_to: "clipper";
+ type: SWALLOW;
+ scale: 1;
+ description { state: "default" 0.0;
+ rel1.to: "bg";
+ rel2.to: "bg";
+ rel1.offset: 0 0;
+ rel2.offset: -1 -1;
+ }
+ }
+ part { name: "sb_vbar_clip_master";
+ type: RECT;
+ mouse_events: 0;
+ scale: 1;
+ description { state: "default" 0.0;
+ }
+ description { state: "hidden" 0.0;
+ visible: 0;
+ color: 255 255 255 0;
+ }
+ }
+ part { name: "sb_vbar_clip";
+ clip_to: "sb_vbar_clip_master";
+ type: RECT;
+ mouse_events: 0;
+ scale: 1;
+ description { state: "default" 0.0;
+ }
+ description { state: "hidden" 0.0;
+ visible: 0;
+ color: 255 255 255 0;
+ }
+ }
+ part { name: "sb_vbar_top_padding";
+ type: SPACER;
+ scale: 1;
+ description { state: "default" 0.0;
+ min: 0 SCROLLER_DEFAULT_SCROLLBAR_VBAR_PADDING_SIZE;
+ max: 0 SCROLLER_DEFAULT_SCROLLBAR_VBAR_PADDING_SIZE;
+ rel1.relative: 1.0 0.0;
+ rel2.relative: 1.0 0.0;
+ rel1.to: "elm.swallow.content";
+ rel2.to: "elm.swallow.content";
+ fixed: 1 1;
+ align: 1.0 0.0;
+ }
+ }
+ part { name: "sb_vbar_bottom_padding";
+ type: SPACER;
+ scale: 1;
+ description { state: "default" 0.0;
+ min: 0 SCROLLER_DEFAULT_SCROLLBAR_VBAR_PADDING_SIZE;
+ max: 0 SCROLLER_DEFAULT_SCROLLBAR_VBAR_PADDING_SIZE;
+ rel1.relative: 1.0 1.0;
+ rel2.relative: 1.0 1.0;
+ rel1.to: "elm.swallow.content";
+ rel2.to: "elm.swallow.content";
+ fixed: 1 1;
+ align: 1.0 1.0;
+ }
+ }
+ part { name: "sb_vbar_right_padding";
+ type: SPACER;
+ scale: 1;
+ description { state: "default" 0.0;
+ min: SCROLLER_DEFAULT_SCROLLBAR_VBAR_PADDING_SIZE 0;
+ max: SCROLLER_DEFAULT_SCROLLBAR_VBAR_PADDING_SIZE 0;
+ rel1.relative: 1.0 1.0;
+ rel2.relative: 1.0 1.0;
+ rel1.to: "elm.swallow.content";
+ rel2.to: "elm.swallow.content";
+ fixed: 1 1;
+ align: 1.0 1.0;
+ }
+ }
+ part { name: "sb_vbar";
+ type: RECT;
+ mouse_events: 0;
+ scale: 1;
+ description { state: "default" 0.0;
+ fixed: 1 1;
+ visible: 0;
+ min: SCROLLER_DEFAULT_SCROLLBAR_VBAR_MIN_SIZE_INC;
+ align: 1.0 0.0;
+ rel1 {
+ relative: 0.0 1.0;
+ offset: 0 0;
+ to_x: "sb_vbar_right_padding";
+ to_y: "sb_vbar_top_padding";
+ }
+ rel2 {
+ relative: 0.0 0.0;
+ offset: -1 1;
+ to_x: "sb_vbar_right_padding";
+ to_y: "sb_vbar_bottom_padding";
+ }
+ }
+ }
+ part { name: "elm.dragable.vbar";
+ clip_to: "sb_vbar_clip";
+ mouse_events: 0;
+ scale: 1;
+ dragable {
+ x: 0 0 0;
+ y: 1 1 0;
+ confine: "sb_vbar";
+ }
+ description { state: "default" 0.0;
+ fixed: 1 1;
+ min: SCROLLER_DEFAULT_SCROLLBAR_VBAR_MIN_SIZE_INC;
+ max: SCROLLER_DEFAULT_SCROLLBAR_VBAR_MAX_SIZE_INC;
+ rel1 {
+ relative: 0.5 0.5;
+ offset: 0 0;
+ to: "sb_vbar";
+ }
+ rel2 {
+ relative: 0.5 0.5;
+ offset: 0 0;
+ to: "sb_vbar";
+ }
+ image {
+ normal: SCROLLER_DEFAULT_SCROLLBAR_VBAR_IMAGE;
+ border: SCROLLER_DEFAULT_SCROLLBAR_VBAR_IMAGE_BORDER;
+ border_scale: 1;
+ middle: DEFAULT;
+ }
+ }
+ }
+ part { name: "sb_hbar_clip_master";
+ type: RECT;
+ mouse_events: 0;
+ scale: 1;
+ description { state: "default" 0.0;
+ }
+ description { state: "hidden" 0.0;
+ visible: 0;
+ color: 255 255 255 0;
+ }
+ }
+ part { name: "sb_hbar_clip";
+ clip_to: "sb_hbar_clip_master";
+ type: RECT;
+ mouse_events: 0;
+ scale: 1;
+ description { state: "default" 0.0;
+ }
+ description { state: "hidden" 0.0;
+ visible: 0;
+ color: 255 255 255 0;
+ }
+ }
+ part { name: "sb_hbar_bottom_padding";
+ type: SPACER;
+ scale: 1;
+ description { state: "default" 0.0;
+ min: 0 SCROLLER_DEFAULT_SCROLLBAR_HBAR_PADDING_SIZE;
+ max: 0 SCROLLER_DEFAULT_SCROLLBAR_HBAR_PADDING_SIZE;
+ rel1.relative: 1.0 1.0;
+ rel2.relative: 1.0 1.0;
+ rel1.to: "elm.swallow.content";
+ rel2.to: "elm.swallow.content";
+ fixed: 1 1;
+ align: 1.0 1.0;
+ }
+ }
+ part { name: "sb_hbar_left_padding";
+ type: SPACER;
+ scale: 1;
+ description { state: "default" 0.0;
+ min: SCROLLER_DEFAULT_SCROLLBAR_HBAR_PADDING_SIZE 0;
+ max: SCROLLER_DEFAULT_SCROLLBAR_HBAR_PADDING_SIZE 0;
+ rel1.relative: 0.0 1.0;
+ rel2.relative: 0.0 1.0;
+ rel1.to: "elm.swallow.content";
+ rel2.to: "elm.swallow.content";
+ fixed: 1 1;
+ align: 0.0 1.0;
+ }
+ }
+ part { name: "sb_hbar_right_padding";
+ type: SPACER;
+ scale: 1;
+ description { state: "default" 0.0;
+ min: SCROLLER_DEFAULT_SCROLLBAR_HBAR_PADDING_SIZE 0;
+ max: SCROLLER_DEFAULT_SCROLLBAR_HBAR_PADDING_SIZE 0;
+ rel1.relative: 1.0 1.0;
+ rel2.relative: 1.0 1.0;
+ rel1.to: "elm.swallow.content";
+ rel2.to: "elm.swallow.content";
+ fixed: 1 1;
+ align: 1.0 1.0;
+ }
+ }
+ part { name: "sb_hbar";
+ type: RECT;
+ mouse_events: 0;
+ scale: 1;
+ description { state: "default" 0.0;
+ fixed: 1 1;
+ visible: 0;
+ min: SCROLLER_DEFAULT_SCROLLBAR_HBAR_MIN_SIZE_INC;
+ align: 0.0 1.0;
+ rel1 {
+ relative: 1.0 0.0;
+ offset: 0 0;
+ to_x: "sb_hbar_left_padding";
+ to_y: "sb_hbar_bottom_padding";
+ }
+ rel2 {
+ relative: 0.0 0.0;
+ offset: -1 -1;
+ to_x: "sb_hbar_right_padding";
+ to_y: "sb_hbar_bottom_padding";
+ }
+ }
+ }
+ part { name: "elm.dragable.hbar";
+ clip_to: "sb_hbar_clip";
+ mouse_events: 0;
+ scale: 1;
+ dragable {
+ x: 1 1 0;
+ y: 0 0 0;
+ confine: "sb_hbar";
+ }
+ description { state: "default" 0.0;
+ fixed: 1 1;
+ min: SCROLLER_DEFAULT_SCROLLBAR_HBAR_MIN_SIZE_INC;
+ max: SCROLLER_DEFAULT_SCROLLBAR_HBAR_MAX_SIZE_INC;
+ rel1 {
+ relative: 0.5 0.0;
+ offset: 0 0;
+ to: "sb_hbar";
+ }
+ rel2 {
+ relative: 0.5 0.0;
+ offset: 0 0;
+ to: "sb_hbar";
+ }
+ image {
+ normal: SCROLLER_DEFAULT_SCROLLBAR_HBAR_IMAGE;
+ border: SCROLLER_DEFAULT_SCROLLBAR_HBAR_IMAGE_BORDER;
+ border_scale: 1;
+ middle: DEFAULT;
+ }
+ }
+ }
+ part { name: "disabler";
+ type: RECT;
+ scale: 1;
+ description { state: "default" 0.0;
+ rel1.to: "clipper";
+ rel2.to: "clipper";
+ color: 0 0 0 0;
+ visible: 0;
+ }
+ description { state: "disabled" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ }
+ }
+ programs {
+ program { name: "load";
+ signal: "load";
+ source: "";
+ script {
+ set_state(PART:"sb_hbar_clip", "hidden", 0.0);
+ set_state(PART:"sb_vbar_clip", "hidden", 0.0);
+ set_int(sbvis_h, 0);
+ set_int(sbvis_v, 0);
+ set_int(sbalways_v, 0);
+ set_int(sbalways_h, 0);
+ set_int(sbvis_timer, 0);
+ emit("reload", "elm");
+ }
+ }
+
+ program { name: "vbar_show";
+ signal: "elm,action,show,vbar";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "sb_vbar_clip_master";
+ }
+ program { name: "vbar_hide";
+ signal: "elm,action,hide,vbar";
+ source: "elm";
+ action: STATE_SET "hidden" 0.0;
+ target: "sb_vbar_clip_master";
+ }
+ program { name: "vbar_show_always";
+ signal: "elm,action,show_always,vbar";
+ source: "elm";
+ script {
+ new v;
+ v = get_int(sbalways_v);
+ if (!v) {
+ set_int(sbalways_v, 1);
+ v = get_int(sbvis_v);
+ if (!v) {
+ emit("do-show-vbar", "");
+ set_int(sbvis_v, 1);
+ }
+ }
+ }
+ }
+ program { name: "vbar_show_notalways";
+ signal: "elm,action,show_notalways,vbar";
+ source: "elm";
+ script {
+ new v;
+ v = get_int(sbalways_v);
+ if (v) {
+ set_int(sbalways_v, 0);
+ v = get_int(sbvis_v);
+ if (!v) {
+ emit("do-hide-vbar", "");
+ set_int(sbvis_v, 0);
+ }
+ }
+ }
+ }
+ program { name: "sb_vbar_show";
+ signal: "do-show-vbar";
+ source: "";
+ action: STATE_SET "default" 0.0;
+ transition: LINEAR 0.5;
+ target: "sb_vbar_clip";
+ }
+ program { name: "sb_vbar_hide";
+ signal: "do-hide-vbar";
+ source: "";
+ action: STATE_SET "hidden" 0.0;
+ transition: LINEAR 0.5;
+ target: "sb_vbar_clip";
+ }
+
+ program { name: "hbar_show";
+ signal: "elm,action,show,hbar";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "sb_hbar_clip_master";
+ }
+ program { name: "hbar_hide";
+ signal: "elm,action,hide,hbar";
+ source: "elm";
+ action: STATE_SET "hidden" 0.0;
+ target: "sb_hbar_clip_master";
+ }
+ program { name: "hbar_show_always";
+ signal: "elm,action,show_always,hbar";
+ source: "elm";
+ script {
+ new v;
+ v = get_int(sbalways_h);
+ if (!v) {
+ set_int(sbalways_h, 1);
+ v = get_int(sbvis_h);
+ if (!v) {
+ emit("do-show-hbar", "");
+ set_int(sbvis_h, 1);
+ }
+ }
+ }
+ }
+ program { name: "hbar_show_notalways";
+ signal: "elm,action,show_notalways,hbar";
+ source: "elm";
+ script {
+ new v;
+ v = get_int(sbalways_h);
+ if (v) {
+ set_int(sbalways_h, 0);
+ v = get_int(sbvis_h);
+ if (!v) {
+ emit("do-hide-hbar", "");
+ set_int(sbvis_h, 0);
+ }
+ }
+ }
+ }
+ program { name: "sb_hbar_show";
+ signal: "do-show-hbar";
+ source: "";
+ action: STATE_SET "default" 0.0;
+ transition: LINEAR 0.5;
+ target: "sb_hbar_clip";
+ }
+ program { name: "sb_hbar_hide";
+ signal: "do-hide-hbar";
+ source: "";
+ action: STATE_SET "hidden" 0.0;
+ transition: LINEAR 0.5;
+ target: "sb_hbar_clip";
+ }
+
+ program { name: "scroll";
+ signal: "elm,action,scroll";
+ source: "elm";
+ script {
+ new v;
+ v = get_int(sbvis_v);
+ v |= get_int(sbalways_v);
+ if (!v) {
+ emit("do-show-vbar", "");
+ set_int(sbvis_v, 1);
+ }
+ v = get_int(sbvis_h);
+ v |= get_int(sbalways_h);
+ if (!v) {
+ emit("do-show-hbar", "");
+ set_int(sbvis_h, 1);
+ }
+ v = get_int(sbvis_timer);
+ if (v > 0) cancel_timer(v);
+ v = timer(1.0, "timer0", 0);
+ set_int(sbvis_timer, v);
+ }
+ }
+ program { name: "disable";
+ signal: "elm,state,disabled";
+ source: "elm";
+ action: STATE_SET "disabled" 0.0;
+ target: "disabler";
+ }
+ program { name: "enable";
+ signal: "elm,state,enabled";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "disabler";
+ }
+ program { name: "show";
+ signal: "show";
+ source: "";
+ script {
+ new v;
+ emit("do-show-vbar", "");
+ set_int(sbvis_v, 1);
+ v = get_int(sbalways_v);
+ if (!v) {
+ v = get_int(sbvis_timer);
+ if (v > 0) cancel_timer(v);
+ v = timer(1.0, "timer0", 0);
+ set_int(sbvis_timer, v);
+ }
+ emit("do-show-hbar", "");
+ set_int(sbvis_h, 1);
+ v = get_int(sbalways_h);
+ if (!v) {
+ v = get_int(sbvis_timer);
+ if (v > 0) cancel_timer(v);
+ v = timer(1.0, "timer0", 0);
+ set_int(sbvis_timer, v);
+ }
+ }
+ }
+ }
+}
+
+group { name: "elm/scroller/base/handler";
+ alias: "elm/carousel/base/handler";
+
+ data {
+ item: "focus_highlight" "on";
+ }
+ script {
+ public sbvis_v, sbvis_h, sbalways_v, sbalways_h, sbvis_timer;
+ public effect_on, effect_hold, mouse_down;
+ public timer0(val) {
+ new v;
+ v = get_int(sbvis_v);
+ if (v) {
+ v = get_int(sbalways_v);
+ if (!v) {
+ emit("do-hide-vbar", "");
+ set_int(sbvis_v, 0);
+ }
+ }
+ v = get_int(sbvis_h);
+ if (v) {
+ v = get_int(sbalways_h);
+ if (!v) {
+ emit("do-hide-hbar", "");
+ set_int(sbvis_h, 0);
+ }
+ }
+ set_int(sbvis_timer, 0);
+ return 0;
+ }
+ }
+ images {
+ image: "00_fast_scroll_handler_top.png" COMP;
+ image: "00_fast_scroll_handler_center.png" COMP;
+ image: "00_fast_scroll_handler_bottom.png" COMP;
+ image: "00_fast_scroll_handler_left_h.png" COMP;
+ image: "00_fast_scroll_handler_center_h.png" COMP;
+ image: "00_fast_scroll_handler_right_h.png" COMP;
+ }
+ parts {
+ part { name: "bg";
+ type: RECT;
+ scale: 1;
+ description { state: "default" 0.0;
+ rel1.offset: 0 0;
+ rel2.offset: -1 -1;
+ color: 255 255 255 0;
+ }
+ }
+ part { name: "clipper";
+ type: RECT;
+ mouse_events: 0;
+ scale: 1;
+ description { state: "default" 0.0;
+ rel1.to: "bg";
+ rel2.to: "bg";
+ rel1.offset: 0 0;
+ rel2.offset: -1 -1;
+ }
+ }
+ part { name: "elm.swallow.content";
+ clip_to: "clipper";
+ type: SWALLOW;
+ scale: 1;
+ description { state: "default" 0.0;
+ rel1.to: "bg";
+ rel2.to: "bg";
+ rel1.offset: 0 0;
+ rel2.offset: -1 -1;
+ }
+ }
+ part { name: "sb_vbar_clip_master";
+ type: RECT;
+ mouse_events: 0;
+ scale: 1;
+ description { state: "default" 0.0;
+ }
+ description { state: "hidden" 0.0;
+ visible: 0;
+ color: 255 255 255 0;
+ }
+ }
+ part { name: "sb_vbar_clip";
+ clip_to: "sb_vbar_clip_master";
+ type: RECT;
+ mouse_events: 0;
+ scale: 1;
+ description { state: "default" 0.0;
+ }
+ description { state: "hidden" 0.0;
+ visible: 0;
+ color: 255 255 255 0;
+ }
+ }
+ part { name: "sb_vbar";
+ type: RECT;
+ mouse_events: 0;
+ scale: 1;
+ description { state: "default" 0.0;
+ fixed: 1 1;
+ visible: 0;
+ min: SCROLLER_HANDLER_SCROLLBAR_VBAR_MIN_SIZE_INC;
+ align: 1.0 0.0;
+ rel1 {
+ relative: 1.0 0.0;
+ to_y: "bg";
+ to_x: "bg";
+ }
+ rel2 {
+ relative: 1.0 1.0;
+ to_y: "sb_hbar";
+ to_x: "bg";
+ }
+ }
+ }
+ part { name: "elm.dragable.vbar";
+ type: RECT;
+ clip_to: "sb_vbar_clip";
+ mouse_events: 1;
+ scale: 1;
+ dragable {
+ x: 0 0 0;
+ y: 1 1 0;
+ confine: "sb_vbar";
+ }
+ description { state: "default" 0.0;
+ fixed: 1 1;
+ color: 0 0 0 0;
+ min: SCROLLER_HANDLER_SCROLLBAR_VBAR_MIN_SIZE_INC;
+ max: 30 99999;
+ rel1 {
+ relative: 0.5 0.5;
+ offset: 0 0;
+ to: "sb_vbar";
+ }
+ rel2 {
+ relative: 0.5 0.5;
+ offset: 0 0;
+ to: "sb_vbar";
+ }
+ }
+ }
+ part { name: "sb_hbar_clip_master";
+ type: RECT;
+ mouse_events: 0;
+ scale: 1;
+ description { state: "default" 0.0;
+ }
+ description { state: "hidden" 0.0;
+ visible: 0;
+ color: 255 255 255 0;
+ }
+ }
+ part { name: "sb_hbar_clip";
+ clip_to: "sb_hbar_clip_master";
+ type: RECT;
+ mouse_events: 0;
+ scale: 1;
+ description { state: "default" 0.0;
+ }
+ description { state: "hidden" 0.0;
+ visible: 0;
+ color: 255 255 255 0;
+ }
+ }
+ part { name: "sb_hbar";
+ type: RECT;
+ mouse_events: 0;
+ scale: 1;
+ description { state: "default" 0.0;
+ fixed: 1 1;
+ visible: 0;
+ min: SCROLLER_HANDLER_SCROLLBAR_HBAR_MIN_SIZE_INC;
+ align: 0.0 1.0;
+ rel1 {
+ relative: 0.0 1.0;
+ to_x: "bg";
+ to_y: "bg";
+ }
+ rel2 {
+ relative: 0.0 1.0;
+ offset: -1 -1;
+ to_x: "sb_vbar";
+ to_y: "bg";
+ }
+ }
+ }
+ part { name: "elm.dragable.hbar";
+ type: RECT;
+ clip_to: "sb_hbar_clip";
+ mouse_events: 1;
+ scale: 1;
+ dragable {
+ x: 1 1 0;
+ y: 0 0 0;
+ confine: "sb_hbar";
+ }
+ description { state: "default" 0.0;
+ fixed: 1 1;
+ color: 0 0 0 0;
+ min: SCROLLER_HANDLER_SCROLLBAR_HBAR_MIN_SIZE_INC;
+ max: 99999 30;
+ rel1 {
+ relative: 0.5 0.5;
+ offset: 0 0;
+ to: "sb_hbar";
+ }
+ rel2 {
+ relative: 0.5 0.5;
+ offset: 0 0;
+ to: "sb_hbar";
+ }
+ }
+ }
+ part { name: "disabler";
+ type: RECT;
+ scale: 1;
+ description { state: "default" 0.0;
+ rel1.to: "clipper";
+ rel2.to: "clipper";
+ color: 0 0 0 0;
+ visible: 0;
+ }
+ description { state: "disabled" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ }
+ }
+ programs {
+ program { name: "load";
+ signal: "load";
+ source: "";
+ script {
+ set_state(PART:"sb_hbar_clip", "hidden", 0.0);
+ set_state(PART:"sb_vbar_clip", "hidden", 0.0);
+ set_int(sbvis_h, 0);
+ set_int(sbvis_v, 0);
+ set_int(sbalways_v, 0);
+ set_int(sbalways_h, 0);
+ set_int(sbvis_timer, 0);
+ emit("reload", "elm");
+ }
+ }
+ program { name: "vbar_show";
+ signal: "elm,action,show,vbar";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "sb_vbar_clip_master";
+ }
+ program { name: "vbar_hide";
+ signal: "elm,action,hide,vbar";
+ source: "elm";
+ action: STATE_SET "hidden" 0.0;
+ target: "sb_vbar_clip_master";
+ }
+ program { name: "vbar_show_always";
+ signal: "elm,action,show_always,vbar";
+ source: "elm";
+ script {
+ new v;
+ v = get_int(sbalways_v);
+ if (!v) {
+ set_int(sbalways_v, 1);
+ v = get_int(sbvis_v);
+ if (!v) {
+ emit("do-show-vbar", "");
+ set_int(sbvis_v, 1);
+ }
+ }
+ }
+ }
+ program { name: "vbar_show_notalways";
+ signal: "elm,action,show_notalways,vbar";
+ source: "elm";
+ script {
+ new v;
+ v = get_int(sbalways_v);
+ if (v) {
+ set_int(sbalways_v, 0);
+ v = get_int(sbvis_v);
+ if (!v) {
+ emit("do-hide-vbar", "");
+ set_int(sbvis_v, 0);
+ }
+ }
+ }
+ }
+ program { name: "vbar_press";
+ signal: "mouse,down,1";
+ source: "elm.dragable.vbar";
+ action: SIGNAL_EMIT "elm,vbar,press" "elm";
+ }
+ program { name: "vbar_unpress";
+ signal: "mouse,up,1";
+ source: "elm.dragable.vbar";
+ action: SIGNAL_EMIT "elm,vbar,unpress" "elm";
+ }
+ program { name: "sb_vbar_show";
+ signal: "do-show-vbar";
+ source: "";
+ action: STATE_SET "default" 0.0;
+ transition: LINEAR 0.5;
+ target: "sb_vbar_clip";
+ }
+ program { name: "sb_vbar_hide";
+ signal: "do-hide-vbar";
+ source: "";
+ action: STATE_SET "hidden" 0.0;
+ transition: LINEAR 0.5;
+ target: "sb_vbar_clip";
+ }
+ program { name: "hbar_show";
+ signal: "elm,action,show,hbar";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "sb_hbar_clip_master";
+ }
+ program { name: "hbar_hide";
+ signal: "elm,action,hide,hbar";
+ source: "elm";
+ action: STATE_SET "hidden" 0.0;
+ target: "sb_hbar_clip_master";
+ }
+ program { name: "hbar_show_always";
+ signal: "elm,action,show_always,hbar";
+ source: "elm";
+ script {
+ new v;
+ v = get_int(sbalways_h);
+ if (!v) {
+ set_int(sbalways_h, 1);
+ v = get_int(sbvis_h);
+ if (!v) {
+ emit("do-show-hbar", "");
+ set_int(sbvis_h, 1);
+ }
+ }
+ }
+ }
+ program { name: "hbar_show_notalways";
+ signal: "elm,action,show_notalways,hbar";
+ source: "elm";
+ script {
+ new v;
+ v = get_int(sbalways_h);
+ if (v) {
+ set_int(sbalways_h, 0);
+ v = get_int(sbvis_h);
+ if (!v) {
+ emit("do-hide-hbar", "");
+ set_int(sbvis_h, 0);
+ }
+ }
+ }
+ }
+ program { name: "hbar_press";
+ signal: "mouse,down,1";
+ source: "elm.dragable.hbar";
+ action: SIGNAL_EMIT "elm,hbar,press" "elm";
+ }
+ program { name: "hbar_unpress";
+ signal: "mouse,up,1";
+ source: "elm.dragable.hbar";
+ action: SIGNAL_EMIT "elm,hbar,unpress" "elm";
+ }
+ program { name: "sb_hbar_show";
+ signal: "do-show-hbar";
+ source: "";
+ action: STATE_SET "default" 0.0;
+ transition: LINEAR 0.5;
+ target: "sb_hbar_clip";
+ }
+ program { name: "sb_hbar_hide";
+ signal: "do-hide-hbar";
+ source: "";
+ action: STATE_SET "hidden" 0.0;
+ transition: LINEAR 0.5;
+ target: "sb_hbar_clip";
+ }
+
+ program { name: "scroll";
+ signal: "elm,action,scroll";
+ source: "elm";
+ script {
+ new v;
+ v = get_int(sbvis_v);
+ v |= get_int(sbalways_v);
+ if (!v) {
+ emit("do-show-vbar", "");
+ set_int(sbvis_v, 1);
+ }
+ v = get_int(sbvis_h);
+ v |= get_int(sbalways_h);
+ if (!v) {
+ emit("do-show-hbar", "");
+ set_int(sbvis_h, 1);
+ }
+ v = get_int(sbvis_timer);
+ if (v > 0) cancel_timer(v);
+ v = timer(1.0, "timer0", 0);
+ set_int(sbvis_timer, v);
+ }
+ }
+ program { name: "disable";
+ signal: "elm,state,disabled";
+ source: "elm";
+ action: STATE_SET "disabled" 0.0;
+ target: "disabler";
+ }
+ program { name: "enable";
+ signal: "elm,state,enabled";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "disabler";
+ }
+ program { name: "show";
+ signal: "show";
+ source: "";
+ script {
+ new v;
+ emit("do-show-vbar", "");
+ set_int(sbvis_v, 1);
+ v = get_int(sbalways_v);
+ if (!v) {
+ v = get_int(sbvis_timer);
+ if (v > 0) cancel_timer(v);
+ v = timer(1.0, "timer0", 0);
+ set_int(sbvis_timer, v);
+ }
+ emit("do-show-hbar", "");
+ set_int(sbvis_h, 1);
+ v = get_int(sbalways_h);
+ if (!v) {
+ v = get_int(sbvis_timer);
+ if (v > 0) cancel_timer(v);
+ v = timer(1.0, "timer0", 0);
+ set_int(sbvis_timer, v);
+ }
+ }
+ }
+ }
+}
+
+group { name: "elm/scroller/base/list_effect";
+ alias: "elm/genlist/base/default";
+ alias: "elm/genscroller/base/default";
+ alias: "elm/list/base/default";
+ inherit: "elm/scroller/base/default";
+
+ images {
+ OVERSCROLL_EFFECT_IMAGES
+ }
+
+ parts {
+ part { name: "shadow_left";
+ type: IMAGE;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ min: 58 0;
+ fixed: 1 1;
+ align: 0.0 0.5;
+ rel1.relative: 0.0 0.0;
+ rel2.relative: 0.0 1.0;
+ rel1.to: "bg";
+ rel2.to: "bg";
+ rel1.offset: 0 0;
+ rel2.offset: -1 -1;
+ visible: 0;
+ image {
+ normal: "bouncing_left_00.png";
+ }
+ }
+ OVERSCROLL_EFFECT_DESCRIPTIONS("left")
+ description { state: "hidden" 0.0;
+ visible: 0;
+ color: 255 255 255 0;
+ }
+ }
+ part { name: "shadow_right";
+ type: IMAGE;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ min: 58 0;
+ fixed: 1 1;
+ align: 1.0 0.5;
+ rel1.relative: 1.0 0.0;
+ rel2.relative: 1.0 1.0;
+ rel1.to: "bg";
+ rel2.to: "bg";
+ rel1.offset: 0 0;
+ rel2.offset: -1 -1;
+ visible: 0;
+ image {
+ normal: "bouncing_right_00.png";
+ }
+ }
+ OVERSCROLL_EFFECT_DESCRIPTIONS("right")
+ description { state: "hidden" 0.0;
+ visible: 0;
+ color: 255 255 255 0;
+ }
+ }
+ part { name: "padding_jump_to_top";
+ type: SPACER;
+ scale: 1;
+ description { state: "default" 0.0;
+ min: BUTTON_JUMP_TOP_PADDING_TO_SCROLLER_MIN_MAX_INC;
+ max: BUTTON_JUMP_TOP_PADDING_TO_SCROLLER_MIN_MAX_INC;
+ rel1.relative: 1.0 0.0;
+ rel2.relative: 1.0 0.0;
+ rel1.to: "bg";
+ rel2.to: "bg";
+ fixed: 1 1;
+ align: 1.0 0.0;
+ }
+ }
+ part { name: "elm.swallow.jump_to_top";
+ type: SWALLOW;
+ scale: 1;
+ description { state: "default" 0.0;
+ rel1 {
+ to: "padding_jump_to_top";
+ relative: 0.0 1.0;
+ }
+ rel2 {
+ to: "padding_jump_to_top";
+ relative: 0.0 1.0;
+ }
+ fixed: 1 1;
+ align: 1.0 0.0;
+ }
+ }
+ part { name: "padding_jump_to_left";
+ type: SPACER;
+ scale: 1;
+ description { state: "default" 0.0;
+ min: BUTTON_JUMP_LEFT_PADDING_TO_SCROLLER_MIN_MAX_INC;
+ max: BUTTON_JUMP_LEFT_PADDING_TO_SCROLLER_MIN_MAX_INC;
+ rel1.relative: 0.0 1.0;
+ rel2.relative: 0.0 1.0;
+ rel1.to: "bg";
+ rel2.to: "bg";
+ fixed: 1 1;
+ align: 0.0 1.0;
+ }
+ }
+ part { name: "elm.swallow.jump_to_left";
+ type: SWALLOW;
+ scale: 1;
+ description { state: "default" 0.0;
+ rel1 {
+ to: "padding_jump_to_left";
+ relative: 1.0 0.0;
+ }
+ rel2 {
+ to: "padding_jump_to_left";
+ relative: 1.0 0.0;
+ }
+ fixed: 1 1;
+ align: 0.0 1.0;
+ }
+ }
+ part { name: "event";
+ type: RECT;
+ mouse_events: 1;
+ repeat_events: 1;
+ description { state: "default" 0.0;
+ color: 0 0 0 0;
+ }
+ }
+ }
+ programs {
+ program { name: "load";
+ script {
+ set_state(PART:"sb_hbar_clip", "hidden", 0.0);
+ set_state(PART:"sb_vbar_clip", "hidden", 0.0);
+ set_state(PART:"shadow_left", "hidden", 0.0);
+ set_state(PART:"shadow_right", "hidden", 0.0);
+ set_int(sbvis_h, 0);
+ set_int(sbvis_v, 0);
+ set_int(sbalways_v, 0);
+ set_int(sbalways_h, 0);
+ set_int(sbvis_timer, 0);
+ set_int(sh_v, 0);
+ emit("reload", "elm");
+ }
+ }
+ program { name: "scroll";
+ signal: "elm,action,scroll";
+ source: "elm";
+ script {
+ new v;
+ v = get_int(sbvis_v);
+ v |= get_int(sbalways_v);
+ if (!v) {
+ emit("do-show-vbar", "");
+ set_int(sbvis_v, 1);
+ }
+ v = get_int(sbvis_h);
+ v |= get_int(sbalways_h);
+ if (!v) {
+ emit("do-show-hbar", "");
+ set_int(sbvis_h, 1);
+ }
+ v = get_int(sbvis_timer);
+ if (v > 0) cancel_timer(v);
+ v = timer(1, "timer0", 0);
+ set_int(sbvis_timer, v);
+ }
+ }
+ OVERSCROLL_EFFECT_FUNCTION("left", "shadow_left")
+ OVERSCROLL_EFFECT_FUNCTION("right", "shadow_right")
+ program { name: "content_move";
+ signal: "elm,state,mouse,move";
+ source: "elm";
+ script {
+ set_int(mouse_down, 1);
+ }
+ }
+ program { name: "content_press";
+ signal: "elm,state,mouse,down";
+ source: "elm";
+ script {
+ set_int(mouse_down, 1);
+ }
+ }
+ program { name: "content_unpress";
+ signal: "elm,state,mouse,up";
+ source: "elm";
+ script {
+ set_int(mouse_down, 0);
+ set_int(effect_hold, 0);
+ }
+ }
+ }
+}
+
+
+
--- /dev/null
+# for i18n
+
+SET(POFILES
+ az.po
+ bg.po
+ ca.po
+ cs.po
+ da.po
+ de.po
+ el_GR.po
+ en.po
+ en_US.po
+ es_ES.po
+ es_US.po
+ et.po
+ eu.po
+ fi.po
+ fr_CA.po
+ fr.po
+ gl.po
+ hr.po
+ hu.po
+ hy.po
+ is.po
+ it_IT.po
+ ka.po
+ kk.po
+ ko_KR.po
+ lt.po
+ lv.po
+ mn_MN.po
+ nb.po
+ nl.po
+ pl.po
+ pt_BR.po
+ pt_PT.po
+ ro.po
+ ru_RU.po
+ sk.po
+ sl.po
+ sr.po
+ sv.po
+ tr_TR.po
+ uk.po
+ uz.po
+)
+
+SET(MSGFMT "/usr/bin/msgfmt")
+
+FOREACH(pofile ${POFILES})
+ SET(pofile ${CMAKE_CURRENT_SOURCE_DIR}/${pofile})
+ MESSAGE(STATUS " ${pofile}")
+ GET_FILENAME_COMPONENT(absPofile ${pofile} ABSOLUTE)
+ GET_FILENAME_COMPONENT(lang ${absPofile} NAME_WE)
+ SET(moFile ${CMAKE_CURRENT_BINARY_DIR}/${lang}.mo)
+ ADD_CUSTOM_COMMAND(
+ OUTPUT ${moFile}
+ COMMAND ${MSGFMT} -o ${moFile} ${absPofile}
+ DEPENDS ${absPofile}
+ )
+
+ INSTALL(FILES ${moFile}
+ DESTINATION ${LOCALEDIR}/${lang}/LC_MESSAGES RENAME CBHM.mo)
+ SET(moFiles ${moFiles} ${moFile})
+ENDFOREACH(pofile)
+
+MESSAGE(".mo files: ${moFiles}")
+ADD_CUSTOM_TARGET(po ALL DEPENDS ${moFiles})
--- /dev/null
+msgid "IDS_COM_BODY_DONE"
+msgstr "Yerinə yetirildi"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "Bağla"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "Sil"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "Hamısı silindi"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "Mübadilə buferinə köçürüldü."
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "Mübadilə buferi"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "Ləğv et"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "Artıq mövcuddur."
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "Hamısı silinsin?"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "Mübadilə buferindən sil"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "Mübadilə buferinə bərkit"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "Mübadilə buferindən çıxart"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "Mübadilə buferi seçimləri"
+
--- /dev/null
+msgid "IDS_COM_BODY_DONE"
+msgstr "Готово"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "Затваряне"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "Изтриване"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "Изтриване на всички"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "Копирано в системния буфер."
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "Системен буфер"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "Отказ"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "Вече съществува."
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "Изтриване на всички?"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "Изтриване от системния буфер"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "Заключване в клипборда"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "Отключване от клипборда"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "Опции за системния буфер"
+
--- /dev/null
+msgid "IDS_COM_BODY_DONE"
+msgstr "Finalitzat"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "Tancar"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "Esborra"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "Esborra tot"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "S'ha copiat al porta-retalls"
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "Porta-retalls"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "Cancel·la"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "Ja existeix"
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "Esborrar-ho tot?"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "Esborrar del porta-retalls"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "Bloquejar al porta-retalls"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "Desbloquejar del porta-retalls"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "Opcions del porta-retalls"
+
--- /dev/null
+msgid "IDS_COM_BODY_DONE"
+msgstr "Hotovo"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "Zavřít"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "Odstranit"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "Odstranit vše"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "Zkopírováno do schránky."
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "Schránka"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "Storno"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "Již existuje."
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "Odstranit vše?"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "Odstranit ze schránky"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "Zamknout do schránky"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "Odemknout ze schránky"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "Možnosti schránky"
+
--- /dev/null
+msgid "IDS_COM_BODY_DONE"
+msgstr "Udført"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "Luk"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "Slet"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "Slet alle"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "Kopieret til udklipsholder."
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "Udklipsholder"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "Annullér"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "Findes allerede."
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "Slet alle?"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "Slet fra udklipsholder"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "Lås til udklipsholder"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "Lås op fra udklipsholder"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "Indstillinger for udklipsholder"
+
--- /dev/null
+msgid "IDS_COM_BODY_DONE"
+msgstr "OK"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "Schließen"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "Löschen"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "Alle löschen"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "In Zwischenablage kopiert"
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "Zwischenablage"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "Abbruch"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "Bereits vorhanden"
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "Alle löschen?"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "Aus der Zwischenablage löschen"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "In Zwischenablage sperren"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "Aus der Zwischenablage löschen"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "Zwischenablage-Optionen"
+
--- /dev/null
+msgid "IDS_COM_BODY_DONE"
+msgstr "Τέλος"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "Κλείσιμο"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "Διαγραφή"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "Διαγραφή όλων"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "Αντιγράφηκε στο πρόχειρο."
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "Πρόχειρο"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "Ακύρωση"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "Υπάρχει ήδη."
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "Διαγραφή όλων;"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "Διαγραφή από το πρόχειρο"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "Κλείδωμα στο πρόχειρο"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "Ξεκλείδωμα από το πρόχειρο"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "Επιλογές προχείρου"
+
--- /dev/null
+msgid "IDS_COM_BODY_DONE"
+msgstr "Done"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "Close"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "Delete"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "Delete all"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "Copied to clipboard."
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "Clipboard"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "Cancel"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "Already exists."
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "Delete all?"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "Delete from clipboard"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "Lock to clipboard"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "Unlock from clipboard"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "Clipboard options"
+
--- /dev/null
+msgid "IDS_COM_BODY_DONE"
+msgstr "Done"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "Close"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "Delete"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "Delete all"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "Copied to clipboard."
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "Clipboard"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "Cancel"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "Already exists."
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "Delete all?"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "Delete from clipboard"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "Lock to clipboard"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "Unlock from clipboard"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "Clipboard options"
+
--- /dev/null
+msgid "IDS_COM_BODY_DONE"
+msgstr "Finalizado"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "Cerrar"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "Eliminar"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "Eliminar todo"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "Copiado al portapapeles"
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "Portapapeles"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "Cancelar"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "Ya existe"
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "¿Eliminar todo?"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "Eliminar del portapapeles"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "Bloquear en el portapapeles"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "Desbloquear del portapapeles"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "Opciones de portapapeles"
+
--- /dev/null
+msgid "IDS_COM_BODY_DONE"
+msgstr "Realizar"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "Cerrar"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "Eliminar"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "Eliminar todo"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "Copiado al portapapeles."
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "Portapapeles"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "Cancelar"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "Ya existe."
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "¿Eliminar todo?"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "Eliminar del portapapeles"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "Bloquear en portapapeles"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "Desbloquear desde el portapapeles"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "Opciones de portapapeles"
+
--- /dev/null
+msgid "IDS_COM_BODY_DONE"
+msgstr "Valmis"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "Sulge"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "Kustuta"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "Kustuta kõik"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "Kopeeritud lõikelauale."
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "Lõikelaud"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "Tühista"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "Juba olemas."
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "Kustutada kõik?"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "Kustuta lõikelaualt"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "Lukusta lõikelauale"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "Ava lõikelaualt"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "Lõikelaua valikud"
+
--- /dev/null
+msgid "IDS_COM_BODY_DONE"
+msgstr "Amaituta"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "Itxi"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "Ezabatu"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "Dena(k) ezabatu"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "Arbelera kopiatu da"
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "Arbela"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "Ezeztatu"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "Dagoeneko badago"
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "Dena ezabatu?"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "Arbeletik ezabatu"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "Blokeatu arbelean"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "Desblokeatu arbeletik"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "Arbelaren aukerak"
+
--- /dev/null
+msgid "IDS_COM_BODY_DONE"
+msgstr "Valmis"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "Sulje"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "Poista"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "Poista kaikki"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "Kopioitu leikepöydälle."
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "Leikepöytä"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "Peruuta"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "On jo olemassa."
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "Poistetaanko kaikki?"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "Poista leikepöydältä"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "Lukitse leikepöydälle"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "Poista lukitus leikepöydältä"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "Leikepöydän asetukset"
+
--- /dev/null
+msgid "IDS_COM_BODY_DONE"
+msgstr "Effectué"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "Fermer"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "Supprimer"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "Tout supprimer"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "Copié dans le Presse-papier"
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "Presse-papier"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "Annuler"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "Existe déjà"
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "Tout supprimer ?"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "Supprimer du Presse-papier"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "Verrouiller dans le Presse-papier"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "Déverrouiller du Presse-papier"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "Options du Presse-papier"
+
--- /dev/null
+msgid "IDS_COM_BODY_DONE"
+msgstr "OK"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "Fermer"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "Supprimer"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "Tout supprimer"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "Copié dans le presse-papier"
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "Presse-papier"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "Annuler"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "Existe déjà."
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "Tout supprimer ?"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "Supprimer du presse-papier"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "Verrouiller dans le presse-papier"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "Déverrouiller du presse-papier"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "Options du presse-papier"
+
--- /dev/null
+msgid "IDS_COM_BODY_DONE"
+msgstr "Finalizado"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "Pechar"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "Eliminar"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "Eliminar todo"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "Copiado no portapapeis"
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "Portapapeis"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "Cancelar"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "Xa existe"
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "Eliminar todo?"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "Eliminar do portapapeis"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "Bloquear no portapapeis"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "Desbloquear do portapapeis"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "Opcións de portapapeis"
+
--- /dev/null
+msgid "IDS_COM_BODY_DONE"
+msgstr "OK"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "Prekid"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "Obriši"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "Obriši sve"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "Kopirano u međuspremnik."
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "Međuspremnik"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "Prekid"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "Već postoji."
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "Obrisati sve?"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "Obrisati iz međuspremnika"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "Zaključaj na međuspremnik"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "Otključaj iz međuspremnika"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "Opcije međuspremnika"
+
--- /dev/null
+msgid "IDS_COM_BODY_DONE"
+msgstr "Kész"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "Bezárás"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "Töröl"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "Összes törlése"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "A vágólapra másolva."
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "Vágólap"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "Mégse"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "Már létezik."
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "Törli az összeset?"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "Törlés a vágólapról"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "Rögzítés a vágólapon"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "Leoldás a vágólapról"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "Vágólap opciói"
+
--- /dev/null
+msgid "IDS_COM_BODY_DONE"
+msgstr "Կատարված է"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "Փակել"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "Ջնջել"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "Ջնջել բոլորը"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "Պատճենվել է գզրոցի մեջ:"
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "Գզրոց"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "Չեղարկել"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "Արդեն գոյություն ունի:"
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "Ջնջե՞լ բոլորը"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "Վերացնել գզրոցից"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "Կողպել գզրոցում"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "Արգելաբացել գզրոցից"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "Գզրոցի ընտրանքներ"
+
--- /dev/null
+msgid "IDS_COM_BODY_DONE"
+msgstr "Lokið"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "Loka"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "Eyða"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "Eyða öllu"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "Afritað á klemmuspjald."
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "Klippiborð"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "Hætta v."
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "Er þegar til."
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "Eyða öllu?"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "Eyða af klippiborði"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "Læsa á klemmuspjald"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "Opna af klippiborði"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "Valkostir klemmuspjalds"
+
--- /dev/null
+msgid "IDS_COM_BODY_DONE"
+msgstr "Fatto"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "Chiudi"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "Elimina"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "Elimina tutto"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "Elemento copiato negli appunti"
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "Appunti"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "Annulla"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "Già esiste."
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "Eliminare tutto?"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "Eliminare dagli appunti"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "Blocca negli appunti"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "Sblocca dagli appunti"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "Opzioni appunti"
+
--- /dev/null
+msgid "IDS_COM_BODY_DONE"
+msgstr "შესრულებულია"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "დახურვა"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "წაშლა"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "ყველას წაშლა"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "ასლი შენახულია ბუფერში."
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "ბუფერული მეხს."
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "გაუქმება"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "უკვე არის."
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "ყველა წაიშალოს?"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "ბუფერული მეხსიერებიდან წაშლა"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "ბუფერულ მეხსიერებაში ჩაკეტვა"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "ბუფერული მეხსიერებიდან გახსნა"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "ბუფერული მეხსიერების პარამეტრები"
+
--- /dev/null
+msgid "IDS_COM_BODY_DONE"
+msgstr "Аяқталды"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "Жабу"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "Жою"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "Барлық жойылды"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "Буферге көшірілді."
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "Буфер"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "Тоқтату"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "Қолданыста бар."
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "Бәрін жоясыз ба?"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "Буферден жою"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "Буферге құлыптау"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "Буфер құлпынан шешу"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "Буфер параметрлері"
+
--- /dev/null
+msgid "IDS_COM_BODY_DONE"
+msgstr "완료"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "종료"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "삭제"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "모두 삭제"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "클립보드에 복사하였습니다."
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "클립보드"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "취소"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "동일한 항목이 있습니다."
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "모두 삭제할까요?"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "클립보드에서 삭제"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "클립보드에서 잠금"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "클립보드에서 잠금해제"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "클립보드 옵션"
+
--- /dev/null
+msgid "IDS_COM_BODY_DONE"
+msgstr "Atlikta"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "Uždaryti"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "Trinti"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "Trinti viską"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "Nukopijuota į iškarpinę."
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "Iškarpinė"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "Atšaukti"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "Jau yra."
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "Ar trinti viską?"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "Trinti iš iškarpinės"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "Užrakinti iškarpinėje"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "Atrakinti iš iškarpinės"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "Iškarpinės parinktys"
+
--- /dev/null
+msgid "IDS_COM_BODY_DONE"
+msgstr "Gatavs"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "Aizvērt"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "Dzēst"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "Dzēst visu"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "Kopēts starpliktuvē."
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "Starpliktuve"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "Atcelt"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "Jau pastāv."
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "Vai dzēst visu?"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "Dzēst no starpliktuves"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "Bloķēt starpliktuvē"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "Atbloķēt no starpliktuves"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "Starpliktuves iespējas"
+
--- /dev/null
+msgid "IDS_COM_BODY_DONE"
+msgstr "Дууслаа"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "Хаах"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "Устгах"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "Бүгдийг устгах"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "Түр санах ой руу хуулсан"
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "Түр санах ой"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "Цуцлах"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "Хэдийн оршиж байна"
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "Бүгдийг устгах уу?"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "Түр санах ойноос устгах"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "Түр санах ой руу түгжих"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "Түр санах ойгоос нээх"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "Түр санах ойн сонголтууд"
+
--- /dev/null
+msgid "IDS_COM_BODY_DONE"
+msgstr "Utført"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "Lukk"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "Slett"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "Slett alle"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "Kopiert til utklippstavle."
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "Utklippstavle"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "Avbryt"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "Finnes allerede."
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "Slette alle?"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "Slette fra utklippstavle"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "Lås til utklippstavle"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "Lås opp fra utklippstavle"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "Alternativer for utklippstavle"
+
--- /dev/null
+msgid "IDS_COM_BODY_DONE"
+msgstr "Gereed"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "Sluiten"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "Verwijderen"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "Alles verwijderen"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "Gekopieerd naar klembord."
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "Klembord"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "Annuleer"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "Bestaat al."
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "Alles verwijderen?"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "Verwijderen van klembord"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "Vergrendelen op klembord"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "Ontgrendelen van klembord"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "Klembordopties"
+
--- /dev/null
+msgid "IDS_COM_BODY_DONE"
+msgstr "Gotowe"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "Zamknij"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "Usuń"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "Usuń wszystko"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "Skopiowane do schowka."
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "Schowek"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "Anuluj"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "Już istnieje."
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "Usunąć wszystko?"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "Usuń ze schowka"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "Zablokuj do schowka"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "Odblokuj ze schowka"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "Opcje schowka"
+
--- /dev/null
+msgid "IDS_COM_BODY_DONE"
+msgstr "Concluído"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "Fechar"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "Excluir"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "Apagar tudo"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "Copiado para a área de transferência."
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "Área de transferência"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "Cancelar"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "Já existe."
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "Apagar tudo?"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "Apagar da área de transferência"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "Bloquear na área de transferência"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "Desbloquear da área de transferência"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "Opções de área de transferência"
+
--- /dev/null
+msgid "IDS_COM_BODY_DONE"
+msgstr "Concluído"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "Fechar"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "Eliminar"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "Eliminar tudo"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "Copiado para a área de transferência."
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "Área transferência"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "Cancelar"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "Já existe."
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "Eliminar tudo?"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "Eliminar da área de transferência"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "Bloquear na área de transferência"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "Desbloquear na área de transferência"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "Opções de área de transferência"
+
--- /dev/null
+msgid "IDS_COM_BODY_DONE"
+msgstr "Efectuat"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "Închidere"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "Ştergere"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "Ştergere toate"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "Copiat în clipboard"
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "Clipboard"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "Anulare"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "Există deja."
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "Ştergeţi tot?"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "Ştergere din clipboard"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "Blocare în clipboard"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "Deblocare din clipboard"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "Opţiuni clipboard"
+
--- /dev/null
+msgid "IDS_COM_BODY_DONE"
+msgstr "Готово"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "Закрыть"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "Удалить"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "Удалить все"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "Скопировано в буфер обмена."
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "Буфер обмена"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "Отмена"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "Уже существует."
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "Удалить все?"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "Удалить из буфера обмена"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "Заблокировать в буфере обмена"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "Разблокировать"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "Параметры буфера обмена"
+
--- /dev/null
+msgid "IDS_COM_BODY_DONE"
+msgstr "Hotovo"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "Zavrieť"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "Odstrániť"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "Odstrániť všetko"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "Skopírované do schránky."
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "Schránka"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "Zrušiť"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "Už existuje."
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "Odstrániť všetko?"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "Odstrániť zo schránky"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "Zamknúť k schránke"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "Odomknúť od schránky"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "Možnosti schránky"
+
--- /dev/null
+msgid "IDS_COM_BODY_DONE"
+msgstr "Končano"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "Zapri"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "Izbriši"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "Izbriši vse"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "Kopirano v odložišče."
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "Odložišče"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "Prekliči"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "Že obstaja."
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "Brišem vse?"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "Izbriši iz odložišča"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "Zakleni v odložišče"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "Odkleni iz odložišča"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "Možnosti odložišča"
+
--- /dev/null
+msgid "IDS_COM_BODY_DONE"
+msgstr "Gotovo"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "Zatvori"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "Izbriši"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "Obriši sve"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "Iskopirano u privremenu memoriju."
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "Privremena memorija"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "Otkaži"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "Već postoji."
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "Obriši sve?"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "Izbriši iz privremene memorije"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "Zaključaj u privremenu memoriju"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "Otključaj iz privremene memorije"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "Opcije privremene memorije"
+
--- /dev/null
+msgid "IDS_COM_BODY_DONE"
+msgstr "Klar"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "Stäng"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "Ta bort"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "Ta bort alla"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "Kopierat till Urklipp."
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "Urklipp"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "Avbryt"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "Finns redan."
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "Radera alla?"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "Ta bort från urklipp"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "Lås till Urklipp"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "Lås upp från Urklipp"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "Urklippsalternativ"
+
--- /dev/null
+msgid "IDS_COM_BODY_DONE"
+msgstr "Tamamlandı"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "Kapat"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "Sil"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "Tümünü sil"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "Panoya kopyalandı."
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "Pano"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "İptal"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "Zaten var."
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "Tümü silinsin mi?"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "Panodan sil"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "Panoya kilitle"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "Panodan kaldır"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "Pano seçenekleri"
+
--- /dev/null
+msgid "IDS_COM_BODY_DONE"
+msgstr "Готово"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "Закрити"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "Видалити"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "Видалити всі"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "Скопійовано в буфер обміну."
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "Буфер обміну"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "Скасувати"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "Вже існує."
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "Видалити всі?"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "Видалити з буфера обміну"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "Заблокувати в буфері обміну"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "Розблокувати в буфері обміну"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "Опції буфера обміну"
+
--- /dev/null
+msgid "IDS_COM_BODY_DONE"
+msgstr "Bajarildi"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "Yopish"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "O'chirish"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "Barchasi o'chirish"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "Buferga nusxa olindi."
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "Bufer"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "Bekor q."
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "Avvaldan mavjud."
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "Barchasi o'chirilsinmi?"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "Buferdan olib tashlash"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "Buferga bloklash"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "Buferdan blokdan chiqarish"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "Bufer opsiyalari"
+
--- /dev/null
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 _CBHM_H_
+#define _CBHM_H_
+
+#include <Elementary.h>
+#include <Ecore_X.h>
+
+#if !defined(PACKAGE)
+# define PACKAGE "CBHM"
+#endif
+
+#if !defined(APPNAME)
+# define APPNAME "Clipboard History Manager"
+#endif
+
+#if !defined(LOCALEDIR)
+# define LOCALEDIR "/usr/share/locale"
+#endif
+
+#define CBHM_MAGIC 0xad960009
+
+typedef struct _TargetHandler TargetHandler;
+typedef struct _AppData AppData;
+typedef struct _ClipdrawerData ClipdrawerData;
+typedef struct _CNP_ITEM CNP_ITEM;
+typedef struct _XHandlerData XHandlerData;
+typedef struct _StorageData StorageData;
+typedef char *(*text_converter_func)(AppData *ad, int type_index, const char *str);
+
+#define ITEM_CNT_MAX 20
+#define COPIED_DATA_STORAGE_DIR "/opt/var/.cbhm_files"
+
+#include "clipdrawer.h"
+#include "item_manager.h"
+#include "xhandler.h"
+#include "xconverter.h"
+#include "storage.h"
+
+struct _TargetHandler {
+ Ecore_X_Atom *atom;
+ char **name;
+ int atom_cnt;
+ text_converter_func convert_to_entry;
+ text_converter_func convert_to_target[ATOM_INDEX_MAX];
+};
+
+struct _AppData {
+ int magic;
+ Ecore_X_Display *x_disp;
+ Ecore_X_Window x_root_win;
+ Ecore_X_Window x_event_win;
+ Ecore_X_Window x_active_win;
+ Eina_List *item_list;
+
+ Eina_Bool (*draw_item_add)(AppData *ad, CNP_ITEM *item);
+ Eina_Bool (*draw_item_del)(AppData *ad, CNP_ITEM *item);
+ Eina_Bool (*storage_item_add)(AppData *ad, CNP_ITEM *item);
+ Eina_Bool (*storage_item_del)(AppData *ad, CNP_ITEM *item);
+ Eina_Bool (*storage_item_update)(AppData *ad, CNP_ITEM *item);
+ CNP_ITEM *(*storage_item_load)(StorageData *sd, int index);
+
+ ClipdrawerData *clipdrawer;
+ XHandlerData *xhandler;
+ StorageData *storage;
+
+ CNP_ITEM *clip_selected_item;
+ TargetHandler targetAtoms[ATOM_INDEX_MAX];
+};
+
+void *d_malloc(const char *func, int line, size_t size);
+void *d_calloc(const char *func, int line, size_t n, size_t size);
+void d_free(const char *func, int line, void *m);
+
+extern int _log_domain;
+#define CRITICAL(...) EINA_LOG_DOM_CRIT(_log_domain, __VA_ARGS__)
+#define ERR(...) EINA_LOG_DOM_ERR(_log_domain, __VA_ARGS__)
+#define WRN(...) EINA_LOG_DOM_WARN(_log_domain, __VA_ARGS__)
+#define INF(...) EINA_LOG_DOM_INFO(_log_domain, __VA_ARGS__)
+#define DBG(...) EINA_LOG_DOM_DBG(_log_domain, __VA_ARGS__)
+#define CALLED() DBG("called %s, %s", __FILE__, __func__);
+#define MALLOC(size) d_malloc(__func__, __LINE__, size)
+#define CALLOC(n, size) d_calloc(__func__, __LINE__, n, size)
+#define FREE(p) d_free(__func__, __LINE__, p)
+
+// Define memory-safe string functions
+#define SAFE_STRCMP(s1, s2) ((s1 && s2) ? strcmp(s1, s2) : (s1 ? 1 : -1))
+#define SAFE_STRNCMP(s1, s2, n) ((s1 && s2) ? strncmp(s1, s2, n) : (s1 ? 1 : -1))
+#define SAFE_STRDUP(s) (s ? strdup(s) : NULL)
+#define SAFE_STRNDUP(s, n) (s ? strndup(s, n) : NULL)
+#define SAFE_STRCPY(dest, src) (src ? strcpy(dest, src) : NULL)
+#define SAFE_STRNCPY(dest, src, n) (src ? strncpy(dest, src, n) : NULL)
+#define SAFE_STRCAT(dest, src) ((dest && src) ? strcat(dest, src) : NULL)
+#define SAFE_STRNCAT(dest, src, n) ((dest && src) ? strncat(dest, src, n) : NULL)
+#define SAFE_STRCHR(s, c) (s ? strchr(s, c) : NULL)
+#define SAFE_STRSTR(haystack, needle) (haystack ? strstr(haystack, needle) : NULL)
+#define SAFE_STRLEN(s) (s ? strlen(s) : 0)
+
+#endif // _CBHM_H_
--- /dev/null
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 <utilX.h>
+#include "clipdrawer.h"
+#include "item_manager.h"
+#include "xconverter.h"
+
+#define EDJ_PATH "/usr/share/edje"
+#define APP_EDJ_FILE EDJ_PATH"/cbhmdrawer.edj"
+#define GRP_MAIN "cbhmdrawer"
+
+#define ANIM_DURATION 30 // 1 seconds
+#define ANIM_FLOPS (0.5/30)
+#define DEFAULT_WIDTH 720
+#define COMBINED_ITEM_IMAGE_HEIGHT 120
+#define BUFF (int)1024 //limited gengrid text buffer
+
+#define EDJE_CLOSE_PART_PREFIX "background/title/close/bg"
+#define EDJE_DELETE_MODE_PREFIX "background/title/delete/image"
+#define EDJE_DELETE_ALL_BTN_PART_PREFIX "background/title/delete_all/image"
+
+#define TIME_DELAY_LOWER_VIEW 0.1 //Time to delay lower view
+
+static Evas_Object *create_win(ClipdrawerData *cd, const char *name);
+static Evas_Object *_grid_image_content_get(void *data, Evas_Object *obj, const char *part);
+static Evas_Object *_grid_combined_content_get(void *data, Evas_Object *obj, const char *part);
+static char *_grid_text_get(void *data, Evas_Object *obj, const char *part);
+static void _grid_realized(void *data, Evas_Object *obj, void *event_info);
+static void _grid_unrealized(void *data, Evas_Object *obj, void *event_info);
+static void _grid_longpressed(void *data, Evas_Object *obj, void *event_info);
+static Eina_Bool clipdrawer_add_item(AppData *ad, CNP_ITEM *item);
+static Eina_Bool clipdrawer_del_item(AppData *ad, CNP_ITEM *item);
+static void _ok_btn_cb(void *data, Evas_Object *obj, void *event_info);
+static void _cancel_btn_cb(void *data, Evas_Object *obj, void *event_info);
+static void _create_cbhm_popup(AppData *ad, PopupStyle popup_style, Elm_Object_Item *gitem);
+static void clipdrawer_ly_clicked(void *data, Evas_Object *obj, const char *emission, const char *source);
+static void _grid_item_ly_clicked(void *data, Elm_Object_Item *it, const char *emission, const char *source);
+static void setting_win(Ecore_X_Display *x_disp, Ecore_X_Window x_root_win, Ecore_X_Window x_main_win);
+static Ecore_X_Window isf_ise_window_get();
+static void set_transient_for(Ecore_X_Window x_main_win, Ecore_X_Window x_active_win);
+static void unset_transient_for(Ecore_X_Window x_main_win);
+static void set_focus_for_app_window(Ecore_X_Window x_main_win, Eina_Bool enable);
+
+static void _change_gengrid_paste_textonly_mode(ClipdrawerData *cd)
+{
+ CNP_ITEM *item = NULL;
+
+ Elm_Object_Item *gitem = elm_gengrid_first_item_get(cd->gengrid);
+
+ while (gitem)
+ {
+ item = elm_object_item_data_get(gitem);
+ if(!item)
+ return;
+ if ((item->type_index == ATOM_INDEX_IMAGE))
+ {
+ if (cd->paste_text_only)
+ elm_object_item_signal_emit(gitem, "elm,state,show,dim", "elm");
+ else
+ elm_object_item_signal_emit(gitem, "elm,state,hide,dim", "elm");
+ }
+ gitem = elm_gengrid_item_next_get(gitem);
+ }
+}
+
+void clipdrawer_paste_textonly_set(AppData *ad, Eina_Bool textonly)
+{
+ ClipdrawerData *cd = ad->clipdrawer;
+ if (cd->paste_text_only != textonly)
+ cd->paste_text_only = textonly;
+ DBG("paste textonly mode = %d", textonly);
+
+ _change_gengrid_paste_textonly_mode(cd);
+}
+
+Eina_Bool clipdrawer_paste_textonly_get(AppData *ad)
+{
+ ClipdrawerData *cd = ad->clipdrawer;
+ return cd->paste_text_only;
+}
+
+static Evas_Object *_load_edj(Evas_Object* win, const char *file, const char *group)
+{
+ Evas_Object *layout = elm_layout_add(win);
+ if (!layout)
+ {
+ ERR("elm_layout_add return NULL");
+ return NULL;
+ }
+
+ if (!elm_layout_file_set(layout, file, group))
+ {
+ ERR("elm_layout_file_set return FALSE");
+ evas_object_del(layout);
+ return NULL;
+ }
+
+ evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ elm_win_resize_object_add(win, layout);
+
+ evas_object_show(layout);
+ return layout;
+}
+
+static Eina_Bool keydown_cb(void *data, int type, void *event)
+{
+ if (!data || !event) return ECORE_CALLBACK_DONE;
+
+ AppData *ad = data;
+ ClipdrawerData *cd = ad->clipdrawer;
+ Ecore_Event_Key *ev = event;
+
+ if (!SAFE_STRCMP(ev->keyname, KEY_END))
+ {
+ if (cd->popup_activate)
+ {
+ cd->popup_activate = EINA_FALSE;
+ evas_object_del(cd->popup_conform);
+ evas_object_del(cd->popup_win);
+ }
+ else if (delete_mode)
+ _delete_mode_set(ad, EINA_FALSE);
+ else
+ clipdrawer_lower_view(ad);
+ }
+ else if(!SAFE_STRCMP(ev->keyname, KEY_HOME))
+ {
+ clipdrawer_lower_view(ad);
+ return ECORE_CALLBACK_PASS_ON;
+ }
+
+ return ECORE_CALLBACK_DONE;
+}
+
+// Access type callback for title close button
+static char *
+_title_close_btn_access_type_cb(void *data,
+ Evas_Object *obj)
+{
+ AppData *ad = (AppData *)data;
+ if (!ad) return NULL;
+
+ return strdup("Button");
+}
+
+// Access information callback for title close button
+static char *
+_title_close_btn_access_info_cb(void *data,
+ Evas_Object *obj)
+{
+ AppData *ad = (AppData *)data;
+ if (!ad) return NULL;
+
+ return strdup(S_CLOSE);
+}
+
+// Access type callback for title delete button
+static char *
+_title_delete_btn_access_type_cb(void *data,
+ Evas_Object *obj)
+{
+ AppData *ad = (AppData *)data;
+ if (!ad) return NULL;
+
+ return strdup("Button");
+}
+
+
+// Access information callback for title delete button
+static char *
+_title_delete_btn_access_info_cb(void *data,
+ Evas_Object *obj)
+{
+ AppData *ad = (AppData *)data;
+ if (!ad) return NULL;
+
+ if (delete_mode)
+ return strdup(S_DONE);
+ else
+ return strdup(S_DELETE);
+}
+
+// Access type callback for title delete all button
+static char *
+_title_delete_all_btn_access_type_cb(void *data,
+ Evas_Object *obj)
+{
+ AppData *ad = (AppData *)data;
+ if (!ad) return NULL;
+
+ return strdup("Button");
+}
+
+// Access information callback for title delete all button
+static char *
+_title_delete_all_btn_access_info_cb(void *data,
+ Evas_Object *obj)
+{
+ AppData *ad = (AppData *)data;
+ if (!ad) return NULL;
+
+ return strdup(S_DELETE_ALL);
+}
+
+// Access activate callback for title close button
+static void
+_title_close_btn_access_activate_cb(void *data,
+ Evas_Object *obj,
+ Elm_Object_Item *item)
+{
+ AppData *ad = (AppData *)data;
+ if (!ad) return;
+
+ clipdrawer_lower_view(ad);
+}
+
+// Access activate callback for title delete button
+static void
+_title_delete_btn_access_activate_cb(void *data,
+ Evas_Object *obj,
+ Elm_Object_Item *item)
+{
+ AppData *ad = (AppData *)data;
+ if (!ad) return;
+
+ _delete_mode_set(ad, !delete_mode);
+}
+
+// Access activate callback for title delete all button
+static void
+_title_delete_all_btn_access_activate_cb(void *data,
+ Evas_Object *obj,
+ Elm_Object_Item *item)
+{
+ AppData *ad = (AppData *)data;
+ if (!ad) return;
+ ClipdrawerData *cd = ad->clipdrawer;
+
+ if ((item_count_get(ad, ATOM_INDEX_COUNT_ALL) - cd->locked_item_count) != 0)
+ _create_cbhm_popup(ad, DELETE_ALL_POPUP, NULL);
+}
+
+ClipdrawerData* init_clipdrawer(AppData *ad)
+{
+ ClipdrawerData *cd = calloc(1, sizeof(ClipdrawerData));
+ const char *data;
+ Evas_Object *part_obj, *access_obj;
+
+ /* create and setting window */
+ if (!cd)
+ return NULL;
+ if (!(cd->main_win = create_win(cd, APPNAME)))
+ {
+ free(cd);
+ return NULL;
+ }
+ if (!(cd->x_main_win = elm_win_xwindow_get(cd->main_win)))
+ {
+ free(cd);
+ return NULL;
+ }
+
+ setting_win(ad->x_disp, ad->x_root_win, cd->x_main_win);
+
+ /* edj setting */
+ if (!(cd->main_layout = _load_edj(cd->main_win, APP_EDJ_FILE, GRP_MAIN)))
+ {
+ evas_object_del(cd->main_win);
+ free(cd);
+ return NULL;
+ }
+
+ double scale = elm_config_scale_get();
+ Evas_Object* ly = elm_layout_edje_get(cd->main_layout);
+
+ data = edje_object_data_get(ly, "clipboard_height");
+ cd->height = data ? atoi(data) : 0;
+ cd->height *= scale;
+
+ data = edje_object_data_get(ly, "clipboard_landscape_height");
+ cd->landscape_height = data ? atoi(data) : 0;
+ cd->landscape_height *= scale;
+
+ data = edje_object_data_get(ly, "grid_item_bg_w");
+ cd->grid_item_bg_w = data ? atoi(data) : 0;
+ cd->grid_item_bg_w *= scale;
+
+ data = edje_object_data_get(ly, "grid_item_bg_h");
+ cd->grid_item_bg_h = data ? atoi(data) : 0;
+ cd->grid_item_bg_h *= scale;
+
+ data = edje_object_data_get(ly, "grid_image_item_w");
+ cd->grid_image_item_w = data ? atoi(data) : 0;
+ cd->grid_image_item_w *= scale;
+
+ data = edje_object_data_get(ly, "grid_image_item_h");
+ cd->grid_image_item_h = data ? atoi(data) : 0;
+ cd->grid_image_item_h *= scale;
+
+ /* create and setting gengrid */
+ elm_theme_extension_add(NULL, APP_EDJ_FILE);
+ elm_object_signal_callback_add(cd->main_layout,
+ "mouse,clicked,1", "*", clipdrawer_ly_clicked, ad);
+
+ // Set accessibility function for title close button
+ part_obj = (Evas_Object *)edje_object_part_object_get
+ (elm_layout_edje_get(cd->main_layout), EDJE_CLOSE_PART_PREFIX);
+ access_obj = elm_access_object_register(part_obj, cd->main_layout);
+
+ elm_access_info_cb_set(access_obj, ELM_ACCESS_TYPE, _title_close_btn_access_type_cb, ad);
+ elm_access_info_cb_set(access_obj, ELM_ACCESS_INFO, _title_close_btn_access_info_cb, ad);
+ elm_access_activate_cb_set(access_obj, _title_close_btn_access_activate_cb, ad);
+
+ // Set access function for title delete button
+ part_obj = (Evas_Object *)edje_object_part_object_get
+ (elm_layout_edje_get(cd->main_layout), EDJE_DELETE_MODE_PREFIX);
+ access_obj = elm_access_object_register(part_obj, cd->main_layout);
+
+ elm_access_info_cb_set(access_obj, ELM_ACCESS_TYPE, _title_delete_btn_access_type_cb, ad);
+ elm_access_info_cb_set(access_obj, ELM_ACCESS_INFO, _title_delete_btn_access_info_cb, ad);
+ elm_access_activate_cb_set(access_obj, _title_delete_btn_access_activate_cb, ad);
+
+ // Set access function for title delete all button
+ part_obj = (Evas_Object *)edje_object_part_object_get
+ (elm_layout_edje_get(cd->main_layout), EDJE_DELETE_ALL_BTN_PART_PREFIX);
+ access_obj = elm_access_object_register(part_obj, cd->main_layout);
+
+ elm_access_info_cb_set(access_obj, ELM_ACCESS_TYPE, _title_delete_all_btn_access_type_cb, ad);
+ elm_access_info_cb_set(access_obj, ELM_ACCESS_INFO, _title_delete_all_btn_access_info_cb, ad);
+ elm_access_activate_cb_set(access_obj, _title_delete_all_btn_access_activate_cb, ad);
+
+ cd->gengrid = elm_gengrid_add(cd->main_win);
+ elm_object_style_set(cd->gengrid, "cbhm");
+ elm_object_part_content_set(cd->main_layout, "historyitems", cd->gengrid);
+ elm_gengrid_item_size_set(cd->gengrid, cd->grid_item_bg_w, cd->grid_item_bg_h);
+ elm_gengrid_align_set(cd->gengrid, 0.0, 0.0);
+ elm_gengrid_horizontal_set(cd->gengrid, EINA_TRUE);
+// elm_gengrid_bounce_set(cd->gengrid, EINA_TRUE, EINA_FALSE);
+ elm_gengrid_multi_select_set(cd->gengrid, EINA_FALSE);
+// evas_object_smart_callback_add(cd->gengrid, "selected", _grid_click_paste, ad);
+ evas_object_size_hint_weight_set(cd->gengrid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+ elm_gengrid_clear(cd->gengrid);
+
+ evas_object_smart_callback_add(cd->gengrid, "realized", _grid_realized, NULL);
+ evas_object_smart_callback_add(cd->gengrid, "unrealized", _grid_unrealized, NULL);
+ evas_object_smart_callback_add(cd->gengrid, "longpressed", _grid_longpressed, ad);
+
+ cd->gic_image.item_style = "clipboard/image_style";
+ cd->gic_image.func.text_get = NULL;
+ cd->gic_image.func.content_get = _grid_image_content_get;
+ cd->gic_image.func.state_get = NULL;
+ cd->gic_image.func.del = NULL;
+
+ cd->gic_text.item_style = "clipboard/text_style";
+ cd->gic_text.func.text_get = _grid_text_get;
+ cd->gic_text.func.content_get = NULL;
+ cd->gic_text.func.state_get = NULL;
+ cd->gic_text.func.del = NULL;
+
+ cd->gic_combined.item_style = "clipboard/combined_style";
+ cd->gic_combined.func.text_get = _grid_text_get;
+ cd->gic_combined.func.content_get = _grid_combined_content_get;
+ cd->gic_combined.func.state_get = NULL;
+ cd->gic_combined.func.del = NULL;
+
+ evas_object_show(cd->gengrid);
+
+ ad->draw_item_add = clipdrawer_add_item;
+ ad->draw_item_del = clipdrawer_del_item;
+// ad->x_main_win = cd->x_main_win;
+
+ cd->keydown_handler = ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, keydown_cb, ad);
+ cd->evas = evas_object_evas_get(cd->main_win);
+
+ delete_mode = EINA_FALSE;
+ cd->popup_activate = EINA_FALSE;
+ cd->item_clicked = EINA_FALSE;
+ cd->delbtn_clicked = EINA_FALSE;
+
+ cd->lower_view_timer = NULL;
+
+ return cd;
+}
+
+void depose_clipdrawer(ClipdrawerData *cd)
+{
+ utilx_ungrab_key(ecore_x_display_get(), cd->x_main_win, KEY_END);
+ utilx_ungrab_key(ecore_x_display_get(), cd->x_main_win, KEY_HOME);
+ evas_object_del(cd->main_win);
+ if (cd->anim_timer)
+ ecore_timer_del(cd->anim_timer);
+ if (cd->keydown_handler)
+ ecore_event_handler_del(cd->keydown_handler);
+ free(cd);
+}
+static void _gengrid_select_cb(void *data, Evas_Object *obj, void *event)
+{
+ CNP_ITEM *item = data;
+ AppData *ad = item->ad;
+ ClipdrawerData *cd = ad->clipdrawer;
+
+ elm_gengrid_item_selected_set(event, EINA_FALSE);
+ if (cd->delbtn_clicked)
+ {
+ item_delete_by_CNP_ITEM(ad, item);
+ cd->delbtn_clicked = EINA_FALSE;
+ }
+ else
+ {
+ if (delete_mode)
+ return;
+
+ if (cd->popup_activate)
+ return;
+
+ if (item->type_index != ATOM_INDEX_IMAGE || !cd->paste_text_only)
+ {
+ ad->clip_selected_item = item;
+ if (is_cbhm_selection_owner(ad, ECORE_X_SELECTION_SECONDARY))
+ cd->item_clicked = EINA_TRUE;
+ else
+ set_selection_owner(ad, ECORE_X_SELECTION_SECONDARY, NULL);
+ }
+ }
+}
+
+
+static Eina_Bool clipdrawer_add_item(AppData *ad, CNP_ITEM *item)
+{
+ Eina_Bool duplicated = EINA_FALSE;
+ ClipdrawerData *cd = ad->clipdrawer;
+ Elm_Object_Item *gitem = elm_gengrid_first_item_get(cd->gengrid);
+
+ if (!item) return EINA_FALSE;
+
+ while (gitem)
+ {
+ CNP_ITEM *gitem_data = elm_object_item_data_get(gitem);
+ gitem = elm_gengrid_item_next_get(gitem);
+ if (!gitem_data) continue;
+
+ if ((gitem_data->type_index == item->type_index) && (!SAFE_STRCMP(item->data, gitem_data->data)))
+ {
+ DBG("duplicated data = %s", (char *)item->data);
+ item_delete_by_CNP_ITEM(ad, gitem_data);
+ duplicated = EINA_TRUE;
+ }
+ }
+
+ if(item->locked)
+ cd->locked_item_count++;
+
+ if (item->gitem_style == GRID_ITEM_STYLE_TEXT)
+ item->gitem = elm_gengrid_item_prepend(cd->gengrid, &cd->gic_text, item, _gengrid_select_cb, item);
+ else if (item->gitem_style == GRID_ITEM_STYLE_IMAGE)
+ item->gitem = elm_gengrid_item_prepend(cd->gengrid, &cd->gic_image, item, _gengrid_select_cb, item);
+ else
+ item->gitem = elm_gengrid_item_prepend(cd->gengrid, &cd->gic_combined, item, _gengrid_select_cb, item);
+
+ return duplicated;
+}
+
+static Eina_Bool clipdrawer_del_item(AppData *ad, CNP_ITEM *item)
+{
+ if (item->gitem)
+ elm_object_item_del(item->gitem);
+ return EINA_TRUE;
+}
+
+static char *_grid_text_get(void *data, Evas_Object *obj, const char *part)
+{
+ CNP_ITEM *item = data;
+ Elm_Object_Item *gitem;
+ char text_to_show[BUFF];
+ if (!item)
+ return NULL;
+
+ gitem = item->gitem;
+
+ if (!SAFE_STRCMP(part, "elm.text")) /* text */
+ {
+ char *entry_text = string_for_entry_get(item->ad, item->type_index, item->data);
+
+ /* limiting the grid text to show to avoid UI blockage in case of large text */
+ if (entry_text)
+ {
+ SAFE_STRNCPY(text_to_show, entry_text, (BUFF - 1));
+ strcat(text_to_show, "\0");
+ }
+ if (delete_mode)
+ elm_object_item_signal_emit(gitem, "elm,state,show,delbtn", "elm");
+ else
+ elm_object_item_signal_emit(gitem, "elm,state,hide,delbtn", "elm");
+
+ if (item->locked)
+ elm_object_item_signal_emit(gitem, "elm,state,show,lockicon", "elm");
+
+ if (entry_text)
+ return strdup(text_to_show);
+ else
+ return SAFE_STRDUP(item->data);
+ }
+
+ return NULL;
+}
+
+static Evas_Object *_grid_image_content_get(void *data, Evas_Object *obj, const char *part)
+{
+ CNP_ITEM *item = data;
+ AppData *ad;
+ ClipdrawerData *cd;
+ Elm_Object_Item *gitem;
+ Evas_Object *sicon;
+
+ if (!item)
+ return NULL;
+
+ ad = item->ad;
+ cd = ad->clipdrawer;
+ gitem = item->gitem;
+
+ if (!SAFE_STRCMP(part, "elm.swallow.content")) /* uri */
+ {
+ int w, h, iw, ih;
+ int grid_image_real_w = cd->grid_image_item_w;
+ int grid_image_real_h = cd->grid_image_item_h;
+ double scale;
+
+ sicon = evas_object_image_filled_add(evas_object_evas_get(obj));
+ evas_object_image_load_size_set(sicon, grid_image_real_w, grid_image_real_h);
+ evas_object_image_file_set(sicon, item->file, NULL);
+ evas_object_image_preload(sicon, EINA_FALSE);
+ evas_object_image_size_get(sicon, &w, &h);
+
+ scale = elm_config_scale_get();
+
+ if (w <= 0 || h <= 0)
+ return NULL;
+
+ if (w > grid_image_real_w || h > grid_image_real_h)
+ {
+ if (w >= h)
+ {
+ iw = 190 * scale;
+ ih = 150 * scale;
+ }
+ else
+ {
+ iw = 150 * scale;
+ ih = 190 * scale;
+ }
+ }
+ else
+ {
+ iw = w;
+ ih = h;
+ }
+
+ evas_object_resize(sicon, iw, ih);
+ evas_object_size_hint_min_set(sicon, iw, ih);
+
+ if (cd->paste_text_only)
+ elm_object_item_signal_emit(gitem, "elm,state,show,dim", "elm");
+ else
+ elm_object_item_signal_emit(gitem, "elm,state,hide,dim", "elm");
+ }
+ else
+ return NULL;
+
+ if (delete_mode)
+ elm_object_item_signal_emit(gitem, "elm,state,show,delbtn", "elm");
+ else
+ elm_object_item_signal_emit(gitem, "elm,state,hide,delbtn", "elm");
+
+ if (item->locked)
+ elm_object_item_signal_emit(gitem, "elm,state,show,lockicon", "elm");
+
+ return sicon;
+}
+
+static Evas_Object *_grid_combined_content_get(void *data, Evas_Object *obj, const char *part)
+{
+ CNP_ITEM *item = data;
+ AppData *ad;
+ ClipdrawerData *cd;
+ Elm_Object_Item *gitem;
+ Evas_Object *sicon;
+
+ if (!item)
+ return NULL;
+
+ ad = item->ad;
+ cd = ad->clipdrawer;
+ gitem = item->gitem;
+
+ if (!SAFE_STRCMP(part, "elm.swallow.content")) /* uri */
+ {
+ int w, h, iw, ih;
+ int grid_image_real_w = cd->grid_image_item_w;
+ int grid_image_real_h = cd->grid_image_item_h;
+
+ sicon = evas_object_image_filled_add(evas_object_evas_get(obj));
+ evas_object_image_load_size_set(sicon, grid_image_real_w, grid_image_real_h);
+ evas_object_image_file_set(sicon, item->file, NULL);
+ evas_object_image_preload(sicon, EINA_FALSE);
+ evas_object_image_size_get(sicon, &w, &h);
+
+ if (w <= 0 || h <= 0)
+ return NULL;
+
+ if (w > grid_image_real_w || h > COMBINED_ITEM_IMAGE_HEIGHT)
+ {
+ if (w >= h)
+ {
+ ih = (float)grid_image_real_w / w * h;
+ if (ih > COMBINED_ITEM_IMAGE_HEIGHT)
+ {
+ iw = (float)COMBINED_ITEM_IMAGE_HEIGHT / h * w;
+ ih = COMBINED_ITEM_IMAGE_HEIGHT;
+ }
+ else
+ {
+ iw = grid_image_real_w;
+ }
+ }
+ else
+ {
+ iw = (float)COMBINED_ITEM_IMAGE_HEIGHT / h * w;
+ ih = COMBINED_ITEM_IMAGE_HEIGHT;
+ }
+ }
+ else
+ {
+ iw = w;
+ ih = h;
+ }
+
+ evas_object_resize(sicon, iw, ih);
+ evas_object_size_hint_min_set(sicon, iw, ih);
+
+ if (cd->paste_text_only)
+ elm_object_item_signal_emit(gitem, "elm,state,show,dim", "elm");
+ else
+ elm_object_item_signal_emit(gitem, "elm,state,hide,dim", "elm");
+ }
+ else
+ return NULL;
+
+ if (delete_mode)
+ elm_object_item_signal_emit(gitem, "elm,state,show,delbtn", "elm");
+ else
+ elm_object_item_signal_emit(gitem, "elm,state,hide,delbtn", "elm");
+
+ if (item->locked)
+ elm_object_item_signal_emit(gitem, "elm,state,show,lockicon", "elm");
+
+ return sicon;
+}
+
+static void _grid_realized(void *data, Evas_Object *obj, void *event_info)
+{
+ Elm_Object_Item *gitem = (Elm_Object_Item *) event_info;
+ CNP_ITEM *item;
+
+ if (gitem)
+ {
+ item = elm_object_item_data_get(gitem);
+ if (item)
+ elm_object_item_signal_callback_add(gitem, "mouse,clicked,1", "*", _grid_item_ly_clicked, item);
+ }
+}
+
+static void list_selected_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ Elm_Object_Item *gitem = (Elm_Object_Item *) data;
+ CNP_ITEM *item = elm_object_item_data_get(gitem);
+ AppData *ad = item->ad;
+ ClipdrawerData *cd = ad->clipdrawer;
+
+ if (delete_mode) return;
+
+ if (!item->locked)
+ {
+ item->locked = EINA_TRUE;
+ cd->locked_item_count++;
+
+ if ((item_count_get(ad, ATOM_INDEX_COUNT_ALL) - cd->locked_item_count) == 0)
+ elm_object_signal_emit(cd->main_layout, "elm,state,disable,del", "elm");
+
+ elm_object_item_signal_emit(gitem, "elm,state,show,lockicon", "elm");
+ ad->storage_item_update(ad, item);
+ }
+ else
+ {
+ item->locked = EINA_FALSE;
+ cd->locked_item_count--;
+
+ if ((item_count_get(ad, ATOM_INDEX_COUNT_ALL) - cd->locked_item_count) != 0)
+ elm_object_signal_emit(cd->main_layout, "elm,state,enable,del", "elm");
+
+ elm_object_item_signal_emit(gitem, "elm,state,hide,lockicon", "elm");
+ ad->storage_item_update(ad, item);
+ }
+
+ cd->popup_activate = EINA_FALSE;
+ evas_object_del(cd->popup_conform);
+ evas_object_del(cd->popup_win);
+}
+
+static void _create_cbhm_popup(AppData *ad, PopupStyle popup_style, Elm_Object_Item *gitem)
+{
+ if (ad == NULL) return;
+
+ ClipdrawerData *cd = ad->clipdrawer;
+ Evas_Object *list;
+ Evas_Object *layout;
+ Evas_Object *btn1;
+ Evas_Object *btn2;
+ int w,h;
+ int rotations[4] = { 0, 90, 180, 270 };
+
+ if (cd->popup_activate == EINA_TRUE)
+ return;
+
+ cd->popup_activate = EINA_TRUE;
+
+ cd->popup_win = elm_win_add(NULL, "delete popup", ELM_WIN_MENU);
+ ecore_x_window_size_get(ecore_x_window_root_first_get(), &w, &h);
+ evas_object_resize(cd->popup_win, w, h);
+ elm_win_alpha_set(cd->popup_win, EINA_TRUE);
+ ecore_x_icccm_name_class_set(elm_win_xwindow_get(cd->popup_win),"APP_POPUP", "APP_POPUP");
+ set_focus_for_app_window(elm_win_xwindow_get(cd->popup_win) , EINA_FALSE);
+ set_transient_for(elm_win_xwindow_get(cd->popup_win), cd->x_main_win);
+ elm_win_wm_rotation_available_rotations_set(cd->popup_win, rotations, 4);
+ evas_object_show(cd->popup_win);
+
+ cd->popup_conform = elm_conformant_add(cd->popup_win);
+ evas_object_size_hint_weight_set(cd->popup_conform, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ elm_win_resize_object_add(cd->popup_win, cd->popup_conform);
+ evas_object_show(cd->popup_conform);
+
+ elm_win_conformant_set(cd->popup_win, EINA_TRUE);
+
+ cd->cbhm_popup = elm_popup_add(cd->popup_win);
+ if (popup_style != DELETE_ALL_POPUP)
+ {
+ elm_object_part_text_set(cd->cbhm_popup, "title,text", S_CLIPBOARD_OPTION);
+ evas_object_size_hint_weight_set(cd->cbhm_popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+ layout = elm_layout_add(cd->cbhm_popup);
+ elm_layout_theme_set(layout, "layout", "content", "menustyle");
+ evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+
+ list = elm_list_add(layout);
+ elm_object_style_set(list, "popup");
+ evas_object_size_hint_weight_set(list, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(list, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ evas_object_smart_callback_add(list, "selected", list_selected_cb, gitem);
+
+ if (popup_style == LOCK_POPUP)
+ elm_list_item_append(list, S_LOCK_TO_CLIPBOARD, NULL, NULL, NULL, NULL);
+ else
+ elm_list_item_append(list, S_UNLOCK_TO_CLIPBOARD, NULL, NULL, NULL, NULL);
+
+ elm_object_part_content_set(layout, "elm.swallow.content" , list);
+ elm_object_content_set(cd->cbhm_popup, layout);
+ }
+ else
+ {
+ elm_object_part_text_set(cd->cbhm_popup, "title,text", S_CLIPBOARD);
+ elm_object_text_set(cd->cbhm_popup, S_DELETE_ALL_Q);
+
+ btn1 = elm_button_add(cd->cbhm_popup);
+ elm_object_style_set(btn1, "popup_button/default");
+ elm_object_text_set(btn1, S_CANCEL);
+ elm_object_part_content_set(cd->cbhm_popup, "button1", btn1);
+ evas_object_smart_callback_add(btn1, "clicked", _cancel_btn_cb, ad);
+
+ btn2 = elm_button_add(cd->cbhm_popup);
+ elm_object_style_set(btn2, "popup_button/default");
+ elm_object_text_set(btn2, S_DELETE);
+ elm_object_part_content_set(cd->cbhm_popup, "button2", btn2);
+ evas_object_smart_callback_add(btn2, "clicked", _ok_btn_cb, ad);
+ }
+
+ evas_object_show(cd->cbhm_popup);
+}
+
+static void _grid_unrealized(void *data, Evas_Object *obj, void *event_info)
+{
+ Elm_Object_Item *gitem = (Elm_Object_Item *) event_info;
+
+ if (gitem)
+ elm_object_item_signal_callback_del(gitem, "mouse,clicked,1", "*", _grid_item_ly_clicked);
+}
+
+static void _grid_longpressed(void *data, Evas_Object *obj, void *event_info)
+{
+ Elm_Object_Item *gitem = (Elm_Object_Item *) event_info;
+ CNP_ITEM *item = elm_object_item_data_get(gitem);
+
+ if (!item->locked)
+ _create_cbhm_popup(data, LOCK_POPUP, gitem);
+ else
+ _create_cbhm_popup(data, UNLOCK_POPUP, gitem);
+}
+
+static void clipdrawer_ly_clicked(void *data, Evas_Object *obj, const char *emission, const char *source)
+{
+ AppData *ad = data;
+ ClipdrawerData *cd = ad->clipdrawer;
+
+ if (ad->clipdrawer->anim_status != STATUS_NONE)
+ return;
+
+ if (!SAFE_STRNCMP(source, EDJE_CLOSE_PART_PREFIX, SAFE_STRLEN(EDJE_CLOSE_PART_PREFIX)))
+ {
+ clipdrawer_lower_view(ad);
+ }
+ else if (!SAFE_STRNCMP(source, EDJE_DELETE_MODE_PREFIX, SAFE_STRLEN(EDJE_DELETE_MODE_PREFIX)))
+ {
+ _delete_mode_set(ad, !delete_mode);
+ }
+ else if (!SAFE_STRNCMP(source, EDJE_DELETE_ALL_BTN_PART_PREFIX, SAFE_STRLEN(EDJE_DELETE_ALL_BTN_PART_PREFIX)))
+ {
+ if ((item_count_get(ad, ATOM_INDEX_COUNT_ALL) - cd->locked_item_count) != 0)
+ _create_cbhm_popup(ad, DELETE_ALL_POPUP, NULL);
+ }
+ else
+ return;
+}
+static void set_focus_for_app_window(Ecore_X_Window x_main_win, Eina_Bool enable)
+{
+ CALLED();
+ Eina_Bool accepts_focus;
+ Ecore_X_Window_State_Hint initial_state;
+ Ecore_X_Pixmap icon_pixmap;
+ Ecore_X_Pixmap icon_mask;
+ Ecore_X_Window icon_window;
+ Ecore_X_Window window_group;
+ Eina_Bool is_urgent;
+
+ ecore_x_icccm_hints_get (x_main_win,
+ &accepts_focus, &initial_state, &icon_pixmap, &icon_mask, &icon_window, &window_group, &is_urgent);
+ ecore_x_icccm_hints_set (x_main_win,
+ enable, initial_state, icon_pixmap, icon_mask, icon_window, window_group, is_urgent);
+ DBG("set focus mode = %d", enable);
+}
+
+
+static void _ok_btn_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ AppData *ad = data;
+ ClipdrawerData *cd = ad->clipdrawer;
+
+ Elm_Object_Item *gitem = elm_gengrid_first_item_get(cd->gengrid);
+ while (gitem)
+ {
+ CNP_ITEM *gitem_data = elm_object_item_data_get(gitem);
+ gitem = elm_gengrid_item_next_get(gitem);
+
+ if(!gitem_data->locked)
+ item_delete_by_CNP_ITEM(ad, gitem_data);
+ }
+ if (item_count_get(ad, ATOM_INDEX_COUNT_ALL) == 0)
+ clipdrawer_lower_view(ad);
+ else
+ {
+ cd->popup_activate = EINA_FALSE;
+ evas_object_del(cd->popup_conform);
+ evas_object_del(cd->popup_win);
+ }
+
+}
+
+static void _cancel_btn_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ AppData *ad = data;
+ ClipdrawerData *cd = ad->clipdrawer;
+
+ cd->popup_activate = EINA_FALSE;
+ evas_object_del(cd->popup_conform);
+ evas_object_del(cd->popup_win);
+}
+
+static void _grid_item_ly_clicked(void *data, Elm_Object_Item *it, const char *emission, const char *source)
+{
+ CNP_ITEM *item = data;
+ AppData *ad = item->ad;
+ ClipdrawerData *cd = ad->clipdrawer;
+
+ if (cd->anim_status != STATUS_NONE)
+ return;
+
+ #define EDJE_DELBTN_PART_PREFIX "delbtn/img"
+ if (!SAFE_STRNCMP(source, EDJE_DELBTN_PART_PREFIX, SAFE_STRLEN(EDJE_DELBTN_PART_PREFIX)))
+ cd->delbtn_clicked = EINA_TRUE;
+}
+
+static Ecore_X_Window isf_ise_window_get()
+{
+ Ecore_X_Atom x_atom_isf_control = ecore_x_atom_get("_ISF_CONTROL_WINDOW");
+ Ecore_X_Atom x_atom_isf_ise = ecore_x_atom_get("_ISF_ISE_WINDOW");
+ Ecore_X_Window x_isf_control_win = 0;
+ Ecore_X_Window x_isf_ise_win = 0;
+ unsigned char *buf = NULL;
+ int num = 0;
+ int ret;
+
+ ret = ecore_x_window_prop_property_get(0, x_atom_isf_control, ECORE_X_ATOM_WINDOW, 0, &buf, &num);
+ if (ret && num)
+ memcpy(&x_isf_control_win, buf, sizeof(Ecore_X_Window));
+ if (buf)
+ free(buf);
+ if (!x_isf_control_win)
+ return 0;
+
+ ret = ecore_x_window_prop_property_get(x_isf_control_win, x_atom_isf_ise, ECORE_X_ATOM_WINDOW, 0, &buf, &num);
+ if (ret && num)
+ memcpy(&x_isf_ise_win, buf, sizeof(Ecore_X_Window));
+ if (buf)
+ free(buf);
+
+ return x_isf_ise_win;
+}
+
+void set_transient_for(Ecore_X_Window x_main_win, Ecore_X_Window x_active_win)
+{
+ ecore_x_icccm_transient_for_set(x_main_win, x_active_win);
+ ecore_x_event_mask_set(x_active_win,
+ ECORE_X_EVENT_MASK_WINDOW_PROPERTY |
+ ECORE_X_EVENT_MASK_WINDOW_CONFIGURE);
+}
+
+void unset_transient_for(Ecore_X_Window x_main_win)
+{
+ Ecore_X_Window x_transient_win = ecore_x_icccm_transient_for_get(x_main_win);
+
+ if (x_transient_win) {
+ ecore_x_event_mask_unset(x_transient_win,
+ ECORE_X_EVENT_MASK_WINDOW_PROPERTY |
+ ECORE_X_EVENT_MASK_WINDOW_CONFIGURE);
+ ecore_x_icccm_transient_for_unset(x_main_win);
+ }
+}
+
+void setting_win(Ecore_X_Display *x_disp, Ecore_X_Window x_root_win, Ecore_X_Window x_main_win)
+{
+ CALLED();
+
+ Ecore_X_Atom ATOM_WINDOW_EFFECT_ENABLE = 0;
+ unsigned int effect_state = 0; // 0 : disabled effect // 1: enable effect
+
+ // disable window effect
+ ATOM_WINDOW_EFFECT_ENABLE = ecore_x_atom_get("_NET_CM_WINDOW_EFFECT_ENABLE");
+ if (ATOM_WINDOW_EFFECT_ENABLE)
+ {
+ ecore_x_window_prop_card32_set(x_main_win, ATOM_WINDOW_EFFECT_ENABLE, &effect_state, 1);
+ }
+ else
+ {
+ // error case
+ ERR("Could not get _NET_CM_WINDOW_EFFECT_ENABLE ATOM");
+ }
+
+ ecore_x_icccm_name_class_set(x_main_win, "NORMAL_WINDOW", "NORMAL_WINDOW");
+
+ set_focus_for_app_window(x_main_win, EINA_FALSE);
+ ecore_x_window_prop_property_set(
+ x_root_win, ecore_x_atom_get("CBHM_ELM_WIN"),
+ ECORE_X_ATOM_WINDOW, 32, &x_main_win, 1);
+ ecore_x_flush();
+}
+
+Evas_Object *create_win(ClipdrawerData *cd, const char *name)
+{
+ CALLED();
+
+ Evas_Object *win = elm_win_add(NULL, name, ELM_WIN_UTILITY);
+ if (!win)
+ {
+ ERR("elm_win_add return NULL");
+ return NULL;
+ }
+ elm_win_title_set(win, name);
+ elm_win_borderless_set(win, EINA_TRUE);
+ ecore_x_window_size_get(ecore_x_window_root_first_get(), &cd->root_w, &cd->root_h);
+ DBG("root_w: %d, root_h: %d", cd->root_w, cd->root_h);
+ //evas_object_resize(win, cd->root_w, cd->root_h);
+
+ elm_config_scale_set((double)cd->root_w/DEFAULT_WIDTH);
+ return win;
+}
+
+static void set_sliding_win_geometry(AppData *ad)
+{
+ CALLED();
+ ClipdrawerData *cd = ad->clipdrawer;
+ Evas_Coord x, y, w, h;
+ int angle = elm_win_rotation_get(cd->main_win);
+
+ if (!ad->x_active_win)
+ {
+ ERR("x_active_win is NULL");
+ return;
+ }
+
+ if (angle == 90 || angle == 270)
+ {
+ h = cd->landscape_height;
+ x = 0;
+ y = cd->root_w - h;
+ w = cd->root_h;
+ }
+ else
+ {
+ h = cd->height;
+ x = 0;
+ y = cd->root_h - h;
+ w = cd->root_w;
+ }
+
+ if (!h)
+ w = 0;
+
+ DBG("[CBHM] change degree geometry... (%d, %d, %d x %d)", x, y, w, h);
+
+ ecore_x_e_illume_clipboard_geometry_set(ad->x_active_win, x, y, w, h);
+}
+
+void set_rotation_to_clipdrawer(AppData *ad)
+{
+ CALLED();
+ ClipdrawerData *cd = ad->clipdrawer;
+ int angle = elm_win_rotation_get(cd->main_win);
+ int x, y, w, h;
+
+ if (angle == 180) // reverse
+ {
+ h = cd->height;
+ x = 0;
+ y = 0;
+ w = cd->root_w;
+ }
+ else if (angle == 90) // right rotate
+ {
+ h = cd->landscape_height;
+ x = cd->root_w - h;
+ y = 0;
+ w = cd->root_h;
+ }
+ else if (angle == 270) // left rotate
+ {
+ h = cd->landscape_height;
+ x = 0;
+ y = 0;
+ w = cd->root_h;
+ }
+ else // angle == 0
+ {
+ h = cd->height;
+ x = 0;
+ y = cd->root_h - h;
+ w = cd->root_w;
+ }
+
+ evas_object_resize(cd->main_win, w, h);
+ evas_object_move(cd->main_win, x, y);
+ set_sliding_win_geometry(ad);
+}
+/*
+static Eina_Bool _get_anim_pos(ClipdrawerData *cd, int *sp, int *ep)
+{
+ if (!sp || !ep)
+ return EINA_FALSE;
+
+ int angle = cd->o_degree;
+ int anim_start, anim_end;
+
+ if (angle == 180) // reverse
+ {
+ anim_start = -(cd->root_h - cd->height);
+ anim_end = 0;
+ }
+ else if (angle == 90) // right rotate
+ {
+ anim_start = cd->root_w;
+ anim_end = anim_start - cd->landscape_height;
+ }
+ else if (angle == 270) // left rotate
+ {
+ anim_start = -(cd->root_w - cd->landscape_height);
+ anim_end = 0;
+ }
+ else // angle == 0
+ {
+ anim_start = cd->root_h;
+ anim_end = anim_start - cd->height;
+ }
+
+ *sp = anim_start;
+ *ep = anim_end;
+ return EINA_TRUE;
+}
+
+static Eina_Bool _do_anim_delta_pos(ClipdrawerData *cd, int sp, int ep, int ac, int *dp)
+{
+ if (!dp)
+ return EINA_FALSE;
+
+ int angle = cd->o_degree;
+ int delta;
+ double posprop;
+ posprop = 1.0*ac/ANIM_DURATION;
+
+ if (angle == 180) // reverse
+ {
+ delta = (int)((ep-sp)*posprop);
+ evas_object_move(cd->main_win, 0, sp+delta);
+ }
+ else if (angle == 90) // right rotate
+ {
+ delta = (int)((ep-sp)*posprop);
+ evas_object_move(cd->main_win, sp+delta, 0);
+ }
+ else if (angle == 270) // left rotate
+ {
+ delta = (int)((ep-sp)*posprop);
+ evas_object_move(cd->main_win, sp+delta, 0);
+ }
+ else // angle == 0
+ {
+ delta = (int)((sp-ep)*posprop);
+ evas_object_move(cd->main_win, 0, sp-delta);
+ }
+
+ *dp = delta;
+
+ return EINA_TRUE;
+}
+
+static void stop_animation(AppData *ad)
+{
+ CALLED();
+ ClipdrawerData *cd = ad->clipdrawer;
+ cd->anim_status = STATUS_NONE;
+ if (cd->anim_timer)
+ {
+ ecore_timer_del(cd->anim_timer);
+ cd->anim_timer = NULL;
+ }
+
+ set_sliding_win_geometry(ad);
+}
+
+static Eina_Bool anim_pos_calc_cb(void *data)
+{
+ AppData *ad = data;
+ ClipdrawerData *cd = ad->clipdrawer;
+ int anim_start, anim_end, delta;
+
+ _get_anim_pos(cd, &anim_start, &anim_end);
+
+ if (cd->anim_status == SHOW_ANIM)
+ {
+ if (cd->anim_count > ANIM_DURATION)
+ {
+ cd->anim_count = ANIM_DURATION;
+ stop_animation(ad);
+ return EINA_FALSE;
+ }
+ _do_anim_delta_pos(cd, anim_start, anim_end, cd->anim_count, &delta);
+ if (cd->anim_count == 1)
+ evas_object_show(cd->main_win);
+ cd->anim_count++;
+ }
+ else if (cd->anim_status == HIDE_ANIM)
+ {
+ if (cd->anim_count < 0)
+ {
+ cd->anim_count = 0;
+ elm_object_signal_emit(cd->main_layout, "elm,state,hide,historyitems", "elm");
+ edje_object_message_signal_process(elm_layout_edje_get(cd->main_layout));
+ evas_object_hide(cd->main_win);
+ elm_win_lower(cd->main_win);
+ unset_transient_for(cd->x_main_win);
+ stop_animation(ad);
+ _delete_mode_set(ad, EINA_FALSE);
+ return EINA_FALSE;
+ }
+ _do_anim_delta_pos(cd, anim_start, anim_end, cd->anim_count, &delta);
+ cd->anim_count--;
+ }
+ else
+ {
+ stop_animation(ad);
+ return EINA_FALSE;
+ }
+
+ return EINA_TRUE;
+}
+
+static Eina_Bool clipdrawer_anim_effect(AppData *ad, AnimStatus atype)
+{
+ CALLED();
+ ClipdrawerData *cd = ad->clipdrawer;
+ if (atype == cd->anim_status)
+ {
+ WRN("Warning: Animation effect is already in progress.");
+ return EINA_FALSE;
+ }
+
+ cd->anim_status = atype;
+
+ if (cd->anim_timer)
+ ecore_timer_del(cd->anim_timer);
+ cd->anim_timer = ecore_timer_add(ANIM_FLOPS, anim_pos_calc_cb, ad);
+
+ return EINA_TRUE;
+}
+*/
+static Eina_Bool timer_cb(void *data)
+{
+ ClipdrawerData *cd = data;
+ /* If the gengrid has some images, evas would have some heavy works for image drawings.
+ In this case, window would be delayed in showing up.
+ In order to avoid this problem,
+ we show the gengrid after window is shown.
+ */
+ elm_object_signal_emit(cd->main_layout, "elm,state,show,historyitems", "elm");
+ return ECORE_CALLBACK_CANCEL;
+}
+
+void rotate_cb(void *data, Evas_Object * obj, void *event)
+{
+ if (!data) return;
+
+ AppData *ad= data;
+
+ set_rotation_to_clipdrawer(ad);
+}
+
+void clipdrawer_activate_view(AppData* ad)
+{
+ CALLED();
+ ClipdrawerData *cd = ad->clipdrawer;
+ Ecore_X_Window x_transient_win = ad->x_active_win;
+ Ecore_X_Window x_isf_ise_win;
+ Ecore_X_Virtual_Keyboard_State isf_ise_state;
+ int rotations[4] = { 0, 90, 180, 270 };
+
+ if(cd->main_layout)
+ {
+ if ((item_count_get(ad, ATOM_INDEX_COUNT_ALL) - cd->locked_item_count) == 0)
+ elm_object_signal_emit(cd->main_layout, "elm,state,disable,del", "elm");
+
+ elm_object_part_text_set(cd->main_layout, "panel_title", S_CLIPBOARD);
+ elm_object_part_text_set(cd->main_layout, "panel_function_delete_all", S_DELETE_ALL);
+ elm_object_part_text_set(cd->main_layout, "panel_function_delete", S_DELETE);
+ }
+
+ if (cd->main_win)
+ {
+ isf_ise_state = ecore_x_e_virtual_keyboard_state_get(ad->x_active_win);
+ if (isf_ise_state == ECORE_X_VIRTUAL_KEYBOARD_STATE_ON) {
+ x_isf_ise_win = isf_ise_window_get();
+ if (x_isf_ise_win)
+ x_transient_win = x_isf_ise_win;
+ }
+ set_transient_for(cd->x_main_win, x_transient_win);
+
+ elm_win_wm_rotation_available_rotations_set(cd->main_win, rotations, 4);
+ evas_object_smart_callback_add(cd->main_win, "wm,rotation,changed", rotate_cb, ad);
+ _delete_mode_set(ad, EINA_FALSE);
+ set_rotation_to_clipdrawer(ad);
+ evas_object_show(cd->main_win);
+ elm_win_activate(cd->main_win);
+ ecore_x_e_illume_clipboard_state_set(ad->x_active_win, ECORE_X_ILLUME_CLIPBOARD_STATE_ON);
+ utilx_grab_key(ad->x_disp, cd->x_main_win, KEY_END, TOP_POSITION_GRAB);
+ utilx_grab_key(ad->x_disp, cd->x_main_win, KEY_HOME, SHARED_GRAB);
+ ecore_timer_add(0.125, timer_cb, cd); //0.125 is experimentally decided.
+ }
+}
+
+static Eina_Bool clipdrawer_lower_view_timer_cb(void *data)
+{
+ CALLED();
+ AppData *ad = (AppData *)data;
+ ClipdrawerData *cd = ad->clipdrawer;
+
+ cd->lower_view_timer = NULL;
+
+ if (cd->main_win)
+ {
+ elm_object_signal_emit(cd->main_layout, "elm,state,hide,historyitems", "elm");
+ edje_object_message_signal_process(elm_layout_edje_get(cd->main_layout));
+ evas_object_hide(cd->main_win);
+ elm_win_lower(cd->main_win);
+ unset_transient_for(cd->x_main_win);
+ _delete_mode_set(ad, EINA_FALSE);
+ }
+
+ return ECORE_CALLBACK_CANCEL;
+}
+
+void clipdrawer_lower_view(AppData* ad)
+{
+ CALLED();
+ ClipdrawerData *cd = ad->clipdrawer;
+
+ if (cd->lower_view_timer) return;
+
+ if (cd->main_win)
+ {
+ ecore_x_e_illume_clipboard_state_set(ad->x_active_win, ECORE_X_ILLUME_CLIPBOARD_STATE_OFF);
+ ecore_x_e_illume_clipboard_geometry_set(ad->x_active_win, 0, 0, 0, 0);
+ utilx_ungrab_key(ad->x_disp, cd->x_main_win, KEY_END);
+ utilx_ungrab_key(ad->x_disp, cd->x_main_win, KEY_HOME);
+
+ if(cd->popup_activate)
+ {
+ cd->popup_activate = EINA_FALSE;
+ evas_object_del(cd->popup_conform);
+ evas_object_del(cd->popup_win);
+ }
+ }
+
+ cd->lower_view_timer = ecore_timer_add(TIME_DELAY_LOWER_VIEW, clipdrawer_lower_view_timer_cb, ad);
+}
+
+void _delete_mode_set(AppData* ad, Eina_Bool del_mode)
+{
+ ClipdrawerData *cd = ad->clipdrawer;
+ Elm_Object_Item *gitem = elm_gengrid_first_item_get(cd->gengrid);
+ CNP_ITEM *item = NULL;
+
+ if (gitem)
+ delete_mode = del_mode;
+ else
+ delete_mode = EINA_FALSE;
+
+ if(!cd->main_layout)
+ return;
+ if (delete_mode)
+ {
+ elm_object_part_text_set(cd->main_layout, "panel_function_delete", S_DONE);
+ }
+ else
+ {
+ elm_object_part_text_set(cd->main_layout, "panel_function_delete", S_DELETE);
+ }
+
+ while (gitem)
+ {
+ item = elm_object_item_data_get(gitem);
+ if(!item)
+ return;
+
+ if (!item->locked)
+ {
+ if (delete_mode)
+ elm_object_item_signal_emit(gitem, "elm,state,show,delbtn", "elm");
+ else
+ elm_object_item_signal_emit(gitem, "elm,state,hide,delbtn", "elm");
+ }
+
+ gitem = elm_gengrid_item_next_get(gitem);
+ }
+}
--- /dev/null
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 _CLIPDRAWER_H_
+#define _CLIPDRAWER_H_
+
+#include <Ecore_X.h>
+#include <Elementary.h>
+typedef enum _AnimStatus AnimStatus;
+enum _AnimStatus {
+ STATUS_NONE = 0,
+ SHOW_ANIM,
+ HIDE_ANIM
+};
+
+typedef enum _PopupStyle PopupStyle;
+enum _PopupStyle {
+ DELETE_ALL_POPUP = 0,
+ LOCK_POPUP,
+ UNLOCK_POPUP
+};
+
+struct _ClipdrawerData {
+ Evas_Object *main_win;
+ Evas_Object *gengrid;
+ Evas_Object *main_layout;
+ Elm_Gengrid_Item_Class gic_text;
+ Elm_Gengrid_Item_Class gic_image;
+ Elm_Gengrid_Item_Class gic_combined;
+ Evas_Object *popup;
+ Evas_Object *popup_win;
+ Evas_Object *popup_conform;
+ Evas_Object *cbhm_popup;
+ Evas *evas;
+ Ecore_Event_Handler *keydown_handler;
+ Ecore_Timer *anim_timer;
+ Elm_Gengrid_Item_Class gic;
+ Ecore_Timer *lower_view_timer;
+ int locked_item_count;
+ Ecore_X_Window x_main_win;
+
+ int o_degree;
+
+ int root_w;
+ int root_h;
+
+ int height;
+ int landscape_height;
+ int grid_item_bg_w;
+ int grid_item_bg_h;
+ int grid_image_item_w;
+ int grid_image_item_h;
+
+ AnimStatus anim_status;
+ int anim_count;
+ Eina_Bool popup_activate:1;
+ Eina_Bool paste_text_only:1;
+ Eina_Bool item_clicked:1;
+ Eina_Bool delbtn_clicked:1;
+ Eina_Bool http_path:1;
+};
+
+#include "cbhm.h"
+
+Eina_Bool delete_mode;
+
+void set_rotation_to_clipdrawer(AppData *ad);
+void clipdrawer_activate_view(AppData* ad);
+void clipdrawer_lower_view(AppData* ad);
+ClipdrawerData *init_clipdrawer(AppData *ad);
+void depose_clipdrawer(ClipdrawerData *cd);
+void _delete_mode_set(AppData *ad, Eina_Bool del_mode);
+void clipdrawer_paste_textonly_set(AppData *ad, Eina_Bool textonly);
+
+#endif // _CLIPDRAWER_H_
--- /dev/null
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 <notification.h>
+#include <time.h>
+#include "item_manager.h"
+#include "clipdrawer.h"
+
+static void show_notification(CNP_ITEM *item, const char *msg)
+{
+ if (item && item->data && item->len > 0)
+ notification_status_message_post(msg);
+}
+
+static void item_free(CNP_ITEM *item, Eina_Bool storage)
+{
+ CALLED();
+ if (!item)
+ {
+ ERR("WRONG PARAMETER in %s", __func__);
+ return;
+ }
+ // remove gengrid
+ if (item->ad)
+ {
+ if (item->ad->draw_item_del)
+ item->ad->draw_item_del(item->ad, item);
+ if (storage && item->ad->storage_item_del)
+ item->ad->storage_item_del(item->ad, item);
+ }
+
+ if (item->data)
+ FREE(item->data);
+
+ if (item->file)
+ {
+ ecore_file_remove(item->file);
+ FREE(item->file);
+ }
+
+ if (item->ad)
+ {
+ if (item->ad->clip_selected_item == item)
+ item->ad->clip_selected_item = NULL;
+ }
+ FREE(item);
+}
+
+CNP_ITEM *item_add_by_CNP_ITEM(AppData *ad, CNP_ITEM *item, Eina_Bool storage, Eina_Bool show_msg)
+{
+ if (!ad || !item)
+ {
+ ERR("WRONG PARAMETER in %s", __func__);
+ return NULL;
+ }
+ ClipdrawerData *cd = ad->clipdrawer;
+ if ((item_count_get(ad, ATOM_INDEX_COUNT_ALL) - cd->locked_item_count) == 0)
+ elm_object_signal_emit(cd->main_layout, "elm,state,enable,del", "elm");
+ if (!item)
+ {
+ ERR("WRONG PARAMETER in %s, ad: 0x%p, item: 0x%p", __func__, ad, item);
+ return NULL;
+ }
+ item->ad = ad;
+
+ Eina_Bool duplicated = EINA_FALSE;
+
+ ad->item_list = eina_list_prepend(ad->item_list, item);
+ if (ad && ad->draw_item_add)
+ duplicated = ad->draw_item_add(ad, item);
+ if (storage && ad && ad->storage_item_add)
+ ad->storage_item_add(ad, item);
+
+ while (ITEM_CNT_MAX < eina_list_count(ad->item_list))
+ {
+ CNP_ITEM *ditem = eina_list_nth(ad->item_list, ITEM_CNT_MAX);
+
+ ad->item_list = eina_list_remove(ad->item_list, ditem);
+ item_free(ditem, EINA_TRUE);
+ }
+
+ slot_property_set(ad, -1);
+ slot_item_count_set(ad);
+
+ if (show_msg)
+ {
+ if (duplicated)
+ show_notification(item, S_EXIST);
+ else
+ show_notification(item, S_COPY);
+ }
+
+ return item;
+}
+
+static void downloaded_cb(void *data, const char *file_, int status)
+{
+ CNP_ITEM *item = data;
+
+ if (status == 200)
+ {
+ item->img_from_web = EINA_TRUE;
+ DBG("image download success\n");
+ }
+ else
+ {
+ item->img_from_web = EINA_FALSE;
+ DBG("image download fail\n");
+ }
+}
+
+static Eina_Bool get_network_state()
+{
+ int net_conf;
+ int net_status;
+ vconf_get_int(VCONFKEY_NETWORK_CONFIGURATION_CHANGE_IND, &net_conf);
+ vconf_get_int(VCONFKEY_NETWORK_STATUS, &net_status);
+ DBG("current network configuration (%d), Network status (%d)\n", net_conf, net_status);
+
+ if (net_conf == 0 && net_status == VCONFKEY_NETWORK_OFF)
+ {
+ DBG("No wifi and No 3G\n");
+ return EINA_FALSE;
+ }
+ return EINA_TRUE;
+}
+
+static void image_name_get(char *filename)
+{
+ time_t tim;
+ struct tm *now;
+
+ //file path get
+ tim = time(NULL);
+ now = localtime(&tim);
+
+ sprintf(filename, "fromweb-%d%02d%02d%02d%02d%02d%s",
+ now->tm_year + 1900, now->tm_mon + 1, now->tm_mday,
+ now->tm_hour, now->tm_min, now->tm_sec, ".jpg");
+}
+
+char* html_img_save_frm_local(char *copied_path)
+{
+ char *html_img_url = NULL;
+ char html_img_name[PATH_MAX];
+ int size_path = 0;
+
+ size_path = snprintf(NULL, 0, "%s", copied_path) + 1;
+ html_img_url = MALLOC(sizeof(char) * size_path);
+ snprintf(html_img_url, size_path, "%s", copied_path);
+ DBG("html_img_url = %s\n", html_img_url);
+
+ image_name_get(html_img_name);
+ DBG("copied file name = %s\n", html_img_name);
+
+ size_path = snprintf(NULL, 0, COPIED_DATA_STORAGE_DIR"/%s", html_img_name) + 1;
+ copied_path = MALLOC(sizeof(char) * size_path);
+ snprintf(copied_path, size_path, COPIED_DATA_STORAGE_DIR"/%s", html_img_name);
+ DBG("copied path = %s\n", copied_path);
+ ecore_file_cp(html_img_url, copied_path);
+ FREE(html_img_url);
+ return copied_path;
+}
+
+char* html_img_save(char *copied_path, CNP_ITEM *item)
+{
+ char *html_img_url = NULL;
+ char html_img_name[PATH_MAX];
+ int size_path = 0;
+ int ret;
+ Eina_Bool is_network_enable;
+
+ is_network_enable = get_network_state();
+ DBG("network enable = %d\n", is_network_enable);
+ if (is_network_enable)
+ {
+ size_path = snprintf(NULL, 0, "http:/""%s", copied_path) + 1;
+ html_img_url = MALLOC(sizeof(char) * size_path);
+ snprintf(html_img_url, size_path, "http:/""%s", copied_path);
+ DBG("html_img_url = %s\n", html_img_url);
+
+ image_name_get(html_img_name);
+ DBG("copied file name = %s\n", html_img_name);
+
+ size_path = snprintf(NULL, 0, COPIED_DATA_STORAGE_DIR"/%s", html_img_name) + 1;
+ copied_path = MALLOC(sizeof(char) * size_path);
+ snprintf(copied_path, size_path, COPIED_DATA_STORAGE_DIR"/%s", html_img_name);
+ DBG("copied path = %s\n", copied_path);
+ ret = ecore_file_download_full(html_img_url, copied_path, downloaded_cb, NULL, item, NULL, NULL);
+ if(ret)
+ DBG("Download start");
+
+ FREE(html_img_url);
+ return copied_path;
+ }
+ return NULL;
+}
+
+CNP_ITEM *item_add_by_data(AppData *ad, Ecore_X_Atom type, void *data, int len, Eina_Bool show_msg)
+{
+ char *entry_text = NULL;
+ char *orig_path = NULL;
+ char *copied_path = NULL;
+ const char *file_name = NULL;
+ int size_path = 0;
+
+ if (!ad || !data)
+ {
+ ERR("WRONG PARAMETER in %s", __func__);
+ return NULL;
+ }
+ CNP_ITEM *item;
+ item = CALLOC(1, sizeof(CNP_ITEM));
+
+ if (!item)
+ return NULL;
+
+ item->type_index = atom_type_index_get(ad, type);
+
+ if (item->type_index == ATOM_INDEX_TEXT)
+ item->gitem_style = GRID_ITEM_STYLE_TEXT;
+ else if (item->type_index == ATOM_INDEX_HTML)
+ {
+ copied_path = string_for_image_path_get(ad, ATOM_INDEX_HTML, data);
+ DBG("found img path in html tags = %s\n", copied_path);
+
+ if (copied_path && ad->clipdrawer->http_path)
+ copied_path = html_img_save(copied_path, item);
+ else if (copied_path)
+ copied_path = html_img_save_frm_local(copied_path);
+
+ entry_text = string_for_entry_get(ad, ATOM_INDEX_HTML, data);
+ DBG("entry_text = %s\n copied_path = %s\n", entry_text, copied_path);
+ }
+ else if (item->type_index == ATOM_INDEX_EFL)
+ {
+ entry_text = string_for_entry_get(ad, ATOM_INDEX_EFL, data);
+ copied_path = string_for_image_path_get(ad, ATOM_INDEX_EFL, data);
+ }
+ else if (item->type_index == ATOM_INDEX_IMAGE)
+ {
+ orig_path = data;
+ file_name = ecore_file_file_get(orig_path);
+ size_path = snprintf(NULL, 0, COPIED_DATA_STORAGE_DIR"/%s", file_name) + 1;
+ copied_path = MALLOC(sizeof(char) * size_path);
+ if (copied_path)
+ {
+ snprintf(copied_path, size_path, COPIED_DATA_STORAGE_DIR"/%s", file_name);
+ data = copied_path;
+ len = SAFE_STRLEN(copied_path) + 1;
+ }
+ // Reallocate memory for item->file
+ copied_path = MALLOC(sizeof(char) * len);
+ if (copied_path)
+ snprintf(copied_path, len, "%s", (char *)data);
+ }
+
+ if (copied_path)
+ {
+ item->file = copied_path;
+ item->file_len = SAFE_STRLEN(copied_path) + 1;
+ }
+
+ if (entry_text && copied_path)
+ {
+ item->gitem_style = GRID_ITEM_STYLE_COMBINED;
+ FREE(entry_text);
+ }
+ else if (entry_text)
+ {
+ item->gitem_style = GRID_ITEM_STYLE_TEXT;
+ FREE(entry_text);
+ }
+ else if (copied_path)
+ item->gitem_style = GRID_ITEM_STYLE_IMAGE;
+
+ item->data = data;
+ item->len = len;
+
+ item = item_add_by_CNP_ITEM(ad, item, EINA_TRUE, show_msg);
+
+ if ((item->type_index == ATOM_INDEX_IMAGE) && orig_path && copied_path)
+ {
+ if (!ecore_file_cp(orig_path, copied_path))
+ DBG("ecore_file_cp fail!");
+ FREE(orig_path);
+ }
+
+ // Set vconf value to notify copy event to popsync application
+ vconf_set_str(VCONFKEY_POPSYNC_COPY_EVENT_SET_KEY, "1");
+ return item;
+}
+
+CNP_ITEM *item_get_by_index(AppData *ad, int index)
+{
+ if (!ad || eina_list_count(ad->item_list) <= index || 0 > index)
+ {
+ ERR("WRONG PARAMETER in %s", __func__);
+ return NULL;
+ }
+ CNP_ITEM *item;
+ item = eina_list_nth(ad->item_list, index);
+ return item;
+}
+
+CNP_ITEM *item_get_by_data(AppData *ad, void *data, int len)
+{
+ CNP_ITEM *item;
+ Eina_List *l;
+
+ if (!ad || !data)
+ {
+ ERR("WRONG PARAMETER in %s", __func__);
+ return NULL;
+ }
+
+ EINA_LIST_FOREACH(ad->item_list, l, item)
+ {
+ if (item && (item->len == len) && (!SAFE_STRNCMP(item->data, data, len)))
+ return item;
+ }
+
+ return NULL;
+}
+
+CNP_ITEM *item_get_last(AppData *ad)
+{
+ if (!ad)
+ {
+ ERR("WRONG PARAMETER in %s", __func__);
+ return NULL;
+ }
+ return eina_list_data_get(ad->item_list);
+}
+
+void item_delete_by_CNP_ITEM(AppData *ad, CNP_ITEM *item)
+{
+ CALLED();
+ ClipdrawerData *cd = ad->clipdrawer;
+
+ if ((item_count_get(ad, ATOM_INDEX_COUNT_ALL) - cd->locked_item_count) == 1)
+ {
+ elm_object_signal_emit(cd->main_layout, "elm,state,disable,del", "elm");
+ _delete_mode_set(ad, EINA_FALSE);
+ }
+ if (!item)
+ {
+ ERR("WRONG PARAMETER in %s", __func__);
+ return;
+ }
+ ad->item_list = eina_list_remove(ad->item_list, item);
+ item_free(item, EINA_TRUE);
+ slot_property_set(ad, -1);
+ slot_item_count_set(ad);
+}
+
+void item_delete_by_data(AppData *ad, void *data, int len)
+{
+ CALLED();
+ if (!ad || !data)
+ {
+ ERR("WRONG PARAMETER in %s", __func__);
+ return;
+ }
+ CNP_ITEM *item;
+ item = item_get_by_data(ad, data, len);
+ item_delete_by_CNP_ITEM(ad, item);
+}
+
+void item_delete_by_index(AppData *ad, int index)
+{
+ CALLED();
+ if (!ad || eina_list_count(ad->item_list) <= index || 0 > index)
+ {
+ ERR("WRONG PARAMETER in %s", __func__);
+ return;
+ }
+ CNP_ITEM *item;
+ item = item_get_by_index(ad, index);
+ item_delete_by_CNP_ITEM(ad, item);
+}
+
+void item_clear_all(AppData *ad)
+{
+ CALLED();
+ while(ad->item_list)
+ {
+ CNP_ITEM *item = eina_list_data_get(ad->item_list);
+ ad->item_list = eina_list_remove(ad->item_list, item);
+ if (item)
+ item_free(item, EINA_FALSE);
+ }
+}
+
+int item_count_get(AppData *ad, int atom_index)
+{
+ int icount = 0;
+ Eina_List *l;
+ CNP_ITEM *item;
+
+ if (!ad || !ad->item_list) return 0;
+
+ // Get the number of all items
+ if (atom_index == ATOM_INDEX_COUNT_ALL)
+ {
+ icount = eina_list_count(ad->item_list);
+ }
+ // Get the number of text type items
+ else if (atom_index == ATOM_INDEX_COUNT_TEXT)
+ {
+ EINA_LIST_FOREACH(ad->item_list, l, item)
+ {
+ if (item &&
+ (item->type_index == ATOM_INDEX_TEXT ||
+ item->type_index == ATOM_INDEX_HTML ||
+ item->type_index == ATOM_INDEX_EFL))
+ icount++;
+ }
+ }
+ // Get the number of image type items
+ else if (atom_index == ATOM_INDEX_COUNT_IMAGE)
+ {
+ EINA_LIST_FOREACH(ad->item_list, l, item)
+ {
+ if (item &&
+ (item->type_index == ATOM_INDEX_IMAGE))
+ icount++;
+ }
+ }
+
+ return icount;
+}
--- /dev/null
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 _ITEM_MANAGER_H_
+#define _ITEM_MANAGER_H_
+
+#include "cbhm.h"
+#include <vconf.h>
+#include <vconf-internal-popsync-keys.h>
+
+#define MULTI_(s) dgettext(PACKAGE, s)
+#define S_CLIPBOARD MULTI_("IDS_COM_BODY_CLIPBOARD")
+#define S_DELETE MULTI_("IDS_COM_BODY_DELETE")
+#define S_DONE MULTI_("IDS_COM_BODY_DONE")
+#define S_COPY MULTI_("IDS_COM_POP_COPIED_TO_CLIPBOARD")
+#define S_EXIST MULTI_("IDS_COM_POP_ALREADY_EXISTS")
+#define S_DELETE_ALL MULTI_("IDS_COM_BODY_DELETE_ALL")
+#define S_DELETE_ALL_Q MULTI_("IDS_COM_POP_DELETE_ALL_Q")
+#define S_CANCEL MULTI_("IDS_COM_BUTTON_CANCEL")
+#define S_CLOSE MULTI_("IDS_COM_BODY_CLOSE")
+#define S_CLIPBOARD_OPTION MULTI_("IDS_COM_HEADER_CLIPBOARD_OPTIONS")
+#define S_DELETE_FROM_CLIPBOARD MULTI_("IDS_COM_BODY_DELETE_FROM_CLIPBOARD")
+#define S_LOCK_TO_CLIPBOARD MULTI_("IDS_COM_BODY_LOCK_TO_CLIPBOARD")
+#define S_UNLOCK_TO_CLIPBOARD MULTI_("IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD")
+
+enum GRID_ITEM_STYLE {
+ GRID_ITEM_STYLE_TEXT = 0,
+ GRID_ITEM_STYLE_IMAGE = 1,
+ GRID_ITEM_STYLE_COMBINED = 2,
+ GRID_ITEM_STYLE_MAX = 3
+};
+
+struct _CNP_ITEM {
+ int type_index;
+ void *data;
+ size_t len;
+ void *file;
+ size_t file_len;
+ int gitem_style;
+ Eina_Bool img_from_web;
+ Elm_Object_Item *gitem;
+ Eina_Bool locked;
+ AppData *ad;
+};
+
+CNP_ITEM *item_add_by_CNP_ITEM(AppData *ad, CNP_ITEM *item, Eina_Bool storage, Eina_Bool show_msg);
+CNP_ITEM *item_add_by_data(AppData *ad, Ecore_X_Atom type, void *data, int len, Eina_Bool show_msg);
+
+CNP_ITEM *item_get_by_index(AppData *ad, int index);
+CNP_ITEM *item_get_by_data(AppData *ad, void *data, int len);
+CNP_ITEM *item_get_last(AppData *ad);
+
+void item_delete_by_CNP_ITEM(AppData *ad, CNP_ITEM *item);
+void item_delete_by_data(AppData *ad, void *data, int len);
+void item_delete_by_index(AppData *ad, int index);
+void item_clear_all(AppData *ad);
+int item_count_get(AppData *ad, int atom_index);
+
+#endif /*_ITEM_MANAGER_H_*/
+
--- /dev/null
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 <appcore-efl.h>
+#include <Ecore_X.h>
+#include <systemd/sd-daemon.h>
+#include <X11/Xlib.h>
+#include <X11/Xatom.h>
+#include <X11/extensions/XInput.h>
+#include <X11/extensions/XInput2.h>
+#include <X11/extensions/XI2.h>
+#include <X11/extensions/XIproto.h>
+
+#include "cbhm.h"
+
+#define CLIPBOARD_MANAGER_WINDOW_TITLE_STRING "X11_CLIPBOARD_HISTORY_MANAGER"
+#define ATOM_CLIPBOARD_MANAGER_NAME "CLIPBOARD_MANAGER"
+
+static AppData *g_main_ad = NULL;
+
+int _log_domain = -1;
+
+void *d_malloc(const char *func, int line, size_t size)
+{
+ char *m = malloc(size);
+ DBG("in %s, %d: 0x%p = malloc(%d)", func, line, m, size);
+ return m;
+}
+void *d_calloc(const char *func, int line, size_t n, size_t size)
+{
+ char *m = calloc(n, size);
+ DBG("in %s, %d: 0x%p = calloc(%d)", func, line, m, size);
+ return m;
+}
+void d_free(const char *func, int line, void *m)
+{
+ DBG("in %s, %d: free(0x%p)", func, line, m);
+ free(m);
+}
+
+static Eina_Bool setClipboardManager(AppData *ad)
+{
+ if (!ad) return EINA_FALSE;
+
+ if(!ecore_file_mkpath(COPIED_DATA_STORAGE_DIR))
+ DBG("ecore_file_mkpath fail");
+
+ ad->x_disp = ecore_x_display_get();
+ DBG("x_disp: 0x%p", ad->x_disp);
+ if (ad->x_disp)
+ {
+ Ecore_X_Atom clipboard_manager_atom = XInternAtom(ad->x_disp, ATOM_CLIPBOARD_MANAGER_NAME, False);
+ Ecore_X_Window clipboard_manager = XGetSelectionOwner(ad->x_disp, clipboard_manager_atom);
+ DBG("clipboard_manager_window: 0x%x", clipboard_manager);
+ if (!clipboard_manager)
+ {
+ ad->x_root_win = DefaultRootWindow(ad->x_disp);
+ if (ad->x_root_win)
+ {
+ ad->x_event_win = ecore_x_window_new(ad->x_root_win, 0, 0, 19, 19);
+ DBG("x_event_win: 0x%x", ad->x_event_win);
+ if (ad->x_event_win)
+ {
+ XSetSelectionOwner(ad->x_disp, clipboard_manager_atom, ad->x_event_win, CurrentTime);
+ Ecore_X_Window clipboard_manager = XGetSelectionOwner(ad->x_disp, clipboard_manager_atom);
+ DBG("clipboard_manager: 0x%x", clipboard_manager);
+ if (ad->x_event_win == clipboard_manager)
+ {
+ return EINA_TRUE;
+ }
+ }
+ }
+ }
+ }
+ return EINA_FALSE;
+}
+
+static void set_x_window(Ecore_X_Window x_event_win, Ecore_X_Window x_root_win)
+{
+ ecore_x_netwm_name_set(x_event_win, CLIPBOARD_MANAGER_WINDOW_TITLE_STRING);
+ ecore_x_event_mask_set(x_event_win,
+ ECORE_X_EVENT_MASK_WINDOW_PROPERTY);
+ ecore_x_event_mask_set(x_root_win,
+ ECORE_X_EVENT_MASK_WINDOW_CONFIGURE);
+ ecore_x_window_prop_property_set(
+ x_root_win, ecore_x_atom_get("CBHM_XWIN"),
+ XA_WINDOW, 32, &x_event_win, 1);
+ ecore_x_flush();
+}
+
+static int app_create(void *data)
+{
+ AppData *ad = (AppData *)data;
+
+ ecore_x_init(ad->x_disp);
+ _log_domain = eina_log_domain_register("cbhm", EINA_COLOR_LIGHTBLUE);
+ if (!_log_domain)
+ {
+ EINA_LOG_ERR("could not register cbhm log domain.");
+ _log_domain = EINA_LOG_DOMAIN_GLOBAL;
+ }
+
+ if (!setClipboardManager(ad))
+ {
+ DBG("Clipboard Manager set failed");
+ return EXIT_FAILURE;
+ }
+
+ set_x_window(ad->x_event_win, ad->x_root_win);
+
+ if (!ecore_init()) return EXIT_FAILURE;
+ if (!ecore_evas_init()) return EXIT_FAILURE;
+ if (!edje_init()) return EXIT_FAILURE;
+ ad->magic = CBHM_MAGIC;
+ init_target_atoms(ad);
+ if (!(ad->clipdrawer = init_clipdrawer(ad))) return EXIT_FAILURE;
+
+ //set env for root.
+ setenv("HOME", "/", 1);
+ if (!(ad->xhandler = init_xhandler(ad))) return EXIT_FAILURE;
+ if (!(ad->storage = init_storage(ad))) return EXIT_FAILURE;
+ slot_item_count_set(ad);
+
+ set_selection_owner(ad, ECORE_X_SELECTION_CLIPBOARD, NULL);
+ return 0;
+}
+
+static int app_terminate(void *data)
+{
+ AppData *ad = data;
+
+ item_clear_all(ad);
+ depose_clipdrawer(ad->clipdrawer);
+ depose_xhandler(ad->xhandler);
+ depose_storage(ad->storage);
+ depose_target_atoms(ad);
+ FREE(ad);
+
+ eina_log_domain_unregister(_log_domain);
+ _log_domain = -1;
+
+ return 0;
+}
+
+static int app_pause(void *data)
+{
+ AppData *ad = data;
+ Ecore_X_Illume_Clipboard_State state = ecore_x_e_illume_clipboard_state_get(ad->x_active_win);
+ if(state == ECORE_X_ILLUME_CLIPBOARD_STATE_ON)
+ {
+ clipdrawer_lower_view(ad);
+ }
+ return 0;
+}
+
+static int app_resume(void *data)
+{
+ return 0;
+}
+
+static int app_reset(bundle *b, void *data)
+{
+ return 0;
+}
+
+int main(int argc, char *argv[])
+{
+ AppData *ad;
+
+ struct appcore_ops ops = {
+ .create = app_create,
+ .terminate = app_terminate,
+ .pause = app_pause,
+ .resume = app_resume,
+ .reset = app_reset,
+ };
+
+ ad = calloc(1, sizeof(AppData));
+ ops.data = ad;
+ g_main_ad = ad;
+
+ appcore_set_i18n(PACKAGE, LOCALEDIR);
+
+ // Notyfication to systemd
+ sd_notify(1, "READY=1");
+
+ //set env app for changeable UI.
+ setenv("HOME", "/opt/home/app" , 1);
+
+ return appcore_efl_main(PACKAGE, &argc, &argv, &ops);
+}
--- /dev/null
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 <Ecore_File.h>
+
+#include "storage.h"
+#define STORAGE_FILEPATH "/opt/var/.cbhm_data"
+#define STORAGE_KEY_INDEX_FORMAT "<index%02d>"
+#define STORAGE_KEY_ITEM_FORMAT "<item%02d%s>"
+#define STORAGE_INDEX_ITEM_NONE 0.0
+
+static Eina_Bool item_write(Eet_File *ef, int index, CNP_ITEM *item);
+static Eina_Bool item_delete(Eet_File *ef, int index);
+static Eina_Bool storage_index_write(StorageData *sd, int index);
+static Eina_Bool storage_item_write(AppData *ad, CNP_ITEM *item);
+static Eina_Bool storage_item_delete(AppData *ad, CNP_ITEM *item);
+static Eina_Bool storage_item_update(AppData *ad, CNP_ITEM *item);
+static CNP_ITEM *storage_item_load(StorageData *sd, int index);
+//static void dump_items(StorageData *sd);
+
+static int getMinIndex(indexType *indexTable, int len)
+{
+ int i = 0;
+ int minIndex;
+ indexType min;
+ min = indexTable[i];
+ minIndex = i;
+
+ for (i = 1; i < len; i++)
+ {
+ if ((min > indexTable[i]))
+ {
+ min = indexTable[i];
+ minIndex = i;
+ }
+ }
+ return minIndex;
+}
+
+static int getMaxIndex(indexType *indexTable, int len)
+{
+ int i = 0;
+ indexType max = indexTable[i];
+ int maxIndex = i;
+ for (i = 1; i < len; i++)
+ {
+ if (max < indexTable[i])
+ {
+ max = indexTable[i];
+ maxIndex = i;
+ }
+ }
+ return maxIndex;
+}
+
+StorageData *init_storage(AppData *ad)
+{
+ CALLED();
+ StorageData *sd = CALLOC(1, sizeof(StorageData));
+ if (!sd) return EINA_FALSE;
+
+ eet_init();
+ ecore_file_init();
+
+ sd->ef = eet_open(STORAGE_FILEPATH, EET_FILE_MODE_READ_WRITE);
+
+ if (sd->ef)
+ {
+ char datakey[20];
+ int i, j;
+ int index;
+ int index_order[ITEM_CNT_MAX];
+ int read_size;
+ indexType *read_data;
+ indexType temp[ITEM_CNT_MAX];
+
+ // Initialize index data in file
+ for (i = 0; i < ITEM_CNT_MAX; i++)
+ {
+ sd->itemTable[i] = NULL;
+ sd->indexTable[i] = STORAGE_INDEX_ITEM_NONE;
+ }
+
+ // Load index data from file
+ for (i = 0; i < ITEM_CNT_MAX; i++)
+ {
+ snprintf(datakey, sizeof(datakey), STORAGE_KEY_INDEX_FORMAT, i);
+ read_data = eet_read(sd->ef, datakey, &read_size);
+ if (read_data && read_size > 0)
+ temp[i] = atol((char *)read_data);
+ else
+ temp[i] = STORAGE_INDEX_ITEM_NONE;
+ free(read_data);
+ }
+
+ // Load item data from file
+ for (i = 0, index = 0; i < ITEM_CNT_MAX; i++)
+ {
+ int maxIndex = getMaxIndex(temp, ITEM_CNT_MAX);
+ if (temp[maxIndex] == STORAGE_INDEX_ITEM_NONE)
+ break;
+ else
+ {
+ sd->itemTable[maxIndex] = storage_item_load(sd, maxIndex);
+ sd->indexTable[maxIndex] = temp[maxIndex];
+ temp[maxIndex] = STORAGE_INDEX_ITEM_NONE;
+ index_order[index] = maxIndex;
+ index++;
+ }
+ }
+
+ // Add loaded item to clipboard
+ if (index > 0)
+ {
+ for (i = index - 1; i >= 0; i--)
+ {
+ j = index_order[i];
+ if (sd->itemTable[j])
+ item_add_by_CNP_ITEM(ad, sd->itemTable[j], EINA_FALSE, EINA_FALSE);
+ }
+ }
+ else
+ {
+ DBG("load storage index failed");
+ }
+ }
+ else
+ DBG("storage ef is NULL");
+
+ //dump_items(sd);
+
+ ad->storage_item_add = storage_item_write;
+ ad->storage_item_del = storage_item_delete;
+ ad->storage_item_load = storage_item_load;
+ ad->storage_item_update = storage_item_update;
+
+ return sd;
+}
+
+void depose_storage(StorageData *sd)
+{
+ CALLED();
+ //dump_items(sd);
+ if (sd->ef)
+ eet_close(sd->ef);
+ sd->ef = NULL;
+ eet_shutdown();
+ ecore_file_shutdown();
+}
+/*
+static void dump_items(StorageData *sd)
+{
+ CALLED();
+ int i;
+ for (i = 0; i < ITEM_CNT_MAX; i++)
+ {
+ CNP_ITEM *item = storage_item_load(sd, i);
+ if (item)
+ DBG("item #%d type_index: 0x%x, gitem_style: 0x%x, data: %s\n, len: %d\n, file: %s\n, file_len: %d\n", i, item->type_index, item->gitem_style, (char *)item->data, item->len, (char *)item->file, item->file_len);
+ free(item);
+ }
+}
+*/
+static Eina_Bool item_write(Eet_File *ef, int index, CNP_ITEM *item)
+{
+ if (!ef)
+ {
+ ERR("eet_file is NULL");
+ return EINA_FALSE;
+ }
+ if (!item)
+ {
+ ERR("item is NULL");
+ return EINA_FALSE;
+ }
+
+ Eina_Bool ret = EINA_FALSE;
+ char datakey[20];
+ char write_data[10];
+
+ if (item->len > 0) {
+ snprintf(datakey, sizeof(datakey), STORAGE_KEY_ITEM_FORMAT, index, "data");
+ ret = eet_write(ef, datakey, item->data, item->len, 1);
+ }
+
+ if (item->file_len > 0) {
+ snprintf(datakey, sizeof(datakey), STORAGE_KEY_ITEM_FORMAT, index, "file");
+ ret &= eet_write(ef, datakey, item->file, item->file_len, 1);
+ }
+
+ snprintf(datakey, sizeof(datakey), STORAGE_KEY_ITEM_FORMAT, index, "type_index");
+ snprintf(write_data, sizeof(write_data), "%d", item->type_index);
+ ret &= eet_write(ef, datakey, write_data, strlen(write_data) + 1, 1);
+
+ snprintf(datakey, sizeof(datakey), STORAGE_KEY_ITEM_FORMAT, index, "gitem_style");
+ snprintf(write_data, sizeof(write_data), "%d", item->gitem_style);
+ ret &= eet_write(ef, datakey, write_data, strlen(write_data) + 1, 1);
+
+ snprintf(datakey, sizeof(datakey), STORAGE_KEY_ITEM_FORMAT, index, "locked");
+ snprintf(write_data, sizeof(write_data), "%d", item->locked);
+ ret &= eet_write(ef, datakey, write_data, strlen(write_data) + 1, 1);
+
+ eet_sync(ef);
+ DBG("write result: %d, item index: %d", ret, index);
+
+ return ret != 0;
+}
+
+static Eina_Bool item_delete(Eet_File *ef, int index)
+{
+ if (!ef)
+ {
+ ERR("eet_file is NULL");
+ return EINA_FALSE;
+ }
+
+ Eina_Bool ret;
+ char datakey[20];
+
+ snprintf(datakey, sizeof(datakey), STORAGE_KEY_ITEM_FORMAT, index, "data");
+ ret = eet_delete(ef, datakey);
+
+ snprintf(datakey, sizeof(datakey), STORAGE_KEY_ITEM_FORMAT, index, "type_index");
+ ret &= eet_delete(ef, datakey);
+
+ snprintf(datakey, sizeof(datakey), STORAGE_KEY_ITEM_FORMAT, index, "gitem_style");
+ ret &= eet_delete(ef, datakey);
+
+ snprintf(datakey, sizeof(datakey), STORAGE_KEY_ITEM_FORMAT, index, "locked");
+ ret &= eet_delete(ef, datakey);
+
+ eet_sync(ef);
+ DBG("delete result: %d, item index: %d", ret, index);
+
+ return ret != 0;
+}
+
+static Eina_Bool storage_item_update(AppData *ad, CNP_ITEM *item)
+{
+ CALLED();
+ StorageData *sd = ad->storage;
+ CNP_ITEM *temp;
+ Eina_Bool ret = EINA_FALSE;
+ int index;
+ char datakey[20];
+ char write_data[10];
+
+ if (!item)
+ {
+ ERR("item is NULL");
+ return EINA_FALSE;
+ }
+
+ for (index = 0; index < ITEM_CNT_MAX; index++)
+ {
+ temp = sd->itemTable[index];
+
+ if (temp &&
+ (item->type_index == temp->type_index) &&
+ (!SAFE_STRCMP(item->data, temp->data)))
+ break;
+ }
+ //delete before value.
+ snprintf(datakey, sizeof(datakey), STORAGE_KEY_ITEM_FORMAT, index, "locked");
+ ret &= eet_delete(sd->ef, datakey);
+ eet_sync(sd->ef);
+
+ //rewrite locked value.
+ snprintf(datakey, sizeof(datakey), STORAGE_KEY_ITEM_FORMAT, index, "locked");
+ snprintf(write_data, sizeof(write_data), "%d", item->locked);
+ ret &= eet_write(sd->ef, datakey, write_data, strlen(write_data) + 1, 1);
+ eet_sync(sd->ef);
+
+ return ret != 0;
+
+}
+
+static Eina_Bool storage_item_write(AppData *ad, CNP_ITEM *item)
+{
+ CALLED();
+ StorageData *sd = ad->storage;
+ CNP_ITEM *temp;
+ Eina_Bool ret = EINA_TRUE;
+ int index;
+
+ if (!item)
+ {
+ ERR("item is NULL");
+ return EINA_FALSE;
+ }
+
+ for (index = 0; index < ITEM_CNT_MAX; index++)
+ {
+ temp = sd->itemTable[index];
+
+ if (temp &&
+ (item->type_index == temp->type_index) &&
+ (!SAFE_STRCMP(item->data, temp->data)))
+ break;
+ }
+
+ // Item does not exist in clipboard
+ if (index == ITEM_CNT_MAX)
+ {
+ index = getMinIndex(sd->indexTable, ITEM_CNT_MAX);
+ ret = item_write(sd->ef, index, item);
+ }
+
+ sd->indexTable[index] = ecore_time_unix_get();
+ sd->itemTable[index] = item;
+ ret &= storage_index_write(sd, index);
+ //dump_items(sd);
+ return ret;
+}
+
+static Eina_Bool storage_item_delete(AppData *ad, CNP_ITEM *item)
+{
+ CALLED();
+ StorageData *sd = ad->storage;
+ Eina_Bool ret = EINA_FALSE;
+ int index;
+
+ for (index = 0; index < ITEM_CNT_MAX; index++)
+ {
+ if (sd->itemTable[index] == item)
+ break;
+ }
+
+ if (index < ITEM_CNT_MAX)
+ {
+ ret = item_delete(sd->ef, index);
+ sd->indexTable[index] = STORAGE_INDEX_ITEM_NONE;
+ ret &= storage_index_write(sd, index);
+ }
+ return ret;
+}
+
+static CNP_ITEM *storage_item_load(StorageData *sd, int index)
+{
+ if (!sd->ef)
+ {
+ ERR("eet_file is NULL");
+ return NULL;
+ }
+ if (index >= ITEM_CNT_MAX)
+ return NULL;
+
+ char datakey[20];
+ char *read_data;
+ int read_size;
+ CNP_ITEM *item = CALLOC(1, sizeof(CNP_ITEM));
+
+ if (!item) {
+ ERR("item CALLOC failed");
+ return NULL;
+ }
+
+ snprintf(datakey, sizeof(datakey), STORAGE_KEY_ITEM_FORMAT, index, "data");
+ read_data = eet_read(sd->ef, datakey, &read_size);
+ if (read_data){
+ if (read_size > 0) {
+ item->len = read_size;
+ item->data = CALLOC(1, read_size * sizeof(char));
+ if (item->data) {
+ memcpy(item->data, read_data, read_size);
+ }
+ else {
+ free(read_data);
+ FREE(item);
+ return NULL;
+ }
+ }
+ free(read_data);
+ }
+
+ snprintf(datakey, sizeof(datakey), STORAGE_KEY_ITEM_FORMAT, index, "file");
+ read_data = eet_read(sd->ef, datakey, &read_size);
+ if (read_data) {
+ if (read_size > 0) {
+ item->file_len = read_size;
+ item->file = CALLOC(1, read_size * sizeof(char));
+ if (item->file)
+ memcpy(item->file, read_data, read_size);
+ }
+ free(read_data);
+ }
+
+ snprintf(datakey, sizeof(datakey), STORAGE_KEY_ITEM_FORMAT, index, "type_index");
+ read_data = eet_read(sd->ef, datakey, &read_size);
+ if (read_data) {
+ if ( read_size > 0) {
+ item->type_index = atoi(read_data);
+ }
+ free(read_data);
+ }
+
+ snprintf(datakey, sizeof(datakey), STORAGE_KEY_ITEM_FORMAT, index, "gitem_style");
+ read_data = eet_read(sd->ef, datakey, &read_size);
+ if (read_data) {
+ if ( read_size > 0) {
+ item->gitem_style = atoi(read_data);
+ }
+ free(read_data);
+ }
+
+ snprintf(datakey, sizeof(datakey), STORAGE_KEY_ITEM_FORMAT, index, "locked");
+ read_data = eet_read(sd->ef, datakey, &read_size);
+ if (read_data) {
+ if (read_size > 0) {
+ item->locked = atoi(read_data);
+ }
+ free(read_data);
+ }
+
+ return item;
+}
+
+static Eina_Bool storage_index_write(StorageData *sd, int index)
+{
+ CALLED();
+ Eina_Bool ret;
+ char datakey[20];
+ char write_data[50];
+
+ if (!sd->ef)
+ {
+ ERR("eet_file is NULL");
+ return EINA_FALSE;
+ }
+
+ snprintf(datakey, sizeof(datakey), STORAGE_KEY_INDEX_FORMAT, index);
+ snprintf(write_data, sizeof(write_data), "%lf", sd->indexTable[index]);
+ ret = eet_write(sd->ef, datakey, write_data, strlen(write_data) + 1, 1);
+
+ eet_sync(sd->ef);
+
+ return ret != 0;
+}
--- /dev/null
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 _STORAGE_H_
+#define _STORAGE_H_
+
+#include <Eet.h>
+#include <Eina.h>
+#include <Ecore.h>
+
+#include "cbhm.h"
+
+typedef double indexType; /* Ecore_Time */
+
+struct _StorageData {
+ Eet_File *ef;
+ indexType indexTable[ITEM_CNT_MAX];
+ CNP_ITEM *itemTable[ITEM_CNT_MAX];
+};
+
+StorageData *init_storage(AppData *ad);
+void depose_storage(StorageData *sd);
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 "xconverter.h"
+
+static char *html_to_entry(AppData *ad, int type_index, const char *str);
+static char *efl_to_entry(AppData *ad, int type_index, const char *str);
+static char *text_to_entry(AppData *ad, int type_index, const char *str);
+static char *image_path_to_entry(AppData *ad, int type_index, const char *str);
+static char *polaris_to_entry(AppData *ad, int type_index, const char *str);
+
+//static char *make_close_tag(Eina_List* nodes);
+static char *do_not_convert(AppData *ad, int type_index, const char *str);
+static char *html_to_efl(AppData *ad, int type_index, const char *str);
+static char *efl_to_html(AppData *ad, int type_index, const char *str);
+static char *text_to_html(AppData *ad, int type_index, const char *str);
+static char *text_to_efl(AppData *ad, int type_index, const char *str);
+static char *to_text(AppData *ad, int type_index, const char *str);
+static char *image_path_to_html(AppData *ad, int type_index, const char *str);
+static char *image_path_to_efl(AppData *ad, int type_index, const char *str);
+//static char *image_path_to_text(AppData *ad, int type_index, const char *str);
+//static char *efl_to_efl(AppData *ad, int type_index, const char *str);
+//static char *html_to_html(AppData *ad, int type_index, const char *str);
+static char *image_path_to_image_path(AppData *ad, int type_index, const char *str);
+static char *html_to_image_path(AppData *ad, int type_index, const char *str);
+static char *efl_to_image_path(AppData *ad, int type_index, const char *str);
+
+int atom_type_index_get(AppData *ad, Ecore_X_Atom atom)
+{
+ int i, j;
+ for (i = 0; i < ATOM_INDEX_MAX; i++)
+ {
+ for (j = 0; j < ad->targetAtoms[i].atom_cnt; j++)
+ if (ad->targetAtoms[i].atom[j] == atom)
+ return i;
+ }
+ return -1;
+}
+
+void init_target_atoms(AppData *ad)
+{
+ int atom_cnt[ATOM_INDEX_MAX] = {
+ 1, 5, 2, 1, 2, 1
+ };
+ char *targetAtomNames[][5] = {
+ { "TARGETS" },
+ { "UTF8_STRING", "STRING", "TEXT", "text/plain;charset=utf-8", "text/plain" },
+ { "text/html;charset=utf-8", "text/html" },
+ { "application/x-elementary-markup" },
+ { "text/uri", "text/uri-list" },
+ { "polaris-markup" }
+ };
+ text_converter_func converts_to_entry[ATOM_INDEX_MAX] = {
+ NULL, text_to_entry, html_to_entry, efl_to_entry, image_path_to_entry, polaris_to_entry
+ };
+
+ text_converter_func converts[ATOM_INDEX_MAX][ATOM_INDEX_MAX] = {
+ {NULL, NULL, NULL, NULL, NULL, NULL},
+ {NULL, do_not_convert, text_to_html, text_to_efl, NULL, NULL},
+ {NULL, to_text, do_not_convert, html_to_efl, html_to_image_path, NULL},
+ {NULL, to_text, efl_to_html, do_not_convert, efl_to_image_path, NULL},
+ {NULL, NULL, image_path_to_html, image_path_to_efl, image_path_to_image_path, NULL},
+ {NULL, to_text, NULL, NULL, NULL, do_not_convert}
+ };
+
+ int i, j;
+ for (i = 0; i < ATOM_INDEX_MAX; i++)
+ {
+ ad->targetAtoms[i].atom_cnt = atom_cnt[i];
+ ad->targetAtoms[i].name = MALLOC(sizeof(char *) * atom_cnt[i]);
+ ad->targetAtoms[i].atom = MALLOC(sizeof(Ecore_X_Atom) * atom_cnt[i]);
+ for (j = 0; j < atom_cnt[i]; j++)
+ {
+ DBG("atomName: %s", targetAtomNames[i][j]);
+ ad->targetAtoms[i].name[j] = SAFE_STRDUP(targetAtomNames[i][j]);
+ ad->targetAtoms[i].atom[j] = ecore_x_atom_get(targetAtomNames[i][j]);
+ }
+ ad->targetAtoms[i].convert_to_entry = converts_to_entry[i];
+
+ for (j = 0; j < ATOM_INDEX_MAX; j++)
+ ad->targetAtoms[i].convert_to_target[j] = converts[i][j];
+ //ecore_x_selection_converter_atom_add(ad->targetAtoms[i].atom, target_converters[i]);
+ //ecore_x_selection_converter_atom_add(ad->targetAtoms[i].atom, generic_converter);
+ }
+}
+
+void depose_target_atoms(AppData *ad)
+{
+ int i, j;
+ for (i = 0; i < ATOM_INDEX_MAX; i++)
+ {
+ for (j = 0; j < ad->targetAtoms[i].atom_cnt; j++)
+ {
+ if (ad->targetAtoms[i].name[j])
+ FREE(ad->targetAtoms[i].name[j]);
+ }
+ if (ad->targetAtoms[i].name)
+ FREE(ad->targetAtoms[i].name);
+ if (ad->targetAtoms[i].atom)
+ FREE(ad->targetAtoms[i].atom);
+ }
+}
+
+static Eina_Bool targets_converter(AppData *ad, Ecore_X_Atom reqAtom, CNP_ITEM *item, void **data_ret, int *size_ret, Ecore_X_Atom *ttype, int *tsize)
+{
+ CALLED();
+
+ int count;
+ int i, j;
+ int item_type_index = ATOM_INDEX_TEXT;
+ char *file = NULL;
+
+ if (item)
+ {
+ item_type_index = item->type_index;
+ file = item->file;
+ }
+
+ if (!file || item->img_from_web)
+ {
+ if (item_type_index == ATOM_INDEX_HTML)
+ ad->targetAtoms[item_type_index].convert_to_target[ATOM_INDEX_IMAGE] = NULL;
+ else if (item_type_index == ATOM_INDEX_EFL)
+ ad->targetAtoms[item_type_index].convert_to_target[ATOM_INDEX_IMAGE] = NULL;
+ }
+
+ for (i = 0, count = 0; i < ATOM_INDEX_MAX; i++)
+ {
+ if (ad->targetAtoms[item_type_index].convert_to_target[i])
+ count += ad->targetAtoms[i].atom_cnt;
+ }
+
+ *data_ret = MALLOC(sizeof(Ecore_X_Atom) * count);
+ DBG("item_type: %d, target Atom cnt: %d", item_type_index, count);
+ if (!*data_ret)
+ return EINA_FALSE;
+
+ for (i = 0, count = 0; i < ATOM_INDEX_MAX; i++)
+ {
+ if (ad->targetAtoms[item_type_index].convert_to_target[i])
+ {
+ for(j = 0; j < ad->targetAtoms[i].atom_cnt; j++)
+ {
+ ((Ecore_X_Atom *)*data_ret)[count++] = ad->targetAtoms[i].atom[j];
+ DBG("send target atom: %s", ad->targetAtoms[i].name[j]);
+ }
+ }
+ }
+
+ if (!file)
+ {
+ if (item_type_index == ATOM_INDEX_HTML)
+ ad->targetAtoms[item_type_index].convert_to_target[ATOM_INDEX_IMAGE] = html_to_image_path;
+ else if (item_type_index == ATOM_INDEX_EFL)
+ ad->targetAtoms[item_type_index].convert_to_target[ATOM_INDEX_IMAGE] = efl_to_image_path;
+ }
+
+ if (size_ret) *size_ret = count;
+ if (ttype) *ttype = ECORE_X_ATOM_ATOM;
+ if (tsize) *tsize = 32;
+ return EINA_TRUE;
+}
+
+Eina_Bool generic_converter(AppData *ad, Ecore_X_Atom reqAtom, CNP_ITEM *item, void **data_ret, int *size_ret, Ecore_X_Atom *ttype, int *tsize)
+{
+ CALLED();
+
+ if (ad->targetAtoms[ATOM_INDEX_TARGET].atom[0] == reqAtom)
+ return targets_converter(ad, reqAtom, item, data_ret, size_ret, ttype, tsize);
+
+ int req_index = atom_type_index_get(ad, reqAtom);
+ int item_type_index = ATOM_INDEX_TEXT;
+ void *item_data = "";
+
+ if (req_index < 0) return EINA_FALSE;
+
+ if (item)
+ {
+ item_type_index = item->type_index;
+ item_data = item->data;
+ }
+
+ if (ad->targetAtoms[item_type_index].convert_to_target[req_index])
+ {
+ *data_ret = ad->targetAtoms[item_type_index].convert_to_target[req_index](ad, item_type_index, item_data);
+ if (!*data_ret)
+ return EINA_FALSE;
+ if (size_ret) *size_ret = SAFE_STRLEN(*data_ret);
+ if (ttype) *ttype = ad->targetAtoms[item_type_index].atom[0];
+ if (tsize) *tsize = 8;
+ return EINA_TRUE;
+ }
+
+ return EINA_FALSE;
+}
+
+/* For convert EFL to HTML */
+
+#define TAGPOS_START 0x00000001
+#define TAGPOS_END 0x00000002
+#define TAGPOS_ALONE 0x00000003
+
+/* TEXTBLOCK tag using stack but close tag word has no mean maybe bug...
+ * TEXTBLOCK <b>bold<font>font</b>bold</font>
+ * HTML <b>bold<font>font bold</b>font</font> */
+
+typedef struct _TagTable {
+ char *src;
+ char *dst;
+}TagTable;
+
+TagTable _EFLtoHTMLConvertTable[] = {
+ {"font", "font"},
+ {"underline", "del"},
+ {"strikethrough", "ins"},
+ {"br", "br"},
+ {"br/", "br"},
+ {"ps", "br"},
+ {"b", "b"},
+ {"item", "img"}
+};
+
+TagTable _HTMLtoEFLConvertTable[] = {
+ {"font", ""},
+ {"del", "underline"},
+ {"u", "underline"},
+ {"ins", "strikethrough"},
+ {"s", "strikethrough"},
+ {"br", "br"},
+ {"b", "b"},
+ {"strong", "b"},
+ {"img", "item"}
+};
+
+
+typedef struct _TagNode TagNode, *PTagNode;
+struct _TagNode {
+ char *tag; //EINA_STRINGSHARE if NULL just str
+ char *tag_str;
+ char *str;
+ const char *pos_in_ori_str;
+ PTagNode matchTag;
+ void *tagData;
+ unsigned char tagPosType;
+};
+
+typedef struct _FontTagData FontTagData, *PFontTagData;
+struct _FontTagData {
+ char *name;
+ char *color;
+ char *size;
+ char *bg_color;
+};
+
+
+typedef struct _ItemTagData ItemTagData, *PItemTagData;
+struct _ItemTagData {
+ char *href;
+ char *width;
+ char *height;
+};
+
+#define SAFEFREE(ptr) \
+ do\
+{\
+ if (ptr)\
+ FREE(ptr);\
+ ptr = NULL;\
+} while(0);\
+
+#define freeAndAssign(dst, value) \
+ do\
+{\
+ if (value)\
+ {\
+ SAFEFREE(dst);\
+ dst = value;\
+ }\
+} while(0);
+
+static PTagNode _new_tag_node(char *tag, char *tag_str, char* str, const char *pos_in_ori_str);
+static PTagNode _get_start_node(const char *str);
+static PTagNode _get_next_node(PTagNode prev);
+static void _delete_node(PTagNode node);
+static void _link_match_tags(Eina_List *nodes);
+static char *_get_tag_value(const char *tag_str, const char *tag_name);
+static char *_convert_to_html(Eina_List* nodes);
+static void _set_EFL_tag_data(Eina_List* nodes);
+static char *_convert_to_edje(Eina_List* nodes);
+static void _set_HTML_tag_data(Eina_List* nodes);
+static void cleanup_tag_list(Eina_List *nodeList);
+static PFontTagData _set_EFL_font_data(PFontTagData data, const char *tag_str);
+static PItemTagData _set_EFL_item_data(PItemTagData data, const char *tag_str);
+static PFontTagData _set_HTML_font_data(PFontTagData data, const char *tag_str);
+static PItemTagData _set_HTML_img_data(PItemTagData data, const char *tag_str);
+
+static void _dumpNode(Eina_List* nodes);
+
+static PTagNode
+_new_tag_node(char *tag, char *tag_str, char* str, const char *pos_in_ori_str)
+{
+ PTagNode newNode = CALLOC(1, sizeof(TagNode));
+ if (tag)
+ eina_str_tolower(&tag);
+ newNode->tag = tag;
+ newNode->tag_str = tag_str;
+ newNode->str = str;
+ newNode->pos_in_ori_str = pos_in_ori_str;
+ return newNode;
+}
+
+static PTagNode
+_get_start_node(const char *str)
+{
+ char *startStr = NULL;
+ if (!str || str[0] == '\0')
+ return NULL;
+
+ if (str[0] != '<')
+ {
+ char *tagStart = SAFE_STRCHR(str, '<');
+ if (!tagStart)
+ startStr = SAFE_STRDUP(str);
+ else
+ {
+ int strLength = tagStart - str;
+ startStr = MALLOC(sizeof(char) * (strLength + 1));
+ SAFE_STRNCPY(startStr, str, strLength);
+ startStr[strLength] = '\0';
+ }
+ }
+
+ return _new_tag_node(NULL, NULL, startStr, str);
+}
+
+static PTagNode
+_get_next_node(PTagNode prev)
+{
+ PTagNode retTag = NULL;
+ char *tagStart;
+ char *tagEnd;
+ char *tagNameEnd = NULL;
+ char *nextTagStart;
+
+ if (prev->tag == NULL)
+ tagStart = SAFE_STRCHR(prev->pos_in_ori_str, '<');
+ else
+ tagStart = SAFE_STRCHR(prev->pos_in_ori_str + 1, '<');
+
+ if (!tagStart)
+ return retTag;
+
+ tagEnd = SAFE_STRCHR(tagStart, '>');
+ nextTagStart = SAFE_STRCHR(tagStart + 1, '<');
+
+ if (!tagEnd || (nextTagStart && (nextTagStart < tagEnd)))
+ return _get_start_node(tagStart + 1);
+
+ int spCnt = 5;
+ char *spArray[spCnt];
+ spArray[0] = SAFE_STRCHR(tagStart, '=');
+ spArray[1] = SAFE_STRCHR(tagStart, '_');
+ spArray[2] = SAFE_STRCHR(tagStart, ' ');
+ spArray[3] = SAFE_STRCHR(tagStart, '\t');
+ spArray[4] = SAFE_STRCHR(tagStart, '\n');
+ tagNameEnd = tagEnd;
+
+ int i;
+ for (i = 0; i < spCnt; i++)
+ {
+ if (spArray[i] && spArray[i] < tagNameEnd)
+ tagNameEnd = spArray[i];
+ }
+
+ int tagLength = tagNameEnd - tagStart - 1;
+ char *tagName = NULL;
+ if (!SAFE_STRNCMP(&tagStart[1], "/item", tagLength))
+ tagName = SAFE_STRDUP("");
+ else
+ tagName = SAFE_STRNDUP(&tagStart[1], tagLength);
+
+ int tagStrLength = 0;
+ char *tagStr = NULL;
+ if (tagName)
+ {
+ tagStrLength = tagEnd - tagStart + 1;
+ tagStr = SAFE_STRNDUP(tagStart, tagStrLength);
+ }
+
+ unsigned int strLength = nextTagStart ? (unsigned int)(nextTagStart - tagEnd - 1) : SAFE_STRLEN(&tagEnd[1]);
+ char *str = SAFE_STRNDUP(&tagEnd[1], strLength);
+
+ retTag = _new_tag_node(tagName, tagStr, str, tagStart);
+ return retTag;
+}
+
+
+static void
+_delete_node(PTagNode node)
+{
+ if (node)
+ {
+ SAFEFREE(node->tag_str);
+ SAFEFREE(node->str);
+
+ if (node->tagData)
+ {
+ if (node->tag)
+ {
+ if (!SAFE_STRCMP("font", node->tag))
+ {
+ PFontTagData data = node->tagData;
+ SAFEFREE(data->name);
+ SAFEFREE(data->color);
+ SAFEFREE(data->size);
+ SAFEFREE(data->bg_color);
+ }
+ if (!SAFE_STRCMP("item", node->tag))
+ {
+ PItemTagData data = node->tagData;
+ SAFEFREE(data->href);
+ SAFEFREE(data->width);
+ SAFEFREE(data->height);
+ }
+ }
+ SAFEFREE(node->tagData);
+ }
+ SAFEFREE(node->tag);
+ SAFEFREE(node);
+ }
+}
+
+static void
+_link_match_tags(Eina_List *nodes)
+{
+ Eina_List *stack = NULL;
+
+ PTagNode trail, popData;
+ Eina_List *l, *r;
+
+ EINA_LIST_FOREACH(nodes, l, trail)
+ {
+ if (!trail || !trail->tag || trail->tag[0] == '\0') continue;
+
+ if (!SAFE_STRCMP("br", trail->tag) || !SAFE_STRCMP("br/", trail->tag))
+ {
+ trail->tagPosType = TAGPOS_ALONE;
+ continue;
+ }
+ else if (!SAFE_STRCMP("item", trail->tag) || !SAFE_STRCMP("img", trail->tag))
+ {
+ trail->tagPosType = TAGPOS_ALONE;
+ continue;
+ }
+
+ if (trail->tag[0] != '/') // PUSH
+ {
+ stack = eina_list_append(stack, trail);
+ /* eina_array_push(stack, trail);
+ DBG("stack: %d, tag %s", eina_array_count_get(stack), trail->tag);*/
+ DBG("stack: %d, tag %s", eina_list_count(stack), trail->tag);
+ }
+ else // POP
+ {
+ if (!eina_list_count(stack))
+ {
+ WRN("tag not matched %s", trail->tag);
+ continue;
+ }
+
+ EINA_LIST_REVERSE_FOREACH(stack, r, popData)
+ {
+ if (!popData || !popData->tag || popData->tag[0] == '\0') continue;
+
+ if (!SAFE_STRCMP(popData->tag, &trail->tag[1]))
+ {
+ popData->tagPosType = TAGPOS_START;
+ trail->tagPosType = TAGPOS_END;
+ popData->matchTag = trail;
+ trail->matchTag = popData;
+ stack = eina_list_remove_list(stack, r);
+ break;
+ }
+ }
+ /* popData = eina_array_pop(stack);
+
+ popData->tagPosType = TAGPOS_START;
+ trail->tagPosType = TAGPOS_END;
+ popData->matchTag = trail;
+ trail->matchTag = popData;
+ DBG("pop stack: %d, tag %s", eina_array_count_get(stack), trail->tag);
+ */
+ }
+ }
+
+ /* if (eina_array_count_get(stack))
+ DBG("stack state: %d, tag %s", eina_array_count_get(stack), trail->tag);*/
+
+ /* Make Dummy close tag */
+ /* while ((popData = eina_array_pop(stack))) */
+
+ EINA_LIST_REVERSE_FOREACH(stack, r, popData)
+ {
+ if (!popData) continue;
+
+ PTagNode newData;
+ int tagLength = SAFE_STRLEN(popData->tag);
+ char *tagName = MALLOC(sizeof(char) * (tagLength + 2));
+ if (!tagName) break;
+
+ tagName[0] = '/';
+ tagName[1] = '\0';
+ SAFE_STRCAT(tagName, popData->tag);
+
+ newData = _new_tag_node(tagName, NULL, NULL, NULL);
+ popData->tagPosType = TAGPOS_START;
+ newData->tagPosType = TAGPOS_END;
+ popData->matchTag = newData;
+ newData->matchTag = popData;
+ nodes = eina_list_append(nodes, newData);
+ /* DBG("stack: %d, tag %s", eina_array_count_get(stack), popData->tag);*/
+ }
+ /* DBG("stack_top: %d", eina_array_count_get(stack));
+ eina_array_free(stack);*/
+ eina_list_free(stack);
+}
+
+static char *
+_get_tag_value(const char *tag_str, const char *tag_name)
+{
+ if (!tag_name || !tag_str)
+ return NULL;
+
+ char *tag;
+ if ((tag = SAFE_STRSTR(tag_str, tag_name)))
+ {
+ if (tag[SAFE_STRLEN(tag_name)] == '_')
+ return NULL;
+ char *value = SAFE_STRCHR(tag, '=');
+ if (value)
+ {
+ do
+ {
+ value++;
+ } while (!isalnum(*value) && *value != '#');
+
+ int spCnt = 6;
+ char *spArray[spCnt];
+ spArray[0] = SAFE_STRCHR(value, ' ');
+ spArray[1] = SAFE_STRCHR(value, '>');
+ spArray[2] = SAFE_STRCHR(value, '\"');
+ spArray[3] = SAFE_STRCHR(value, '\'');
+ spArray[4] = SAFE_STRCHR(value, '\t');
+ spArray[5] = SAFE_STRCHR(value, '\n');
+ char *valueEnd = SAFE_STRCHR(value, '\0');
+
+ int i;
+ int start = 0;
+ if ((!SAFE_STRNCMP(tag_str, "<item", 5) && !SAFE_STRCMP(tag_name, "href")) // EFL img tag
+ || (!SAFE_STRNCMP(tag_str, "<img", 4) && !SAFE_STRCMP(tag_name, "src"))) // HTML img tag
+ start = 1;
+
+ for (i = start; i < spCnt; i++)
+ {
+ if (spArray[i] && spArray[i] < valueEnd)
+ valueEnd = spArray[i];
+ }
+
+ int valueLength = valueEnd - value;
+ return SAFE_STRNDUP(value, valueLength);
+ }
+ }
+ return NULL;
+}
+
+static PFontTagData
+_set_EFL_font_data(PFontTagData data, const char *tag_str)
+{
+ char *value;
+
+ if (!data)
+ data = CALLOC(1, sizeof(FontTagData));
+ value = _get_tag_value(tag_str, "font_size");
+ freeAndAssign(data->size, value);
+ value = _get_tag_value(tag_str, "color");
+ freeAndAssign(data->color, value);
+ value = _get_tag_value(tag_str, "bgcolor");
+ freeAndAssign(data->bg_color, value);
+ value = _get_tag_value(tag_str, "font");
+ freeAndAssign(data->name, value);
+
+ return data;
+}
+
+static PItemTagData
+_set_EFL_item_data(PItemTagData data, const char *tag_str)
+{
+ char *value;
+
+ if (!data)
+ data = CALLOC(1, sizeof(ItemTagData));
+ value = _get_tag_value(tag_str, "href");
+ if (value)
+ {
+ char *path = SAFE_STRSTR(value, "file://");
+ if (path)
+ {
+ char *modify = MALLOC(sizeof(char) * (SAFE_STRLEN(value) + 1));
+ SAFE_STRNCPY(modify, "file://", 8);
+ path += 7;
+ while (path[1] && path[0] && path[1] == '/' && path[0] == '/')
+ {
+ path++;
+ }
+ SAFE_STRCAT(modify, path);
+ data->href = modify;
+ DBG("image href ---%s---", data->href);
+ FREE(value);
+ }
+ else
+ freeAndAssign(data->href, value);
+ }
+
+ value = _get_tag_value(tag_str, "absize");
+ if (value)
+ {
+ char *xpos = SAFE_STRCHR(value, 'x');
+ if (xpos)
+ {
+ int absizeLen = SAFE_STRLEN(value);
+ freeAndAssign(data->width, SAFE_STRNDUP(value, xpos - value));
+ freeAndAssign(data->height, SAFE_STRNDUP(xpos + 1, absizeLen - (xpos - value) - 1));
+ DBG("image width: -%s-, height: -%s-", data->width, data->height);
+ }
+ FREE(value);
+ }
+ return data;
+}
+
+static void
+_set_EFL_tag_data(Eina_List* nodes)
+{
+ PTagNode trail;
+ Eina_List *l;
+
+ EINA_LIST_FOREACH(nodes, l, trail)
+ {
+ if (!trail || !trail->tag || trail->tag[0] == '\0') continue;
+
+ if (!SAFE_STRCMP("font", trail->tag) || !SAFE_STRCMP("color", trail->tag))
+ trail->tagData = _set_EFL_font_data(trail->tagData, trail->tag_str);
+ else if (!SAFE_STRCMP("item", trail->tag))
+ trail->tagData = _set_EFL_item_data(trail->tagData, trail->tag_str);
+ }
+}
+
+static PFontTagData
+_set_HTML_font_data(PFontTagData data, const char *tag_str)
+{
+ char *value;
+
+ if (!data)
+ data = CALLOC(1, sizeof(FontTagData));
+ value = _get_tag_value(tag_str, "size");
+ freeAndAssign(data->size, value);
+ value = _get_tag_value(tag_str, "color");
+ freeAndAssign(data->color, value);
+ value = _get_tag_value(tag_str, "bgcolor");
+ freeAndAssign(data->bg_color, value);
+ value = _get_tag_value(tag_str, "face");
+ freeAndAssign(data->name, value);
+
+ return data;
+}
+
+static PItemTagData
+_set_HTML_img_data(PItemTagData data, const char *tag_str)
+{
+ char *value;
+
+ if (!data)
+ data = CALLOC(1, sizeof(ItemTagData));
+ value = _get_tag_value(tag_str, "src");
+ if (value)
+ {
+ char *path = SAFE_STRSTR(value, "file://");
+ if (path)
+ {
+ char *modify = MALLOC(sizeof(char) * (SAFE_STRLEN(value) + 1));
+ SAFE_STRNCPY(modify, "file://", 8);
+ path += 7;
+ while (path[1] && path[0] && path[1] == '/' && path[0] == '/')
+ {
+ path++;
+ }
+ SAFE_STRCAT(modify, path);
+ data->href = modify;
+ DBG("image src ---%s---", data->href);
+ FREE(value);
+ }
+ else
+ freeAndAssign(data->href, value);
+ }
+
+ value = _get_tag_value(tag_str, "width");
+ freeAndAssign(data->width, value);
+ value = _get_tag_value(tag_str, "height");
+ freeAndAssign(data->height, value);
+ return data;
+}
+
+static void
+_set_HTML_tag_data(Eina_List* nodes)
+{
+ PTagNode trail;
+ Eina_List *l;
+
+ EINA_LIST_FOREACH(nodes, l, trail)
+ {
+ if (!trail || !trail->tag || trail->tag[0] == '\0') continue;
+
+ if (!SAFE_STRCMP("font", trail->tag) || !SAFE_STRCMP("color", trail->tag))
+ trail->tagData = _set_HTML_font_data(trail->tagData, trail->tag_str);
+ else if (!SAFE_STRCMP("img", trail->tag))
+ trail->tagData = _set_HTML_img_data(trail->tagData, trail->tag_str);
+ }
+}
+
+static void
+_dumpNode(Eina_List* nodes)
+{
+ PTagNode trail;
+ Eina_List *l;
+
+ EINA_LIST_FOREACH(nodes, l, trail)
+ {
+ if (!trail) continue;
+
+ DBG("tag: %s, tag_str: %s, str: %s, tagPosType: %d",
+ trail->tag, trail->tag_str, trail->str, trail->tagPosType);
+ DBG("matchTag: %x", (unsigned int)trail->matchTag);
+ if (trail->matchTag)
+ DBG("matchTag->tag_str: %s", trail->matchTag->tag_str);
+ if (trail->tagData)
+ {
+ if (!SAFE_STRCMP(trail->tag, "font"))
+ {
+ PFontTagData data = trail->tagData;
+ DBG(" tagData->name: %s, tagData->color: %s, tagData->size: %s, tagData->bg_color: %s",
+ data->name, data->color, data->size, data->bg_color);
+ }
+ else if (!SAFE_STRCMP(trail->tag, "item") || !SAFE_STRCMP(trail->tag, "img"))
+ {
+ PItemTagData data = trail->tagData;
+ DBG(" tagData->href: %s, tagData->width: %s, tagData->height: %s",
+ data->href, data->width, data->height);
+ }
+ else
+ WRN("ERROR!!!! not need tagData");
+ }
+ }
+}
+
+static char *
+_convert_to_html(Eina_List* nodes)
+{
+ PTagNode trail;
+ Eina_List *l;
+
+ Eina_Strbuf *html = eina_strbuf_new();
+
+ int tableCnt = sizeof(_EFLtoHTMLConvertTable) / sizeof(TagTable);
+
+ EINA_LIST_FOREACH(nodes, l, trail)
+ {
+ if (!trail) continue;
+
+ if (trail->tag)
+ {
+ char *tagName = trail->tagPosType == TAGPOS_END ?
+ trail->matchTag->tag : trail->tag;
+ int j;
+ for(j = 0; j < tableCnt; j++)
+ {
+ if (!SAFE_STRCMP(_EFLtoHTMLConvertTable[j].src, tagName))
+ {
+ switch(trail->tagPosType)
+ {
+ case TAGPOS_END:
+ eina_strbuf_append(html, "</");
+ break;
+ default:
+ eina_strbuf_append(html, "<");
+ break;
+ }
+
+ eina_strbuf_append(html, _EFLtoHTMLConvertTable[j].dst);
+ if (trail->tagPosType != TAGPOS_END)
+ {
+ if (!SAFE_STRCMP(_EFLtoHTMLConvertTable[j].src, "font"))
+ {
+ PFontTagData data = trail->tagData;
+ if (data->name)
+ {
+ }
+ if (data->color)
+ {
+ char *color = SAFE_STRDUP(data->color);
+ if (color && color[0] == '#' && SAFE_STRLEN(color) == 9)
+ {
+ color[7] = '\0';
+ eina_strbuf_append_printf(html, " color=\"%s\"", color);
+ }
+ else
+ eina_strbuf_append_printf(html, " color=\"%s\"", data->color);
+ if (color)
+ FREE(color);
+ }
+ if (data->size)
+ eina_strbuf_append_printf(html, " size=\"%s\"", data->size);
+ if (data->bg_color)
+ {
+ }
+ }
+ else if (!SAFE_STRCMP(_EFLtoHTMLConvertTable[j].src, "item"))
+ {
+ PItemTagData data = trail->tagData;
+ if (data->href)
+ eina_strbuf_append_printf(html, " src=\"%s\"", data->href);
+ if (data->width)
+ eina_strbuf_append_printf(html, " width=\"%s\"", data->width);
+ if (data->height)
+ eina_strbuf_append_printf(html, " height=\"%s\"", data->height);
+ }
+ }
+ switch(trail->tagPosType)
+ {
+ /* closed tag does not need in HTML
+ case TAGPOS_ALONE:
+ eina_strbuf_append(html, " />");
+ break;*/
+ default:
+ eina_strbuf_append(html, ">");
+ break;
+ }
+ break;
+ }
+ }
+ }
+ if (trail->str)
+ eina_strbuf_append(html, trail->str);
+ }
+
+ eina_strbuf_replace_all(html, " ", " ");
+ char *ret = eina_strbuf_string_steal(html);
+ eina_strbuf_free(html);
+ return ret;
+}
+
+#define IMAGE_DEFAULT_WIDTH "240"
+#define IMAGE_DEFAULT_HEIGHT "180"
+
+
+static char *
+_convert_to_edje(Eina_List* nodes)
+{
+ PTagNode trail;
+ Eina_List *l;
+
+ Eina_Strbuf *edje = eina_strbuf_new();
+
+ int tableCnt = sizeof(_HTMLtoEFLConvertTable) / sizeof(TagTable);
+
+ EINA_LIST_FOREACH(nodes, l, trail)
+ {
+ if (!trail) continue;
+
+ if (trail->tag)
+ {
+ char *tagName = trail->tagPosType == TAGPOS_END ?
+ trail->matchTag->tag : trail->tag;
+ int j;
+ for(j = 0; j < tableCnt; j++)
+ {
+ if (!SAFE_STRCMP(_HTMLtoEFLConvertTable[j].src, tagName))
+ {
+ if (_HTMLtoEFLConvertTable[j].dst[0] != '\0')
+ {
+ switch(trail->tagPosType)
+ {
+ case TAGPOS_END:
+ eina_strbuf_append(edje, "</");
+ break;
+ default:
+ eina_strbuf_append(edje, "<");
+ break;
+ }
+
+ eina_strbuf_append(edje, _HTMLtoEFLConvertTable[j].dst);
+ }
+ if (trail->tagPosType != TAGPOS_END)
+ {
+ if (!SAFE_STRCMP(_HTMLtoEFLConvertTable[j].src, "font"))
+ {
+ PFontTagData data = trail->tagData;
+ if (data->name)
+ {
+ }
+ if (data->color)
+ {
+ if (data->color[0] == '#' && SAFE_STRLEN(data->color) == 7)
+ eina_strbuf_append_printf(edje, "<color=%sff>", data->color);
+ else
+ eina_strbuf_append_printf(edje, "<color=%s>", data->color);
+
+ }
+ if (data->size)
+ eina_strbuf_append_printf(edje, "<font_size=%s>", data->size);
+ if (data->bg_color)
+ {
+ }
+ break;
+ }
+ else if (!SAFE_STRCMP(_HTMLtoEFLConvertTable[j].src, "img"))
+ {
+ PItemTagData data = trail->tagData;
+ char *width = IMAGE_DEFAULT_WIDTH, *height = IMAGE_DEFAULT_HEIGHT;
+ if (data->width)
+ width = data->width;
+ if (data->height)
+ height = data->height;
+ eina_strbuf_append_printf(edje, " absize=%sx%s", width, height);
+ if (data->href)
+ eina_strbuf_append_printf(edje, " href=%s></item>", data->href);
+ break;
+ }
+ }
+ else
+ {
+ if (_HTMLtoEFLConvertTable[j].dst[0] == '\0')
+ {
+ if (!SAFE_STRCMP(_HTMLtoEFLConvertTable[j].src, "font"))
+ {
+ if (trail->matchTag->tagData)
+ {
+ PFontTagData data = trail->matchTag->tagData;
+ if (data->name)
+ {
+ }
+ if (data->color)
+ eina_strbuf_append_printf(edje, "</color>");
+ if (data->size)
+ eina_strbuf_append_printf(edje, "</font>");
+ if (data->bg_color)
+ {
+ }
+ break;
+ }
+ }
+ }
+ }
+ switch(trail->tagPosType)
+ {
+ /* not support in efl
+ case TAGPOS_ALONE:
+ eina_strbuf_append(edje, " />");
+ break;
+ */
+ default:
+ eina_strbuf_append(edje, ">");
+ break;
+ }
+ break;
+ }
+ }/* for(j = 0; j < tableCnt; j++) end */
+ }
+ if (trail->str)
+ eina_strbuf_append(edje, trail->str);
+ }
+
+ eina_strbuf_replace_all(edje, " ", " ");
+ char *ret = eina_strbuf_string_steal(edje);
+ eina_strbuf_free(edje);
+ return ret;
+}
+
+char *string_for_entry_get(AppData *ad, int type_index, const char *str)
+{
+ DBG("type_index: %d str: %s ", type_index, str);
+ if (ad->targetAtoms[type_index].convert_to_entry)
+ return ad->targetAtoms[type_index].convert_to_entry(ad, type_index, str);
+ return NULL;
+}
+
+char *string_for_image_path_get(AppData *ad, int type_index, const char *str)
+{
+ DBG("type_index: %d str: %s ", type_index, str);
+ char *image_path = NULL;
+
+ if (type_index == ATOM_INDEX_HTML)
+ image_path = html_to_image_path(ad, type_index, str);
+ else if (type_index == ATOM_INDEX_EFL)
+ image_path = efl_to_image_path(ad, type_index, str);
+
+ return image_path;
+}
+/*
+static char *make_close_tag(Eina_List* nodes)
+{
+ CALLED();
+ PTagNode trail;
+ Eina_List *l;
+
+ Eina_Strbuf *tag_str = eina_strbuf_new();
+
+ EINA_LIST_FOREACH(nodes, l, trail)
+ {
+ if (trail->tag)
+ {
+ if (trail->tag_str)
+ eina_strbuf_append(tag_str, trail->tag_str);
+ else
+ {
+ eina_strbuf_append(tag_str, "<");
+ eina_strbuf_append(tag_str, trail->tag);
+ eina_strbuf_append(tag_str, ">");
+ }
+ }
+ if (trail->str)
+ eina_strbuf_append(tag_str, trail->str);
+ }
+
+ char *ret = eina_strbuf_string_steal(tag_str);
+ eina_strbuf_free(tag_str);
+ return ret;
+}
+*/
+static char *do_not_convert(AppData *ad, int type_index, const char *str)
+{
+ DBG("str: %s", str);
+ return SAFE_STRDUP(str);
+}
+/*
+ static char *efl_to_efl(AppData *ad, int type_index, const char *str)
+ {
+ CALLED();
+ return NULL;
+ }
+
+ static char *html_to_html(AppData *ad, int type_index, const char *str)
+ {
+ CALLED();
+ return NULL;
+ }
+ */
+
+#define IMAGE_DEFAULT_WIDTH "240"
+#define IMAGE_DEFAULT_HEIGHT "180"
+static char *make_image_path_tag(int type_index, const char *str)
+{
+ char *img_tag_str = "file://%s";
+ char *efl_img_tag = "<item absize="IMAGE_DEFAULT_WIDTH"x"IMAGE_DEFAULT_HEIGHT" href=file://%s>";
+ char *html_img_tag = "<img src=\"file://%s\">";
+
+ switch (type_index)
+ {
+ case ATOM_INDEX_HTML:
+ img_tag_str = html_img_tag;
+ break;
+ case ATOM_INDEX_EFL:
+ img_tag_str = efl_img_tag;
+ break;
+ case ATOM_INDEX_TEXT:
+ case ATOM_INDEX_IMAGE:
+ break;
+ default:
+ ERR("wrong type_index: %d", type_index);
+ return NULL;
+ }
+
+ size_t len = snprintf(NULL, 0, img_tag_str, str) + 1;
+ char *ret = MALLOC(sizeof(char) * len);
+ if (ret)
+ snprintf(ret, len, img_tag_str, str);
+ return ret;
+}
+
+/*
+static char *image_path_to_text(AppData *ad, int type_index, const char *str)
+{
+ DBG("str: %s", str);
+ return make_image_path_tag(ATOM_INDEX_TEXT, str);
+}
+*/
+
+static char *image_path_to_html(AppData *ad, int type_index, const char *str)
+{
+ DBG("str: %s", str);
+ return make_image_path_tag(ATOM_INDEX_HTML, str);
+}
+
+static char *image_path_to_efl(AppData *ad, int type_index, const char *str)
+{
+ DBG("str: %s", str);
+ return make_image_path_tag(ATOM_INDEX_EFL, str);
+}
+
+static char *image_path_to_image_path(AppData *ad, int type_index, const char *str)
+{
+ DBG("str: %s", str);
+ return make_image_path_tag(ATOM_INDEX_IMAGE, str);
+}
+
+static char *html_to_image_path(AppData *ad, int type_index, const char *str)
+{
+ DBG("str: %s", str);
+ Eina_Strbuf *sbuf = eina_strbuf_new();
+ Eina_Bool image_path_exists = EINA_FALSE;
+ int len = SAFE_STRLEN(str);
+ char *p = (char *)str;
+ char *s;
+ char *image_path = NULL;
+
+ if (type_index == ATOM_INDEX_HTML)
+ {
+ for (s = p; (p - s) <= len; p++)
+ {
+ if (*p == '<')
+ {
+ if (!SAFE_STRNCMP((p + 1), "img", 3))
+ {
+ for (p += 4; *p != '"'; p++);
+ if (!SAFE_STRNCMP((p + 1), "http:/", 6) || !SAFE_STRNCMP((p + 1), "file:/", 6))
+ {
+ if (!SAFE_STRNCMP((p + 1), "http:/", 6))
+ ad->clipdrawer->http_path = EINA_TRUE;
+ else
+ ad->clipdrawer->http_path = EINA_FALSE;
+
+ p += 7;
+ s = p;
+ for (; *p != '"'; p++);
+ eina_strbuf_append_length(sbuf, s, p - s);
+ image_path_exists = EINA_TRUE;
+ break;
+ }
+ else if ((*(p + 1) == '/'))
+ {
+ p++;
+ s = p;
+ for (; *p != '"'; p++);
+ eina_strbuf_append_length(sbuf, s, p - s);
+ image_path_exists = EINA_TRUE;
+ ad->clipdrawer->http_path = EINA_FALSE;
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ if (image_path_exists)
+ {
+ //Replace the space Unicode character(%20).
+ eina_strbuf_replace_all(sbuf, "%20", " ");
+ image_path = eina_strbuf_string_steal(sbuf);
+ eina_strbuf_free(sbuf);
+ return image_path;
+ }
+
+ eina_strbuf_free(sbuf);
+ return NULL;
+}
+
+static char *efl_to_image_path(AppData *ad, int type_index, const char *str)
+{
+ DBG("str: %s", str);
+ Eina_Strbuf *sbuf = eina_strbuf_new();
+ Eina_Bool image_path_exists = EINA_FALSE;
+ int len = SAFE_STRLEN(str);
+ char *p = (char *)str;
+ char *s;
+ char *image_path = NULL;
+
+ if (type_index == ATOM_INDEX_EFL)
+ {
+ for (s = p; (p - s) <= len; p++)
+ {
+ if (*p == '<')
+ {
+ if (!SAFE_STRNCMP((p + 1), "item", 3))
+ {
+ for (p += 5; *p != 'h'; p++);
+ if (!SAFE_STRNCMP(p, "href=file:/", 11))
+ {
+ p += 11;
+ s = p;
+ for (; *p != '>'; p++);
+ eina_strbuf_append_length(sbuf, s, p - s);
+ image_path_exists = EINA_TRUE;
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ if (image_path_exists)
+ {
+ image_path = eina_strbuf_string_steal(sbuf);
+ eina_strbuf_free(sbuf);
+ return image_path;
+ }
+
+ eina_strbuf_free(sbuf);
+ return NULL;
+}
+
+static char *markup_to_entry(AppData *ad, int type_index, const char *str)
+{
+ CALLED();
+ if (!str)
+ return NULL;
+
+ Eina_Strbuf *strbuf = eina_strbuf_new();
+ if (!strbuf)
+ return SAFE_STRDUP(str);
+ eina_strbuf_prepend(strbuf, "<font_size=28><color=#000000FF>");
+
+ const char *trail = str;
+
+ while (trail && *trail)
+ {
+ const char *pretrail = trail;
+ unsigned long length;
+ char *temp;
+ char *endtag;
+
+ trail = SAFE_STRCHR(trail, '<');
+ if (!trail)
+ {
+ eina_strbuf_append(strbuf, pretrail);
+ break;
+ }
+ endtag = SAFE_STRCHR(trail, '>');
+ if (!endtag)
+ break;
+
+ length = trail - pretrail;
+
+ temp = SAFE_STRNDUP(pretrail, length);
+ if (!temp)
+ {
+ trail++;
+ continue;
+ }
+
+ eina_strbuf_append(strbuf, temp);
+ FREE(temp);
+ trail++;
+
+ if (trail[0] == '/')
+ {
+ trail = endtag + 1;
+ continue;
+ }
+
+ if (!SAFE_STRNCMP(trail, "br", 2))
+ {
+ eina_strbuf_append(strbuf, "<br>");
+ trail = endtag + 1;
+ continue;
+ }
+ trail = endtag + 1;
+ }
+
+ if (type_index == ATOM_INDEX_HTML)
+ eina_strbuf_replace_all(strbuf, " ", " ");
+
+ char *entry_str = eina_strbuf_string_steal(strbuf);
+ eina_strbuf_free(strbuf);
+ return entry_str;
+}
+
+static char *polaris_to_entry(AppData *ad, int type_index, const char *str)
+{
+ DBG("str: %s", str);
+ return markup_to_entry(ad, type_index, str);
+}
+
+static char *html_to_entry(AppData *ad, int type_index, const char *str)
+{
+ DBG("str: %s", str);
+ return markup_to_entry(ad, type_index, str);
+}
+
+static char *efl_to_entry(AppData *ad, int type_index, const char *str)
+{
+ DBG("str: %s", str);
+ return markup_to_entry(ad, type_index, str);
+}
+
+static char *image_path_to_entry(AppData *ad, int type_index, const char *str)
+{
+ CALLED();
+ return NULL;
+}
+
+static char *text_to_entry(AppData *ad, int type_index, const char *str)
+{
+ DBG("str: %s", str);
+ char *markup = NULL;
+ markup = (char*)evas_textblock_text_utf8_to_markup(NULL, str);
+ char *for_entry = markup_to_entry(ad, type_index, markup);
+ FREE(markup);
+ return for_entry;
+}
+
+static Eina_List *make_tag_list(int type_index, const char *str)
+{
+ Eina_List *nodeList = NULL;
+ PTagNode nodeData;
+
+ nodeData = _get_start_node(str);
+
+ while (nodeData)
+ {
+ nodeList = eina_list_append(nodeList, nodeData);
+ nodeData = _get_next_node(nodeData);
+ }
+
+ _link_match_tags(nodeList);
+
+ switch(type_index)
+ {
+ case ATOM_INDEX_EFL:
+ _set_EFL_tag_data(nodeList);
+ break;
+ case ATOM_INDEX_HTML:
+ _set_HTML_tag_data(nodeList);
+ break;
+ default:
+ WRN("wrong index: %d", type_index);
+ }
+
+ _dumpNode(nodeList);
+ return nodeList;
+}
+
+static void cleanup_tag_list(Eina_List *nodeList)
+{
+ Eina_List *trail;
+ PTagNode nodeData;
+
+ EINA_LIST_FOREACH(nodeList, trail, nodeData)
+ _delete_node(nodeData);
+ eina_list_free(nodeList);
+}
+
+static char *html_to_efl(AppData *ad, int type_index, const char *str)
+{
+ CALLED();
+ Eina_List *nodeList = NULL;
+ nodeList = make_tag_list(type_index, str);
+ char *ret = _convert_to_edje(nodeList);
+ DBG("efl: %s", ret);
+ cleanup_tag_list(nodeList);
+
+ return ret;
+}
+
+static char *efl_to_html(AppData *ad, int type_index, const char *str)
+{
+ CALLED();
+ Eina_List *nodeList = NULL;
+ nodeList = make_tag_list(type_index, str);
+ char *ret = _convert_to_html(nodeList);
+ DBG("html: %s", ret);
+ cleanup_tag_list(nodeList);
+
+ return ret;
+}
+
+static char *text_to_html(AppData *ad, int type_index, const char *str)
+{
+ DBG("str: %s", str);
+ char *markup = NULL;
+ markup = (char*)evas_textblock_text_utf8_to_markup(NULL, str);
+ char *html = efl_to_html(ad, ATOM_INDEX_EFL, markup);
+ FREE(markup);
+ return html;
+}
+
+static char *text_to_efl(AppData *ad, int type_index, const char *str)
+{
+ DBG("str: %s", str);
+ char *ret = NULL;
+ ret = (char*)evas_textblock_text_utf8_to_markup(NULL, str);
+ return ret;
+}
+
+static char *to_text(AppData *ad, int type_index, const char *str)
+{
+ DBG("str: %s", str);
+ char *text = NULL;
+ if (type_index == ATOM_INDEX_HTML)
+ {
+ Eina_Strbuf *buf = eina_strbuf_new();
+ if (buf)
+ {
+ char *html;
+ eina_strbuf_append(buf, str);
+ eina_strbuf_replace_all(buf, " ", " ");
+ html = eina_strbuf_string_steal(buf);
+ eina_strbuf_free(buf);
+ text = (char*)evas_textblock_text_markup_to_utf8(NULL, html);
+ free(html);
+ return text;
+ }
+ }
+
+ text = (char*)evas_textblock_text_markup_to_utf8(NULL, str);
+ return text;
+}
+
--- /dev/null
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 _X_ATOM_H_
+#define _X_ATOM_H_
+
+enum ATOM_INDEX {
+ ATOM_INDEX_TARGET = 0,
+ ATOM_INDEX_TEXT = 1,
+ ATOM_INDEX_HTML = 2,
+ ATOM_INDEX_EFL = 3,
+ ATOM_INDEX_IMAGE = 4,
+ ATOM_INDEX_POLARIS = 5,
+ ATOM_INDEX_MAX = 6
+};
+
+#include "cbhm.h"
+
+void init_target_atoms(AppData *ad);
+void depose_target_atoms(AppData *ad);
+int atom_type_index_get(AppData *ad, Ecore_X_Atom atom);
+char *string_for_entry_get(AppData *ad, int type_index, const char *str);
+char *string_for_image_path_get(AppData *ad, int type_index, const char *str);
+Eina_Bool generic_converter(AppData *ad, Ecore_X_Atom reqAtom, CNP_ITEM *item, void **data_ret, int *size_ret, Ecore_X_Atom *ttype, int *tsize);
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 "xhandler.h"
+#include <X11/Xatom.h>
+#include <X11/Xlib.h>
+
+Eina_Bool cbhm_send_event(AppData *ad, Ecore_X_Window xwin, char *msg)
+{
+ ClipdrawerData *cd = ad->clipdrawer;
+
+ Ecore_X_Atom x_atom_cbhm_msg = ecore_x_atom_get("CBHM_MSG");
+ XClientMessageEvent m;
+ memset(&m, 0, sizeof(m));
+ m.type = ClientMessage;
+ m.display = ecore_x_display_get();
+ m.window = cd->x_main_win;
+ m.message_type = x_atom_cbhm_msg;
+ m.format = 8;
+ snprintf(m.data.b, 20, "%s", msg);
+
+ XSendEvent(ecore_x_display_get(), xwin, False, NoEventMask, (XEvent*)&m);
+
+ ecore_x_sync();
+
+ return EINA_TRUE;
+}
+
+Ecore_X_Window get_selection_owner(AppData *ad, Ecore_X_Selection selection)
+{
+ CALLED();
+ if (!ad) return 0;
+ Ecore_X_Atom sel = 0;
+ switch(selection)
+ {
+ case ECORE_X_SELECTION_SECONDARY:
+ sel = ECORE_X_ATOM_SELECTION_SECONDARY;
+ break;
+ case ECORE_X_SELECTION_CLIPBOARD:
+ sel = ECORE_X_ATOM_SELECTION_CLIPBOARD;
+ break;
+ default:
+ return 0;
+ }
+ return XGetSelectionOwner(ad->x_disp, sel);
+}
+
+Eina_Bool is_cbhm_selection_owner(AppData *ad, Ecore_X_Selection selection)
+{
+ CALLED();
+ if (!ad) return EINA_FALSE;
+ Ecore_X_Window sel_owner = get_selection_owner(ad, selection);
+ DBG("selection_owner: 0x%x, x_event_win: 0x%x", sel_owner, ad->x_event_win);
+ if (sel_owner == ad->x_event_win)
+ return EINA_TRUE;
+ return EINA_FALSE;
+}
+
+Eina_Bool set_selection_owner(AppData *ad, Ecore_X_Selection selection, CNP_ITEM *item)
+{
+ CALLED();
+ if (!ad) return EINA_FALSE;
+
+ if (!item && is_cbhm_selection_owner(ad, selection))
+ return EINA_TRUE;
+
+ Eina_Bool (*selection_func)(Ecore_X_Window win, const void *data, int size) = NULL;
+
+ switch(selection)
+ {
+ case ECORE_X_SELECTION_SECONDARY:
+// ecore_x_selection_secondary_clear();
+ selection_func = ecore_x_selection_secondary_set;
+ break;
+ case ECORE_X_SELECTION_CLIPBOARD:
+// ecore_x_selection_clipboard_clear();
+ selection_func = ecore_x_selection_clipboard_set;
+ break;
+ default:
+ return EINA_FALSE;
+ }
+
+ slot_selected_item_set(ad);
+ if (selection_func(ad->x_event_win, NULL, 0))
+ return EINA_TRUE;
+
+ ERR("set selection failed");
+ return EINA_FALSE;
+}
+
+static Eina_Bool selection_timer_cb(void *data)
+{
+ CALLED();
+ AppData *ad = data;
+ XHandlerData *xd = ad->xhandler;
+
+ set_selection_owner(ad, ECORE_X_SELECTION_CLIPBOARD, NULL);
+ if (is_cbhm_selection_owner(ad, ECORE_X_SELECTION_CLIPBOARD))
+ {
+ ecore_timer_del(xd->selection_timer);
+ xd->selection_timer = NULL;
+ return ECORE_CALLBACK_CANCEL;
+ }
+ return ECORE_CALLBACK_RENEW;
+}
+
+static Eina_Bool _xsel_clear_cb(void *data, int type, void *event)
+{
+ CALLED();
+ if (!data || !event) return EINA_TRUE;
+ AppData *ad = data;
+ ClipdrawerData *cd = ad->clipdrawer;
+ XHandlerData *xd = ad->xhandler;
+ Ecore_X_Event_Selection_Clear *ev = event;
+
+ DBG("in %s, ev->win: 0x%x\n", __func__, ev->win);
+
+ if (is_cbhm_selection_owner(ad, ev->selection)) return EINA_TRUE;
+
+ if (ev->selection == ECORE_X_SELECTION_SECONDARY && cd->item_clicked)
+ {
+ cd->item_clicked = EINA_FALSE;
+ set_selection_owner(ad, ECORE_X_SELECTION_SECONDARY, NULL);
+ }
+
+ if (ev->selection != ECORE_X_SELECTION_CLIPBOARD)
+ return ECORE_CALLBACK_PASS_ON;
+
+ ecore_x_selection_clipboard_request(ad->x_event_win, ECORE_X_SELECTION_TARGET_TARGETS);
+
+ if (xd->selection_timer)
+ {
+ ecore_timer_del(xd->selection_timer);
+ xd->selection_timer = NULL;
+ }
+ xd->selection_timer = ecore_timer_add(SELECTION_CHECK_TIME, selection_timer_cb, ad);
+
+ return ECORE_CALLBACK_DONE;
+}
+
+static Eina_Bool _xsel_request_cb(void *data, int type, void *event)
+{
+ CALLED();
+#ifdef MDM_ENABLE
+ if (!data || !event || !_mdm_get_allow_clipboard()) return ECORE_CALLBACK_PASS_ON;
+#else
+ if (!data || !event) return ECORE_CALLBACK_PASS_ON;
+#endif
+ AppData *ad = data;
+ Ecore_X_Event_Selection_Request *ev = event;
+
+ char *names[3];
+ DBG("selection_owner: 0x%x, ev->... owner: 0x%x, req: 0x%x, selection: %s, target: %s, property: %s",
+ get_selection_owner(ad, ECORE_X_SELECTION_CLIPBOARD), ev->owner, ev->requestor,
+ names[0] = ecore_x_atom_name_get(ev->selection),
+ names[1] = ecore_x_atom_name_get(ev->target),
+ names[2] = ecore_x_atom_name_get(ev->property));
+ FREE(names[0]);
+ FREE(names[1]);
+ FREE(names[2]);
+
+ CNP_ITEM *item = NULL;
+ if (ev->selection == ECORE_X_ATOM_SELECTION_CLIPBOARD)
+ item = item_get_last(ad);
+ else if (ev->selection == ECORE_X_ATOM_SELECTION_SECONDARY)
+ item = ad->clip_selected_item;
+ else
+ return ECORE_CALLBACK_PASS_ON;
+
+ if (!item)
+ {
+ DBG("has no item");
+ ecore_x_selection_notify_send(ev->requestor,
+ ev->selection,
+ None,
+ None,
+ CurrentTime);
+ DBG("change property notify");
+ ecore_x_flush();
+ return ECORE_CALLBACK_DONE;
+ }
+
+ Ecore_X_Atom property = None;
+ void *data_ret = NULL;
+ int size_ret;
+ Ecore_X_Atom ttype;
+ int tsize;
+
+ if (!generic_converter(ad, ev->target, item, &data_ret, &size_ret, &ttype, &tsize))
+ /* if (!ecore_x_selection_convert(ev->selection,
+ ev->target,
+ &data_ret, &len, &typeAtom, &typesize))*/
+
+ {
+ /* Refuse selection, conversion to requested target failed */
+ DBG("converter return FALSE");
+ }
+ else if (data_ret)
+ {
+ /* FIXME: This does not properly handle large data transfers */
+ ecore_x_window_prop_property_set(
+ ev->requestor,
+ ev->property,
+ ttype,
+ tsize,
+ data_ret,
+ size_ret);
+ property = ev->property;
+ FREE(data_ret);
+ DBG("change property");
+ }
+
+ ecore_x_selection_notify_send(ev->requestor,
+ ev->selection,
+ ev->target,
+ property,
+ CurrentTime);
+ DBG("change property notify");
+ ecore_x_flush();
+ return ECORE_CALLBACK_DONE;
+}
+
+static void send_convert_selection_target(AppData *ad, Ecore_X_Selection_Data_Targets *targets_data)
+{
+ CALLED();
+ /* struct _Ecore_X_Selection_Data_Targets {
+ Ecore_X_Selection_Data data;
+ struct _Ecore_X_Selection_Data {
+ enum {
+ ECORE_X_SELECTION_CONTENT_NONE,
+ ECORE_X_SELECTION_CONTENT_TEXT,
+ ECORE_X_SELECTION_CONTENT_FILES,
+ ECORE_X_SELECTION_CONTENT_TARGETS,
+ ECORE_X_SELECTION_CONTENT_CUSTOM
+ } content;
+ unsigned char *data;
+ int length;
+ int format;
+ int (*FREE)(void *data);
+ };
+
+ char **targets;
+ int num_targets;
+ };*/
+ if (!targets_data || !ad)
+ return;
+ Ecore_X_Atom *atomlist = (Ecore_X_Atom *)targets_data->data.data;
+ if (!atomlist)
+ return;
+
+ DBG("targets_data->num_targets: 0x%x", targets_data->num_targets);
+ int i, j, k;
+ for (i = 0; i < targets_data->num_targets; i++)
+ {
+ DBG("get target: %s", targets_data->targets[i]);
+ for (j = 0; j < ATOM_INDEX_MAX; j++)
+ {
+ for (k = 0; k < ad->targetAtoms[j].atom_cnt; k++)
+ {
+ if (!SAFE_STRCMP(targets_data->targets[i], ad->targetAtoms[j].name[k]))
+ {
+ DBG("find matched target: %s", ad->targetAtoms[j].name[k]);
+ ecore_x_selection_clipboard_request(ad->x_event_win, ad->targetAtoms[j].name[k]);
+ return;
+ }
+ }
+ }
+ }
+ ERR("get target atom failed");
+}
+
+static Eina_Bool _add_selection_imagepath(AppData* ad, char *str)
+{
+ if (!ad || !str)
+ return EINA_FALSE;
+ DBG("get FILE: %s", str);
+ char *slash = SAFE_STRCHR(str, '/');
+ while (slash && slash[0] == '/')
+ {
+ if (slash[1] != '/')
+ {
+ char *filepath;
+ filepath = SAFE_STRDUP(slash);
+ if (filepath)
+ {
+ if (ecore_file_exists(filepath))
+ {
+ item_add_by_data(ad, ad->targetAtoms[ATOM_INDEX_IMAGE].atom[0], filepath, SAFE_STRLEN(filepath) + 1, EINA_TRUE);
+ return EINA_TRUE;
+ }
+ else
+ FREE(filepath);
+ }
+ break;
+ }
+ slash++;
+ }
+ ERR("it isn't normal file = %s", str);
+ return EINA_FALSE;
+}
+
+static void _get_selection_data_files(AppData* ad, Ecore_X_Selection_Data_Files *files_data)
+{
+/* struct _Ecore_X_Selection_Data_Files {
+ Ecore_X_Selection_Data data;
+ char **files;
+ int num_files;
+ }; */
+
+ int i;
+ for (i = 0; i < files_data->num_files; i++)
+ {
+ _add_selection_imagepath(ad, files_data->files[i]);
+ }
+}
+
+static Eina_Bool _xsel_notify_cb(void *data, int type, void *event)
+{
+ CALLED();
+ if (!data || !event)
+ return ECORE_CALLBACK_PASS_ON;
+
+ AppData *ad = data;
+ XHandlerData *xd = ad->xhandler;
+ if (xd->selection_timer)
+ {
+ ecore_timer_del(xd->selection_timer);
+ xd->selection_timer = NULL;
+ }
+
+/* struct _Ecore_X_Event_Selection_Notify
+ {
+ Ecore_X_Window win;
+ Ecore_X_Time time;
+ Ecore_X_Selection selection;
+ Ecore_X_Atom atom;
+ char *target;
+ void *data;
+ };*/
+ Ecore_X_Event_Selection_Notify *ev = event;
+
+ switch (ev->selection)
+ {
+ case ECORE_X_SELECTION_CLIPBOARD:
+ break;
+ case ECORE_X_SELECTION_SECONDARY:
+ case ECORE_X_SELECTION_PRIMARY:
+ case ECORE_X_SELECTION_XDND:
+ default:
+ return ECORE_CALLBACK_PASS_ON;
+ }
+ if (!ev->data)
+ goto set_clipboard_selection_owner;
+
+/* struct _Ecore_X_Selection_Data {
+ enum {
+ ECORE_X_SELECTION_CONTENT_NONE,
+ ECORE_X_SELECTION_CONTENT_TEXT,
+ ECORE_X_SELECTION_CONTENT_FILES,
+ ECORE_X_SELECTION_CONTENT_TARGETS,
+ ECORE_X_SELECTION_CONTENT_CUSTOM
+ } content;
+ unsigned char *data;
+ int length;
+ int format;
+ int (*FREE)(void *data);
+ };*/
+ Ecore_X_Selection_Data *sel_data = ev->data;
+ switch (sel_data->content)
+ {
+ case ECORE_X_SELECTION_CONTENT_NONE:
+ DBG("ECORE_X_SELECTION_CONTENT_NONE");
+ break;
+ case ECORE_X_SELECTION_CONTENT_TEXT:
+ DBG("ECORE_X_SELECTION_CONTENT_TEXT");
+ /* struct _Ecore_X_Selection_Data_Text {
+ Ecore_X_Selection_Data data;
+ char *text;
+ };
+ Ecore_X_Selection_Data_Text *text_data = ev->data;*/
+ // DBG("sel_data->data: 0x%x, text_data->text: 0x%x", sel_data->data, text_data->text);
+ break;
+ case ECORE_X_SELECTION_CONTENT_FILES:
+ DBG("ECORE_X_SELECTION_CONTENT_FILES");
+ _get_selection_data_files(ad, ev->data);
+ goto set_clipboard_selection_owner;
+ break;
+ case ECORE_X_SELECTION_CONTENT_TARGETS:
+ DBG("ECORE_X_SELECTION_CONTENT_TARGETS");
+ send_convert_selection_target(ad, ev->data);
+ if (!is_cbhm_selection_owner(ad, ECORE_X_SELECTION_CLIPBOARD))
+ xd->selection_timer = ecore_timer_add(SELECTION_CHECK_TIME, selection_timer_cb, ad);
+ return ECORE_CALLBACK_DONE;
+ case ECORE_X_SELECTION_CONTENT_CUSTOM:
+ DBG("ECORE_X_SELECTION_CONTENT_CUSTOM");
+ break;
+ }
+ char *name;
+ DBG("get atom: %d(%s), target: %s, length: %d, format: %d",
+ ev->atom, name = ecore_x_atom_name_get(ev->atom), ev->target, sel_data->length, sel_data->format);
+ FREE(name);
+#ifdef MDM_ENABLE
+ if (_mdm_get_allow_clipboard())
+ {
+#else
+ {
+#endif
+ Ecore_X_Atom targetAtom = ecore_x_atom_get(ev->target);
+ char *stripstr = SAFE_STRNDUP((char *)sel_data->data, sel_data->length);
+ DBG("get data: %s, len: %d", stripstr, SAFE_STRLEN(stripstr));
+ if (atom_type_index_get(ad, targetAtom) == ATOM_INDEX_IMAGE)
+ {
+ _add_selection_imagepath(ad, stripstr);
+ FREE(stripstr);
+ }
+ else
+ item_add_by_data(ad, targetAtom, stripstr, SAFE_STRLEN(stripstr) + 1, EINA_TRUE);
+ }
+// FREE(stripstr);
+
+set_clipboard_selection_owner:
+ set_selection_owner(ad, ECORE_X_SELECTION_CLIPBOARD, NULL);
+ if (!is_cbhm_selection_owner(ad, ECORE_X_SELECTION_CLIPBOARD))
+ xd->selection_timer = ecore_timer_add(SELECTION_CHECK_TIME, selection_timer_cb, ad);
+
+ return ECORE_CALLBACK_DONE;
+}
+
+static Eina_Bool _xclient_msg_cb(void *data, int type, void *event)
+{
+ CALLED();
+ if (!data || !event) return ECORE_CALLBACK_PASS_ON;
+
+ AppData *ad = data;
+ XHandlerData *xd = ad->xhandler;
+ Ecore_X_Event_Client_Message *ev = event;
+
+ if (ev->message_type != xd->atomCBHM_MSG)
+ return -1;
+
+ DBG("## %s", ev->data.b);
+
+/* Atom cbhm_atoms[ITEM_CNT_MAX];
+ char atomname[10];
+ Ecore_X_Window reqwin = ev->win;*/
+
+ if (!SAFE_STRCMP("set_owner", ev->data.b))
+ {
+ cbhm_send_event(ad, ev->win, "SET_OWNER");
+ }
+ else if (!SAFE_STRNCMP("show", ev->data.b, 4))
+ {
+#ifdef MDM_ENABLE
+ if (_mdm_get_allow_clipboard())
+ {
+#endif
+ ad->x_active_win = ev->win;
+ if (ev->data.b[4] == '1')
+ clipdrawer_paste_textonly_set(ad, EINA_FALSE);
+ else
+ clipdrawer_paste_textonly_set(ad, EINA_TRUE);
+
+ clipdrawer_activate_view(ad);
+#ifdef MDM_ENABLE
+ }
+#endif
+ }
+ else if (!SAFE_STRCMP("cbhm_hide", ev->data.b))
+ {
+ Ecore_X_Illume_Clipboard_State state = ecore_x_e_illume_clipboard_state_get(ad->x_active_win);
+ if(state == ECORE_X_ILLUME_CLIPBOARD_STATE_ON)
+ {
+ clipdrawer_lower_view(ad);
+ }
+ }
+ else if (!SAFE_STRCMP("get count", ev->data.b))
+ {
+ int i, icount;
+ char countbuf[10];
+
+ for (i = 0; i < ATOM_INDEX_COUNT_MAX; i++)
+ {
+ icount = item_count_get(ad, i);
+ snprintf(countbuf, 10, "%d", icount);
+ ecore_x_window_prop_property_set(
+ ev->win,
+ xd->atomCBHMCount[i],
+ xd->atomUTF8String,
+ 8,
+ countbuf,
+ strlen(countbuf)+1);
+ }
+ }
+ /* for OSP */
+ else if (!SAFE_STRNCMP("GET_ITEM", ev->data.b, 8))
+ {
+ int itempos = 0;
+ int index = 8;
+ xd->atomCBHM_ITEM = ecore_x_atom_get("CBHM_ITEM");
+
+ while ('0' <= ev->data.b[index] && ev->data.b[index] <= '9')
+ {
+ itempos = (itempos * 10) + (ev->data.b[index] - '0');
+ index++;
+ }
+
+ CNP_ITEM *item = item_get_by_index(ad, itempos);
+ if (!item)
+ {
+ Ecore_X_Atom itemtype = ecore_x_atom_get("CBHM_ERROR");
+
+ char error_buf[] = "OUT OF BOUND";
+ int bufsize = sizeof(error_buf);
+ ecore_x_window_prop_property_set(
+ ev->win,
+ xd->atomCBHM_ITEM,
+ itemtype,
+ 8,
+ error_buf,
+ bufsize);
+ DBG("GET ITEM ERROR msg: %s, index: %d, item count: %d",
+ ev->data.b, itempos, item_count_get(ad, ATOM_INDEX_COUNT_ALL));
+ }
+ else
+ {
+ ecore_x_window_prop_property_set(
+ ev->win,
+ xd->atomCBHM_ITEM,
+ ad->targetAtoms[item->type_index].atom[0],
+ 8,
+ item->data,
+ item->len);
+ DBG("GET ITEM index: %d, item type: %d, item data: %s, item->len: %d",
+ itempos, ad->targetAtoms[item->type_index].atom[0],
+ (char *)item->data, item->len);
+ }
+ }
+ else if (!SAFE_STRNCMP("SET_ITEM", ev->data.b, 8))
+ {
+ int ret = 0;
+ int size_ret = 0;
+ unsigned long num_ret = 0;
+ unsigned long bytes = 0;
+ unsigned char *item_data = NULL;
+ unsigned char *prop_ret = NULL;
+ Ecore_X_Atom format = 0;
+ int i;
+ char *format_name = NULL;
+ xd->atomCBHM_ITEM = ecore_x_atom_get("CBHM_ITEM");
+ ret = XGetWindowProperty(ecore_x_display_get(), ad->x_event_win, xd->atomCBHM_ITEM, 0, LONG_MAX, False, ecore_x_window_prop_any_type(),
+ (Atom*)&format, &size_ret, &num_ret, &bytes, &prop_ret);
+ ecore_x_sync();
+ if (ret != Success)
+ {
+ DBG("Failed Set Item");
+ return EINA_FALSE;
+ }
+ if (!num_ret)
+ {
+ XFree(prop_ret);
+ return EINA_FALSE;
+ }
+
+ if (!(item_data = malloc(num_ret * size_ret / 8)))
+ {
+ XFree(item_data);
+ return EINA_FALSE;
+ }
+
+ switch (size_ret)
+ {
+ case 8:
+ default:
+ for (i = 0; i < num_ret; i++)
+ item_data[i] = prop_ret[i];
+ break;
+ case 16:
+ for (i = 0; i < num_ret; i++)
+ ((unsigned short *)item_data)[i] = ((unsigned short *)prop_ret)[i];
+ break;
+ case 32:
+ for (i = 0; i < num_ret; i++)
+ ((unsigned int *)item_data)[i] = ((unsigned long *)prop_ret)[i];
+ break;
+ }
+
+ XFree(prop_ret);
+
+ format_name = ecore_x_atom_name_get(format);
+ DBG("item_data:%s format:%s(%d)\n", item_data, format_name, format);
+ free(format_name);
+ item_add_by_data(ad, format, item_data, SAFE_STRLEN((char *)item_data) + 1, EINA_TRUE);
+ }
+ else if (!SAFE_STRNCMP("DEL_ITEM", ev->data.b, 8))
+ {
+ int itempos = 0;
+ int index = 8;
+
+ while ('0' <= ev->data.b[index] && ev->data.b[index] <= '9')
+ {
+ itempos = (itempos * 10) + (ev->data.b[index] - '0');
+ index++;
+ }
+
+ item_delete_by_index(ad, itempos);
+ }
+/* else if (!SAFE_STRNCMP("get #", ev->data.b, 5))
+ {
+ // FIXME : handle greater than 9
+ int num = ev->data.b[5] - '0';
+ int cur = get_current_history_position();
+ num = cur + num - 1;
+ if (num > ITEMS_CNT_MAX-1)
+ num = num-ITEMS_CNT_MAX;
+
+ if (num >= 0 && num < ITEMS_CNT_MAX)
+ {
+ DBG("## pos : #%d", num);
+ // FIXME : handle with correct atom
+ sprintf(atomname, "CBHM_c%d", num);
+ cbhm_atoms[0] = XInternAtom(g_disp, atomname, False);
+
+ CNP_ITEM *item = clipdr;
+
+
+ if (clipdrawer_get_item_data(ad, num) != NULL)
+ {
+ XChangeProperty(g_disp, reqwin, cbhm_atoms[0], atomUTF8String,
+ 8, PropModeReplace,
+ (unsigned char *) clipdrawer_get_item_data(ad, num),
+ (int) SAFE_STRLEN(clipdrawer_get_item_data(ad, num)));
+ }
+ }
+ }
+ else if (!SAFE_STRCMP("get all", ev->data.b))
+ {
+// print_history_buffer();
+ pos = get_current_history_position();
+ for (i = 0; i < 5; i++)
+ {
+ DBG("## %d -> %d", i, pos);
+ sprintf(atomname, "CBHM_c%d", i);
+ cbhm_atoms[i] = XInternAtom(g_disp, atomname, False);
+ if (clipdrawer_get_item_data(ad, pos) != NULL)
+ {
+ XChangeProperty(g_disp, reqwin, cbhm_atoms[i], atomUTF8String,
+ 8, PropModeReplace,
+ (unsigned char *) clipdrawer_get_item_data(ad, pos),
+ (int) SAFE_STRLEN(clipdrawer_get_item_data(ad, pos)));
+ }
+ pos--;
+ if (pos < 0)
+ pos = ITEMS_CNT_MAX-1;
+ }
+ }*/
+/* else if (!SAFE_STRCMP("get raw", ev->data.b))
+ {
+
+ if (get_storage_start_addr != NULL)
+ {
+ XChangeProperty(g_disp, reqwin, atomCBHM_cRAW, atomUTF8String,
+ 8, PropModeReplace,
+ (unsigned char *) get_storage_start_addr(),
+ (int) get_total_storage_size());
+ }
+ }
+ */
+ XFlush(ad->x_disp);
+
+ return EINA_TRUE;
+}
+
+static Eina_Bool _xfocus_out_cb(void *data, int type, void *event)
+{
+ CALLED();
+ if (!data || !event) return ECORE_CALLBACK_PASS_ON;
+
+ AppData *ad = data;
+ DBG("XE:FOCUS OUT");
+ clipdrawer_lower_view(ad);
+ return EINA_TRUE;
+}
+
+static Eina_Bool _xproperty_notify_cb(void *data, int type, void *event)
+{
+ if (!data || !event) return ECORE_CALLBACK_PASS_ON;
+
+ AppData *ad = data;
+ XHandlerData *xd = ad->xhandler;
+ Ecore_X_Event_Window_Property *pevent = (Ecore_X_Event_Window_Property *)event;
+ char *filepath;
+
+ //Screen captured.
+ if (pevent->win == ad->x_event_win)
+ {
+ if (pevent->atom == xd->atomShotString)
+ {
+ filepath = ecore_x_window_prop_string_get(ad->x_event_win, xd->atomShotString);
+ if (filepath && ecore_file_exists(filepath))
+ {
+ DBG("captured item added filepath = %s", filepath);
+ item_add_by_data(ad, ad->targetAtoms[ATOM_INDEX_IMAGE].atom[0], filepath, SAFE_STRLEN(filepath) + 1, EINA_FALSE);
+ }
+ else FREE(filepath);
+ }
+ }
+
+ return EINA_TRUE;
+}
+
+static Eina_Bool _xwin_destroy_cb(void *data, int type, void *event)
+{
+ CALLED();
+ if (!data || !event) return ECORE_CALLBACK_PASS_ON;
+
+ AppData *ad = data;
+ Ecore_X_Event_Window_Destroy *pevent = event;
+ if (ad->x_active_win != pevent->win)
+ return ECORE_CALLBACK_PASS_ON;
+ clipdrawer_lower_view(ad);
+ return ECORE_CALLBACK_DONE;
+}
+
+XHandlerData *init_xhandler(AppData *ad)
+{
+ XHandlerData *xd = CALLOC(1, sizeof(XHandlerData));
+ if (!xd)
+ return NULL;
+ xd->xsel_clear_handler = ecore_event_handler_add(ECORE_X_EVENT_SELECTION_CLEAR, _xsel_clear_cb, ad);
+ xd->xsel_request_handler = ecore_event_handler_add(ECORE_X_EVENT_SELECTION_REQUEST, _xsel_request_cb, ad);
+ xd->xsel_notify_handler = ecore_event_handler_add(ECORE_X_EVENT_SELECTION_NOTIFY, _xsel_notify_cb, ad);
+ xd->xclient_msg_handler = ecore_event_handler_add(ECORE_X_EVENT_CLIENT_MESSAGE, _xclient_msg_cb, ad);
+ xd->xfocus_out_handler = ecore_event_handler_add(ECORE_X_EVENT_WINDOW_FOCUS_OUT, _xfocus_out_cb, ad);
+ xd->xproperty_notify_handler = ecore_event_handler_add(ECORE_X_EVENT_WINDOW_PROPERTY, _xproperty_notify_cb, ad);
+ xd->xwindow_destroy_handler = ecore_event_handler_add(ECORE_X_EVENT_WINDOW_DESTROY, _xwin_destroy_cb, ad);
+
+ xd->atomInc = ecore_x_atom_get("INCR");
+ xd->atomShotString = ecore_x_atom_get("_E_SHOT_IMG_FILEPATH");
+ xd->atomCBHM_MSG = ecore_x_atom_get("CBHM_MSG");
+ xd->atomCBHM_ITEM = ecore_x_atom_get("CBHM_ITEM");
+ xd->atomCBHMCount[ATOM_INDEX_COUNT_ALL] = ecore_x_atom_get("CBHM_cCOUNT");
+ xd->atomCBHMCount[ATOM_INDEX_COUNT_TEXT] = ecore_x_atom_get("CBHM_TEXT_cCOUNT");
+ xd->atomCBHMCount[ATOM_INDEX_COUNT_IMAGE] = ecore_x_atom_get("CBHM_IMAGE_cCOUNT");
+ xd->atomUTF8String = ecore_x_atom_get("UTF8_STRING");
+ xd->atomCBHM_SELECTED_ITEM = ecore_x_atom_get("CBHM_SELECTED_ITEM");
+
+ int i;
+ for (i = 0; i < ITEM_CNT_MAX; i++)
+ {
+ char buf[20];
+ snprintf(buf, sizeof(buf), "CBHM_ITEM%d", i);
+ xd->atomCBHM_ITEM = ecore_x_atom_get(buf);
+ }
+
+ return xd;
+}
+
+void depose_xhandler(XHandlerData *xd)
+{
+ ecore_event_handler_del(xd->xsel_clear_handler);
+ ecore_event_handler_del(xd->xsel_request_handler);
+ ecore_event_handler_del(xd->xsel_notify_handler);
+ ecore_event_handler_del(xd->xclient_msg_handler);
+ ecore_event_handler_del(xd->xfocus_out_handler);
+ ecore_event_handler_del(xd->xproperty_notify_handler);
+ ecore_event_handler_del(xd->xwindow_destroy_handler);
+ FREE(xd);
+}
+
+void slot_property_set(AppData *ad, int index)
+{
+ XHandlerData *xd = ad->xhandler;
+
+ if (index < 0)
+ {
+ int i = 0;
+ char buf[12];
+ CNP_ITEM *item;
+ Eina_List *l;
+
+ EINA_LIST_FOREACH(ad->item_list, l, item)
+ {
+ snprintf(buf, sizeof(buf), "CBHM_ITEM%d", i);
+ xd->atomCBHM_ITEM = ecore_x_atom_get(buf);
+ if (item)
+ {
+ ecore_x_window_prop_property_set(
+ ad->x_event_win,
+ xd->atomCBHM_ITEM,
+ ad->targetAtoms[item->type_index].atom[0],
+ 8,
+ item->data,
+ item->len);
+ DBG("GET ITEM index: %d, item type: %d, item data: %s, item->len: %d",
+ i, ad->targetAtoms[item->type_index].atom[0],
+ (char *)item->data, item->len);
+ }
+
+ i++;
+ }
+ }
+ else if (index < ITEM_CNT_MAX)
+ {
+ char buf[12];
+ snprintf(buf, sizeof(buf), "CBHM_ITEM%d", index);
+ xd->atomCBHM_ITEM = ecore_x_atom_get(buf);
+
+ CNP_ITEM *item = item_get_by_index(ad, index);
+ if (!item)
+ {
+ Ecore_X_Atom itemtype = ecore_x_atom_get("CBHM_ERROR");
+ char error_buf[] = "OUT OF BOUND";
+ int bufsize = sizeof(error_buf);
+ ecore_x_window_prop_property_set(
+ ad->x_event_win,
+ xd->atomCBHM_ITEM,
+ itemtype,
+ 8,
+ error_buf,
+ bufsize);
+ DBG("CBHM Error: index: %d, item count: %d",
+ index, item_count_get(ad, ATOM_INDEX_COUNT_ALL));
+ }
+ else
+ {
+ ecore_x_window_prop_property_set(
+ ad->x_event_win,
+ xd->atomCBHM_ITEM,
+ ad->targetAtoms[item->type_index].atom[0],
+ 8,
+ item->data,
+ item->len);
+ DBG("GET ITEM index: %d, item type: %d, item data: %s, item->len: %d",
+ index, ad->targetAtoms[item->type_index].atom[0],
+ (char *)item->data, item->len);
+ }
+ }
+ else
+ {
+ DBG("can't set property");
+ }
+}
+
+void slot_item_count_set(AppData *ad)
+{
+ XHandlerData *xd = ad->xhandler;
+ int i, icount;
+ char countbuf[10];
+
+ for (i = 0; i < ATOM_INDEX_COUNT_MAX; i++)
+ {
+ icount = item_count_get(ad, i);
+ snprintf(countbuf, 10, "%d", icount);
+ ecore_x_window_prop_property_set(
+ ad->x_event_win,
+ xd->atomCBHMCount[i],
+ xd->atomUTF8String,
+ 8,
+ countbuf,
+ strlen(countbuf)+1);
+ }
+}
+
+void slot_selected_item_set(AppData *ad)
+{
+ XHandlerData *xd = ad->xhandler;
+ CNP_ITEM *item = ad->clip_selected_item;
+
+ if (item)
+ {
+ char buf[20];
+ snprintf(buf, sizeof(buf), "CBHM_SELECTED_ITEM");
+ xd->atomCBHM_SELECTED_ITEM = ecore_x_atom_get(buf);
+
+ ecore_x_window_prop_property_set(
+ ad->x_event_win,
+ xd->atomCBHM_SELECTED_ITEM,
+ ad->targetAtoms[item->type_index].atom[0],
+ 8,
+ item->data,
+ item->len);
+ }
+ else
+ {
+ Ecore_X_Atom itemtype = ecore_x_atom_get("CBHM_ERROR");
+
+ char error_buf[] = "NOT EXIST SELECTED ITEM";
+ int bufsize = sizeof(error_buf);
+ ecore_x_window_prop_property_set(
+ ad->x_event_win,
+ xd->atomCBHM_SELECTED_ITEM,
+ itemtype,
+ 8,
+ error_buf,
+ bufsize);
+
+ }
+}
+#ifdef MDM_ENABLE
+#ifdef MDM_PHASE_2
+static void _popup_timeout_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ Evas_Object *win = data;
+ evas_object_del(obj);
+ evas_object_del(win);
+}
+#endif
+Eina_Bool _mdm_get_allow_clipboard()
+{
+#ifdef MDM_PHASE_2
+ Eina_Bool result = EINA_TRUE;
+ if (mdm_get_service() == MDM_RESULT_SUCCESS)
+ {
+ ret = mdm_get_allow_clipboard();
+ if (ret == MDM_RESTRICTED)
+ {
+ Evas_Object *win = elm_win_add(NULL, "cbhm popup", ELM_WIN_DIALOG_BASIC);
+ int w,h;
+ ecore_x_window_size_get(ecore_x_window_root_first_get(), &w, &h);
+ evas_object_resize(win, w, h);
+ elm_win_alpha_set(win, EINA_TRUE);
+ evas_object_show(win);
+
+ Evas_Object *popup;
+ popup = elm_popup_add(win);
+
+ evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ elm_object_text_set(popup, "Security policy restricts using clipboard");
+ elm_popup_timeout_set(popup, 2.0);
+ evas_object_smart_callback_add(popup, "timeout", _popup_timeout_cb, win);
+ evas_object_show(popup);
+
+ result = EINA_FALSE;
+ }
+ else
+ result = EINA_TRUE;
+ }
+ else
+ return EINA_TRUE;
+
+ mdm_release_service();
+
+ return result;
+#else
+ return EINA_TRUE;
+#endif
+}
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 _XCNPHANDLER_H_
+#define _XCNPHANDLER_H_
+
+#include <Ecore_X.h>
+#include <Ecore.h>
+#ifdef MDM_ENABLE
+#include <mdm.h>
+#endif
+
+enum ATOM_INDEX_COUNT {
+ ATOM_INDEX_COUNT_ALL = 0,
+ ATOM_INDEX_COUNT_TEXT = 1,
+ ATOM_INDEX_COUNT_IMAGE = 2,
+ ATOM_INDEX_COUNT_MAX = 3
+};
+
+struct _XHandlerData {
+ Ecore_Event_Handler *xsel_clear_handler;
+ Ecore_Event_Handler *xsel_request_handler;
+ Ecore_Event_Handler *xsel_notify_handler;
+ Ecore_Event_Handler *xclient_msg_handler;
+ Ecore_Event_Handler *xfocus_out_handler;
+ Ecore_Event_Handler *xproperty_notify_handler;
+ Ecore_Event_Handler *xwindow_destroy_handler;
+
+ Ecore_X_Atom atomInc;
+
+ Ecore_X_Atom atomCBHM_MSG;
+ Ecore_X_Atom atomCBHM_ITEM;
+
+ Ecore_X_Atom atomUTF8String;
+ Ecore_X_Atom atomCBHMCount[ATOM_INDEX_COUNT_MAX];
+ Ecore_X_Atom atomCBHM_SELECTED_ITEM;
+
+ Ecore_X_Atom atomShotString;
+
+ Ecore_Timer *selection_timer;
+};
+
+#include "cbhm.h"
+
+XHandlerData *init_xhandler(AppData *data);
+void depose_xhandler(XHandlerData *xd);
+Eina_Bool is_cbhm_selection_owner(AppData *ad, Ecore_X_Selection selection);
+Eina_Bool set_selection_owner(AppData *ad, Ecore_X_Selection selection, CNP_ITEM *item);
+void slot_property_set(AppData *ad, int index);
+void slot_item_count_set(AppData *ad);
+void slot_selected_item_set(AppData *ad);
+Eina_Bool cbhm_send_event(AppData *ad, Ecore_X_Window xwin, char *msg);
+Eina_Bool _mdm_get_allow_clipboard(); // magnolia only
+
+#define SELECTION_CHECK_TIME 10.0
+
+#endif
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
PROJECT(cbhm C)
-SET(PREFIX ${CMAKE_INSTALL_PREFIX})
-SET(LIBDIR "${PREFIX}/lib")
+SET(PREFIX "${CMAKE_INSTALL_PREFIX}")
SET(DATADIR "${PREFIX}/share")
SET(LOCALEDIR "${DATADIR}/locale")
SET(VERSION 0.1.0)
ENDIF ( MDM_ENABLE )
INCLUDE(FindPkgConfig)
- pkg_check_modules(pkgs REQUIRED elementary eet appcore-efl appcore-common x11 ecore-x utilX eina evas ecore ecore-file ecore-evas edje ecore-input notification vconf vconf-internal-keys libsystemd-daemon efl-assist ${MDM_REQUIED_PKGS})
+ pkg_check_modules(pkgs REQUIRED elementary eet appcore-efl appcore-common x11 ecore-x utilX eina evas ecore ecore-file ecore-evas edje ecore-input notification vconf vconf-internal-keys libsystemd-daemon ${MDM_REQUIED_PKGS})
FOREACH(flag ${pkgs_CFLAGS})
SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed -pie")
-ADD_DEFINITIONS("-DPREFIX=\"${CMAKE_INSTALL_PREFIX}\"")
+ADD_DEFINITIONS("-DDATADIR=\"${DATADIR}\"")
+ADD_DEFINITIONS("-DLOCALEDIR=\"${LOCALEDIR}\"")
ADD_EXECUTABLE(${PROJECT_NAME} ${SRCS})
#for XV extension screenshot
)
ADD_DEPENDENCIES(${PROJECT_NAME} cbhmdrawer.edj)
-INSTALL(TARGETS ${PROJECT_NAME} DESTINATION bin)
+INSTALL(TARGETS ${PROJECT_NAME} DESTINATION ${PREFIX}/bin)
INSTALL(FILES ${CMAKE_BINARY_DIR}/data/themes/cbhmdrawer.edj DESTINATION ${DATADIR}/edje)
ADD_SUBDIRECTORY(po)
-INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/../systemd/cbhm.service DESTINATION ${LIBDIR}/systemd/user)
-INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/../systemd/cbhm.service DESTINATION ${LIBDIR}/systemd/system)
+INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/../systemd/cbhm.service DESTINATION /usr/lib/systemd/user)
+INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/../systemd/cbhm.service DESTINATION /usr/lib/systemd/system)
}
collections {
-base_scale: 1.8;
+base_scale: 2.6;
#include "scroller.edc"
#include "popup_layout.edc"
// Clipboard
-#define CLIPBOARD_H_INC 352
-#define CLIPBOARD_LANDSCAPE_H_INC 218
#define CLIPBOARD_PANEL_TOP_PADDING_INC 0
-#define CLIPBOARD_PANEL_LEFT_PADDING_INC 6 // also used for RIGHT_PADDING
-#define CLIPBOARD_PANEL_H_INC 58
-#define CLIPBOARD_PANEL_LANDS_H_INC 48
-#define CLIPBOARD_CLOSE_BTN_BG_W_INC (CLIPBOARD_PANEL_LEFT_PADDING_INC + CLIPBOARD_CLOSE_BTN_W_INC + CLIPBOARD_PANEL_LEFT_PADDING_INC)
-#define CLIPBOARD_CLOSE_BTN_W_INC 46
-#define CLIPBOARD_CLOSE_BTN_H_INC 46
-#define CLIPBOARD_FUNCTION_BTN_MIN_W_INC 40
-#define CLIPBOARD_FUNCTION_BTN_MAX_W_INC 150
+#define CLIPBOARD_PANEL_LEFT_PADDING_INC 16
+#define CLIPBOARD_PANEL_H_INC 72
+#define CLIPBOARD_CLOSE_BTN_BG_W_INC (CLIPBOARD_PANEL_LEFT_PADDING_INC + CLIPBOARD_CLOSE_BTN_W_INC)
+#define CLIPBOARD_CLOSE_BTN_W_INC 70
+#define CLIPBOARD_CLOSE_BTN_H_INC 70
+#define CLIPBOARD_FUNCTION_BTN_MIN_W_INC 50
+#define CLIPBOARD_FUNCTION_BTN_MAX_W_INC 200
#define CLIPBOARD_FUNCTION_BTN_LANDSCAPE_MAX_W_INC 337
+#define CLIPBOARD_DELETE_TEXT_PADDING 20
#define CLIPBOARD_FUNCTION_BTN_LEFT_SIZE_INC 8 // also used for BTN_RIGHT
#define CLIPBOARD_FUNCTION_BTN_TEXT_MAX_W_INC (CLIPBOARD_FUNCTION_BTN_MAX_W_INC - CLIPBOARD_FUNCTION_BTN_LEFT_SIZE_INC - CLIPBOARD_FUNCTION_BTN_LEFT_SIZE_INC)
#define CLIPBOARD_FUNCTION_BTN_TEXT_LANDSCAPE_MAX_W_INC (CLIPBOARD_FUNCTION_BTN_LANDSCAPE_MAX_W_INC - CLIPBOARD_FUNCTION_BTN_LEFT_SIZE_INC - CLIPBOARD_FUNCTION_BTN_LEFT_SIZE_INC)
-#define CLIPBOARD_FUNCTION_BTN_H_INC 58
+#define CLIPBOARD_FUNCTION_BTN_H_INC 45
#define CLIPBOARD_CONTENT_TOP_LEFT_PADDING_INC 0 0
#define CLIPBOARD_CONTENT_BOTTOM_RIGHT_PADDING_INC 0 0
#define CLIPBOARD_DIVIDER_WIDTH_HEIGHT 2 38
// Grid Item
-#define GRID_ITEM_W_INC 140
-#define GRID_ITEM_H_INC 140
-#define GRID_IMAGE_ITEM_W_INC 126
-#define GRID_IMAGE_ITEM_H_INC 126
+#define GRID_IMAGE_ITEM_W_INC 240
+#define GRID_IMAGE_ITEM_H_INC 159
#define GRID_ITEM_OUTER_LINE_SIZE_INC 2
-#define GRID_ITEM_INNER_BG_PADDING_INC 12
-#define GRID_COMBINED_TOP_LEFT_PADDING_INC 4
-#define GRID_COMBINED_BOTTOM_PADDING_INC 6
-#define GRID_COMBINED_MAX_SIZE_INC 62 54
-#define GRID_COMBINED_SEPERATOR_PADDING_INC 2
-#define GRID_ITEM_DELETE_BTN_TOP_PADDING_INC 6 6
-#define GRID_ITEM_DELETE_BTN_SIZE_INC 36 36
+#define GRID_ITEM_INNER_BG_PADDING_INC 0
+#define GRID_COMBINED_TOP_LEFT_PADDING_INC 5
+#define GRID_COMBINED_BOTTOM_PADDING_INC 1
+#define GRID_COMBINED_ITEM_W_INC 102
+#define GRID_COMBINED_ITEM_H_INC 153
+#define GRID_COMBINED_SEPERATOR_PADDING_INC 4
+#define GRID_ITEM_DELETE_BTN_TOP_PADDING_INC 12 12
+#define GRID_ITEM_DELETE_BTN_SIZE_INC 54 54
#define GRID_ITEM_LOCK_BTN_SIZE_INC 36 36
-#define GRID_ITEM_TEXT_TOP_LEFT_PADDING 8 6
-#define GRID_ITEM_TEXT_MAX_INC 114 96
+#define GRID_ITEM_TEXT_TOP_LEFT_PADDING 9 2
+#define GRID_ITEM_TEXT_MAX_INC 226 161
+#define GRID_ITEM_RIGHT_PADDING 7
+#define GRID_ITEM_LEFT_PADDING 7
+#define GRID_ITEM_TOP_BOTTOM_PADDING_INC 6
#define SCROLLER_BOTTOM_RIGHT_PADDING_INC 6
-#define SCROLLER_BOTTOM_PADDING_INC 7
-#define SCROLLER_LEFT_PADDING_INC 5
-#define SCROLLER_BOTTOM_LANDSCAPE_PADDING_INC 15
+#define SCROLLER_BOTTOM_PADDING_INC 14
+#define SCROLLER_TOP_PADDING_INC 6
+#define SCROLLER_LEFT_PADDING_INC 11
+#define SCROLLER_BOTTOM_LANDSCAPE_PADDING_INC 36
+#define SCROLLER_TOP_LANDSCAPE_PADDING_INC 35
#define GENGRID_ITEM_SELECT_VI_EFFECT \
} \
image: "clipboard_expand_press.#.png" COMP;
image: "clipboard_btn_press_bg.#.png" COMP;
image: "clipboard_title_divider.#.png" COMP;
+ image: "clipboard_button_bg.#.png" COMP;
}
- data.item: "clipboard_height" CLIPBOARD_H_INC;
- data.item: "clipboard_landscape_height" CLIPBOARD_LANDSCAPE_H_INC;
- data.item: "grid_item_bg_w" GRID_ITEM_W_INC;
- data.item: "grid_item_bg_h" GRID_ITEM_H_INC;
- data.item: "grid_image_item_w" GRID_ITEM_W_INC;
- data.item: "grid_image_item_h" GRID_ITEM_H_INC;
-
script {
public g_landscape = 0; // Flag for landscape mode
}
description { state: "default" 0.0;
rel1 { relative: 0.0 0.0; }
rel2 { relative: 1.0 1.0; }
- color: 14 74 104 255;
+ color: 210 212 216 255;
}
}
part { name: "top_left_padding";
scale: 1;
mouse_events: 1;
description { state: "default" 0.0;
+ fixed: 0 1;
align: 0.0 0.0;
min: CLIPBOARD_PANEL_TOP_PADDING_INC CLIPBOARD_PANEL_H_INC;
max: -1 CLIPBOARD_PANEL_H_INC;
}
description { state: "landscape" 0.0;
inherit: "default" 0.0;
- min: CLIPBOARD_PANEL_TOP_PADDING_INC CLIPBOARD_PANEL_LANDS_H_INC;
- max: -1 CLIPBOARD_PANEL_LANDS_H_INC;
+ min: CLIPBOARD_PANEL_TOP_PADDING_INC CLIPBOARD_PANEL_H_INC;
+ max: -1 CLIPBOARD_PANEL_H_INC;
}
}
part { name: "background/title/image";
align: 0.0 0.0;
rel1 { relative: 0.0 0.0; to: "background";}
rel2 { relative: 1.0 1.0; to: "background/title";}
- color: 20 107 147 255;
+ color: 138 140 142 255;
}
}
part { name: "background/title/close/bg";
max: CLIPBOARD_CLOSE_BTN_W_INC CLIPBOARD_CLOSE_BTN_H_INC;
rel1 { to: "background/title/close/bg"; }
rel2 { to: "background/title/close/bg"; }
- color: 255 255 255 255;
+ color: 249 249 249 255;
image { normal: "clipboard_expand_close.png"; }
}
description { state: "disabled" 0.0;
inherit: "default" 0.0;
- color: 255 255 255 128;
+ color: 249 249 249 128;
}
}
part { name: "title_close_btn_right_padding";
min: 0 1;
max: 1 0;
align: 0.5 0.5;
- size: 27;
+ size: 32;
text_class: "tizen";
}
rel1 { relative: 1.0 0.0; to_x: "title_close_btn_right_padding"; to_y: "background/title"; }
- rel2 { relative: 0.0 1.0; to_x: "background/title/delete_all/divider"; to_y: "background/title"; }
+ rel2 { relative: 0.0 1.0; to_x: "delete_all_left_padding"; to_y: "background/title"; }
}
}
part { name: "delete_right_padding";
description { state: "default" 0.0;
fixed: 1 0;
align: 1.0 0.0;
- min: CLIPBOARD_FUNCTION_BTN_LEFT_SIZE_INC 0;
- max: CLIPBOARD_FUNCTION_BTN_LEFT_SIZE_INC -1;
+ min: CLIPBOARD_DELETE_TEXT_PADDING 0;
+ max: CLIPBOARD_DELETE_TEXT_PADDING -1;
rel1 { relative: 0.0 0.0; to: "delete_right_padding"; }
rel2 { relative: 0.0 1.0; to: "delete_right_padding"; }
}
description { state: "default" 0.0;
fixed: 1 0;
align: 1.0 0.5;
- min: CLIPBOARD_FUNCTION_BTN_LEFT_SIZE_INC 0;
- max: CLIPBOARD_FUNCTION_BTN_LEFT_SIZE_INC -1;
+ min: CLIPBOARD_PANEL_LEFT_PADDING_INC 0;
+ max: CLIPBOARD_PANEL_LEFT_PADDING_INC -1;
rel1 { relative: 0.0 0.0; to: "delete_text_left_padding"; }
rel2 { relative: 0.0 1.0; to: "delete_text_left_padding"; }
}
description { state: "default" 0.0;
fixed: 1 0;
align: 1.0 0.5;
- min: CLIPBOARD_FUNCTION_BTN_LEFT_SIZE_INC 0;
- max: CLIPBOARD_FUNCTION_BTN_LEFT_SIZE_INC -1;
+ min: CLIPBOARD_DELETE_TEXT_PADDING 0;
+ max: CLIPBOARD_DELETE_TEXT_PADDING -1;
rel1 { relative: 0.0 0.0; to: "panel_function_delete"; }
rel2 { relative: 0.0 1.0; to: "panel_function_delete"; }
}
}
- part { name: "background/title/delete/divider";
- scale: 1;
- mouse_events: 1;
- description { state: "default" 0.0;
- align: 1.0 0.5;
- min: CLIPBOARD_DIVIDER_WIDTH_HEIGHT;
- max: CLIPBOARD_DIVIDER_WIDTH_HEIGHT;
- fixed: 1 1;
- visible: 1;
- rel1 { relative: 0.0 0.0; to: "delete_left_padding"; }
- rel2 { relative: 0.0 1.0; to: "delete_left_padding"; }
- color: 255 255 255 77;
- image { normal: "clipboard_title_divider.#.png";
- }
- }
- }
part { name: "background/title/delete/image1";
scale: 1;
mouse_events: 1;
description { state: "default" 0.0;
+ image.normal: "clipboard_button_bg.#.png";
align: 0.0 0.5;
min: CLIPBOARD_FUNCTION_BTN_MIN_W_INC CLIPBOARD_FUNCTION_BTN_H_INC;
max: -1 CLIPBOARD_FUNCTION_BTN_H_INC;
fixed: 1 1;
- visible: 0;
- rel1 { relative: 1.0 0.0; to_x: "background/title/delete/divider"; to_y: "background/title"; }
- rel2.to: "background/title/image";
- image { normal: "clipboard_btn_press_bg.#.png"; }
- color: 16 87 119 255;
+ rel1 { relative: 1.0 0.0; to_x: "delete_left_padding"; to_y: "background/title"; }
+ rel2.to: "delete_text_right_padding";
+ color: 0 0 0 89;
}
description { state: "pressed" 0.0;
inherit: "default" 0.0;
- visible: 1;
+ color: 0 0 0 140;
}
description { state: "disabled" 0.0;
inherit: "default" 0.0;
+ color: 0 0 0 43;
}
}
part { name: "background/title/delete/image";
min: 0 1;
max: 1 0;
align: 0.0 0.5;
- size: 24;
+ size: 32;
text_class: "tizen";
}
rel1.to: "delete_text_bg";
rel2.to: "delete_text_bg";
- color: 255 255 255 255;
+ color: 249 249 249 255;
}
description { state: "disabled" 0.0;
inherit: "default" 0.0;
- color: 255 255 255 77;
- }
- }
- part { name: "delete_all_right_padding";
- type: SPACER;
- scale: 1;
- description { state: "default" 0.0;
- fixed: 1 0;
- align: 1.0 0.5;
- min: 2*CLIPBOARD_FUNCTION_BTN_LEFT_SIZE_INC 0;
- max: 2*CLIPBOARD_FUNCTION_BTN_LEFT_SIZE_INC -1;
- rel1 { relative: 0.0 0.0; to: "background/title/delete/divider"; }
- rel2 { relative: 0.0 1.0; to: "background/title/delete/divider"; }
+ color: 249 249 249 163;
}
}
part { name: "delete_all_text_right_padding";
scale: 1;
description { state: "default" 0.0;
fixed: 1 0;
- align: 0.0 0.5;
- min: CLIPBOARD_FUNCTION_BTN_LEFT_SIZE_INC 0;
- max: CLIPBOARD_FUNCTION_BTN_LEFT_SIZE_INC -1;
- rel1 { relative: 0.0 0.0; to: "delete_all_right_padding"; }
- rel2 { relative: 0.0 1.0; to: "delete_all_right_padding"; }
+ align: 1.0 0.5;
+ min: CLIPBOARD_DELETE_TEXT_PADDING 0;
+ max: CLIPBOARD_DELETE_TEXT_PADDING -1;
+ rel1 { relative: 0.0 0.0; to: "delete_left_padding"; }
+ rel2 { relative: 0.0 1.0; to: "delete_left_padding"; }
}
}
part { name: "delete_all_left_padding";
description { state: "default" 0.0;
fixed: 1 0;
align: 1.0 0.5;
- min: CLIPBOARD_FUNCTION_BTN_LEFT_SIZE_INC 0;
- max: CLIPBOARD_FUNCTION_BTN_LEFT_SIZE_INC -1;
+ min: CLIPBOARD_DELETE_TEXT_PADDING 0;
+ max: CLIPBOARD_DELETE_TEXT_PADDING -1;
rel1 { relative: 0.0 0.0; to: "delete_all_text_left_padding"; }
rel2 { relative: 0.0 1.0; to: "delete_all_text_left_padding"; }
}
description { state: "default" 0.0;
fixed: 1 0;
align: 1.0 0.5;
- min: CLIPBOARD_FUNCTION_BTN_LEFT_SIZE_INC 0;
- max: CLIPBOARD_FUNCTION_BTN_LEFT_SIZE_INC -1;
+ min: CLIPBOARD_DELETE_TEXT_PADDING 0;
+ max: CLIPBOARD_DELETE_TEXT_PADDING -1;
rel1 { relative: 0.0 0.0; to: "panel_function_delete_all"; }
rel2 { relative: 0.0 1.0; to: "panel_function_delete_all"; }
}
}
- part { name: "background/title/delete_all/divider";
- scale: 1;
- mouse_events: 1;
- description { state: "default" 0.0;
- align: 1.0 0.5;
- min: CLIPBOARD_DIVIDER_WIDTH_HEIGHT;
- max: CLIPBOARD_DIVIDER_WIDTH_HEIGHT;
- fixed: 1 1;
- visible: 1;
- rel1 { relative: 0.0 0.0; to_x: "delete_all_left_padding"; to_y: "background/title/image"; }
- rel2 { relative: 0.0 1.0; to_x: "delete_all_left_padding"; to_y: "background/title/image"; }
- color: 255 255 255 77;
- image { normal: "clipboard_title_divider.#.png";
- }
- }
- description { state: "hide" 0.0;
- inherit: "default" 0.0;
- visible: 0;
- }
- }
part { name: "background/title/delete_all/image1";
scale: 1;
mouse_events: 1;
description { state: "default" 0.0;
+ image.normal: "clipboard_button_bg.#.png";
align: 0.0 0.5;
fixed: 1 1;
- visible: 0;
min: CLIPBOARD_FUNCTION_BTN_MIN_W_INC CLIPBOARD_FUNCTION_BTN_H_INC;
max: -1 CLIPBOARD_FUNCTION_BTN_H_INC;
- rel1 { relative: 1.0 0.5; to: "background/title/delete_all/divider"; }
- rel2 { relative: 0.0 0.5; to_x: "background/title/delete/divider"; to_y: "delete_all_text_left_padding"; }
- image { normal: "clipboard_btn_press_bg.#.png"; }
- color: 16 87 119 255;
+ rel1 { relative: 1.0 0.5; to: "delete_all_left_padding"; }
+ rel2 { relative: 0.0 0.5; to: "delete_left_padding"; }
+ color: 0 0 0 89;
}
description { state: "pressed" 0.0;
inherit: "default" 0.0;
- visible: 1;
+ color: 0 0 0 140;
+ }
+ description { state: "disabled" 0.0;
+ inherit: "default" 0.0;
+ color: 0 0 0 43;
}
description { state: "hide" 0.0;
inherit: "default" 0.0;
visible: 0;
+ color: 0 0 0 140;
}
}
part { name: "background/title/delete_all/image";
scale: 1;
description { state: "default" 0.0;
+ image.normal: "clipboard_button_bg.#.png";
rel1 { relative: 0.0 0.0; to: "background/title/delete_all/image1"; }
rel2 { relative: 1.0 1.0; to: "background/title/delete_all/image1"; }
color: 0 0 0 0;
align: 1.0 0.5;
min: CLIPBOARD_FUNCTION_BTN_TEXT_MAX_W_INC 0;
max: CLIPBOARD_FUNCTION_BTN_TEXT_MAX_W_INC -1;
- rel1 { relative: 0.0 0.0; to_y: "background/title/image"; }
- rel2 { relative: 0.0 1.0; to_x: "delete_all_right_padding"; to_y: "background/title/image"; }
+ rel1 { relative: 0.0 0.0; to: "delete_all_text_right_padding"; }
+ rel2 { relative: 0.0 1.0; to: "delete_all_text_right_padding"; }
}
description { state: "landscape" 0.0;
inherit: "default" 0.0;
min: 0 1;
max: 1 0;
align: 0.5 0.5;
- size: 24;
+ size: 32;
text_class: "tizen";
}
rel1.to: "delete_all_text_bg";
rel2.to: "delete_all_text_bg";
- color: 255 255 255 255;
+ color: 249 249 249 255;
}
description { state: "disabled" 0.0;
inherit: "default" 0.0;
- color: 255 255 255 77;
+ color: 249 249 249 163;
}
description { state: "hide" 0.0;
inherit: "default" 0.0;
source: "background/title/delete/image";
action: STATE_SET "pressed" 0.0;
target: "background/title/delete/image1";
+ target: "panel_function_delete";
}
program { name: "mouse_out_delbtn";
signal: "mouse,out";
source: "background/title/delete/image";
action: STATE_SET "default" 0.0;
target: "background/title/delete/image1";
+ target: "panel_function_delete";
}
program { name: "mouse_up_delbtn";
signal: "mouse,up,1";
source: "background/title/delete/image";
action: STATE_SET "default" 0.0;
target: "background/title/delete/image1";
+ target: "panel_function_delete";
}
program { name: "mouse_down_del_all_btn";
signal: "mouse,down,1";
source: "background/title/delete_all/image";
action: STATE_SET "pressed" 0.0;
target: "background/title/delete_all/image1";
+ target: "panel_function_delete_all";
}
program { name: "mouse_out_del_all_btn";
signal: "mouse,out";
source: "background/title/delete_all/image";
action: STATE_SET "default" 0.0;
target: "background/title/delete_all/image1";
+ target: "panel_function_delete_all";
}
program { name: "mouse_up_del_all_btn";
signal: "mouse,up,1";
source: "background/title/delete_all/image";
action: STATE_SET "default" 0.0;
target: "background/title/delete_all/image1";
+ target: "panel_function_delete_all";
}
program { name: "play_sound_delbtn";
signal: "mouse,clicked,1";
source: "elm";
action: STATE_SET "hide" 0.0;
target: "panel_function_delete_all";
- target: "background/title/delete_all/divider";
target: "background/title/delete_all/image1";
target: "background/title/delete_all/image";
}
source: "elm";
action: STATE_SET "default" 0.0;
target: "panel_function_delete_all";
- target: "background/title/delete_all/divider";
target: "background/title/delete_all/image1";
target: "background/title/delete_all/image";
}
type: SPACER;
scale:1 ;
description { state: "default" 0.0;
- min: SCROLLER_LEFT_PADDING_INC SCROLLER_BOTTOM_PADDING_INC;
- max: SCROLLER_LEFT_PADDING_INC SCROLLER_BOTTOM_PADDING_INC;
+ min: SCROLLER_LEFT_PADDING_INC SCROLLER_TOP_PADDING_INC;
+ max: SCROLLER_LEFT_PADDING_INC SCROLLER_TOP_PADDING_INC;
rel1 {
relative: 0.0 0.0;
to: "bg";
}
description { state: "landscape" 0.0;
inherit: "default" 0.0;
- min: SCROLLER_LEFT_PADDING_INC SCROLLER_BOTTOM_LANDSCAPE_PADDING_INC;
- max: SCROLLER_LEFT_PADDING_INC SCROLLER_BOTTOM_LANDSCAPE_PADDING_INC;
+ min: SCROLLER_LEFT_PADDING_INC SCROLLER_TOP_LANDSCAPE_PADDING_INC;
+ max: SCROLLER_LEFT_PADDING_INC SCROLLER_TOP_LANDSCAPE_PADDING_INC;
}
}
part { name: "padding.right";
}
}
- group { name: "elm/gengrid/item/clipboard/image_style/default";
- data.item: "contents" "elm.swallow.content";
+ group { name: "elm/button/base/delete_icon";
+ images {
+ image: "clipboard_delete.png" COMP;
+ image: "clipboard_delete_press.png" COMP;
+ }
+ parts {
+ part { name: "base";
+ scale: 1;
+ type: SPACER;
+ description { state: "default" 0.0;
+ min: GRID_ITEM_DELETE_BTN_SIZE_INC;
+ max: GRID_ITEM_DELETE_BTN_SIZE_INC;
+ }
+ }
+ part { name: "icon";
+ scale: 1;
+ mouse_events: 1;
+ description { state: "default" 0.0;
+ visible: 1;
+ image.normal: "clipboard_delete.png";
+ rel1.to: "base";
+ rel2.to: "base";
+ }
+ description { state: "pressed" 0.0;
+ inherit: "default" 0.0;
+ image.normal: "clipboard_delete_press.png";
+ }
+ }
+ }
+ programs {
+ program { name: "touch_snd";
+ signal: "mouse,clicked,1";
+ source: "icon";
+ script {
+ run_program(PROGRAM:"touch_sound");
+ emit("elm,action,click", "");
+ }
+ }
+ program { name: "touch_sound";
+ action: RUN_PLUGIN "touch_sound";
+ }
+ program { name: "mouse_down";
+ signal: "mouse,down,1";
+ source: "icon";
+ script {
+ set_state(PART:"icon", "pressed", 0.0);
+ }
+ }
+ program { name: "mouse_out";
+ signal: "mouse,out";
+ source: "icon";
+ script {
+ set_state(PART:"icon", "default", 0.0);
+ }
+ }
+ program { name: "mouse_up";
+ signal: "mouse,up,1";
+ source: "icon";
+ script {
+ set_state(PART:"icon", "default", 0.0);
+ }
+ }
+ }
+ }
+ group { name: "elm/gengrid/item/clipboard/image_style/default";
+ alias: "elm/gengrid/item/clipboard/image_style/cbhm";
+ data.item: "contents" "elm.swallow.content delbtn/img";
images {
image: "clipboard_thumb_bg.#.png" COMP;
image: "clipboard_thumb_line.#.png" COMP;
description { state: "default" 0.0;
rel1.to: "item_outer_bg_top_left_padding";
rel2.to: "item_outer_bg_bottom_right_padding";
- color: 255 255 255 255;
+ color: 249 249 249 255;
image.normal: "clipboard_thumb_bg.#.png";
GENGRID_ITEM_SELECT_VI_EFFECT
}
description { state: "default" 0.0;
rel2.to: "item_outer_bg";
rel1.to: "item_outer_bg";
- color: 255 255 255 255;
+ color: 249 249 249 255;
image.normal: "clipboard_thumb_line.#.png";
GENGRID_ITEM_SELECT_VI_EFFECT
}
mouse_events: 0;
description { state: "default" 0.0;
fixed: 1 1;
- max: GRID_IMAGE_ITEM_W_INC GRID_IMAGE_ITEM_W_INC;
+ max: GRID_IMAGE_ITEM_W_INC GRID_IMAGE_ITEM_H_INC;
rel1 { relative: 0.5 0.5; to: "bg"; }
rel2 { relative: 0.5 0.5; to: "bg"; }
GENGRID_ITEM_SELECT_VI_EFFECT
mouse_events: 0;
description { state: "default" 0.0;
visible: 0;
- color: 0 0 0 100;
+ color: 255 255 255 178;
rel1.to: "elm.swallow.content";
rel2.to: "elm.swallow.content";
}
part { name: "delbtn/img";
scale: 1;
mouse_events: 1;
+ type: SWALLOW;
description { state: "default" 0.0;
rel1.to: "delbtn";
rel2.to: "delbtn";
description { state: "show" 0.0;
inherit: "default" 0.0;
visible: 1;
- image {
- normal: "clipboard_delete.png";
- }
}
description { state: "pressed" 0.0;
inherit: "default" 0.0;
visible: 1;
- image {
- normal: "clipboard_delete_press.png";
- }
}
}
}
target: "item_outer_bg_line";
target: "elm.swallow.content";
)
- program { name: "mouse_down";
- signal: "mouse,down,1";
- source: "delbtn/img";
- script {
- new st[31];
- new Float:vl;
- get_state(PART:"delbtn/img", st, 30, vl);
- if (!strcmp(st, "show"))
- set_state(PART:"delbtn/img", "pressed", 0.0);
- }
- }
- program { name: "mouse_out";
- signal: "mouse,out";
- source: "delbtn/img";
- script {
- new st[31];
- new Float:vl;
- get_state(PART:"delbtn/img", st, 30, vl);
- if (!strcmp(st, "pressed"))
- set_state(PART:"delbtn/img", "show", 0.0);
- }
- }
- program { name: "mouse_up";
- signal: "mouse,up,1";
- source: "delbtn/img";
- script {
- new st[31];
- new Float:vl;
- get_state(PART:"delbtn/img", st, 30, vl);
- if (!strcmp(st, "pressed"))
- set_state(PART:"delbtn/img", "show", 0.0);
- }
- }
- program { name: "play_sound_delbtn";
- signal: "mouse,clicked,1";
- source: "delbtn/img";
- action: RUN_PLUGIN "touch_sound";
- }
program { name: "touch_sound_program";
action: RUN_PLUGIN "touch_sound";
}
}
group { name: "elm/gengrid/item/clipboard/text_style/default";
+ alias: "elm/gengrid/item/clipboard/text_style/cbhm";
data.item: "texts" "elm.text";
+ data.item: "contents" "delbtn/img";
images {
image: "clipboard_note_bg.#.png" COMP;
image: "clipboard_delete.png" COMP;
styles {
style { name: "clipboard_01_style";
- base: "font=Tizen:style=Regular font_size=27 color=#000000FF align=left wrap=mixed text_class=tizen";
+ base: "font=Tizen:style=Regular font_size=27 color=#F9F9F9FF align=left wrap=mixed text_class=tizen";
tag: "br" "\n";
tag: "ps" "ps";
tag: "tab" "\t";
description { state: "default" 0.0;
fixed: 1 1;
align: 0.0 0.0;
- min: SCROLLER_LEFT_PADDING_INC SCROLLER_LEFT_PADDING_INC;
- max: SCROLLER_LEFT_PADDING_INC SCROLLER_LEFT_PADDING_INC;
+ min: GRID_ITEM_LEFT_PADDING GRID_ITEM_TOP_BOTTOM_PADDING_INC;
+ max: GRID_ITEM_LEFT_PADDING GRID_ITEM_TOP_BOTTOM_PADDING_INC;
rel1 { relative: 0.0 0.0; to: "bg"; }
rel2 { relative: 0.0 0.0; to: "bg"; }
}
description { state: "default" 0.0;
fixed: 1 1;
align: 1.0 1.0;
- min: SCROLLER_LEFT_PADDING_INC SCROLLER_LEFT_PADDING_INC;
- max: SCROLLER_LEFT_PADDING_INC SCROLLER_LEFT_PADDING_INC;
+ min: GRID_ITEM_RIGHT_PADDING GRID_ITEM_TOP_BOTTOM_PADDING_INC;
+ max: GRID_ITEM_RIGHT_PADDING GRID_ITEM_TOP_BOTTOM_PADDING_INC;
rel1 { relative: 1.0 1.0; to: "bg"; }
rel2 { relative: 1.0 1.0; to: "bg"; }
}
description { state: "default" 0.0;
rel1.to: "item_inner_bg";
rel2.to: "item_inner_bg";
- color: 237 233 208 255;
+ color: 252 225 116 255;
image.normal: "clipboard_note_bg.#.png";
GENGRID_ITEM_SELECT_VI_EFFECT
}
}
part { name: "delbtn/img";
scale: 1;
+ type: SWALLOW;
description { state: "default" 0.0;
rel1.to: "delbtn";
rel2.to: "delbtn";
description { state: "show" 0.0;
inherit: "default" 0.0;
visible: 1;
- image {
- normal: "clipboard_delete.png";
- }
}
description { state: "pressed" 0.0;
inherit: "default" 0.0;
visible: 1;
- image {
- normal: "clipboard_delete_press.png";
- }
}
}
}
target: "item_bg";
target: "elm.text";
)
- program { name: "mouse_down";
- signal: "mouse,down,1";
- source: "delbtn/img";
- script {
- new st[31];
- new Float:vl;
- get_state(PART:"delbtn/img", st, 30, vl);
- if (!strcmp(st, "show"))
- set_state(PART:"delbtn/img", "pressed", 0.0);
- }
- }
- program { name: "mouse_out";
- signal: "mouse,out";
- source: "delbtn/img";
- script {
- new st[31];
- new Float:vl;
- get_state(PART:"delbtn/img", st, 30, vl);
- if (!strcmp(st, "pressed"))
- set_state(PART:"delbtn/img", "show", 0.0);
- }
- }
- program { name: "mouse_up";
- signal: "mouse,up,1";
- source: "delbtn/img";
- script {
- new st[31];
- new Float:vl;
- get_state(PART:"delbtn/img", st, 30, vl);
- if (!strcmp(st, "pressed"))
- set_state(PART:"delbtn/img", "show", 0.0);
- }
- }
- program { name: "play_sound_delbtn";
- signal: "mouse,clicked,1";
- source: "delbtn/img";
- action: RUN_PLUGIN "touch_sound";
- }
program { name: "touch_sound_program";
action: RUN_PLUGIN "touch_sound";
}
}
group { name: "elm/gengrid/item/clipboard/combined_style/default";
+ alias: "elm/gengrid/item/clipboard/combined_style/cbhm";
data.item: "texts" "elm.text";
- data.item: "contents" "elm.swallow.content";
+ data.item: "contents" "elm.swallow.content delbtn/img";
images {
image: "clipboard_note_bg.#.png" COMP;
image: "clipboard_delete.png" COMP;
styles {
style { name: "clipboard_02_style";
- base: "font=Tizen:style=Light font_size=17 color=#000000FF align=left wrap=mixed text_class=tizen";
+ base: "font=Tizen:style=Light font_size=17 color=#F9F9F9FF align=left wrap=mixed text_class=tizen";
tag: "br" "\n";
tag: "ps" "ps";
tag: "tab" "\t";
description { state: "default" 0.0;
fixed: 1 1;
align: 0.0 0.0;
- min: SCROLLER_LEFT_PADDING_INC SCROLLER_LEFT_PADDING_INC;
- max: SCROLLER_LEFT_PADDING_INC SCROLLER_LEFT_PADDING_INC;
+ min: GRID_ITEM_LEFT_PADDING GRID_ITEM_TOP_BOTTOM_PADDING_INC;
+ max: GRID_ITEM_LEFT_PADDING GRID_ITEM_TOP_BOTTOM_PADDING_INC;
rel1 { relative: 0.0 0.0; to: "bg"; }
rel2 { relative: 0.0 0.0; to: "bg"; }
}
description { state: "default" 0.0;
fixed: 1 1;
align: 1.0 1.0;
- min: SCROLLER_LEFT_PADDING_INC SCROLLER_LEFT_PADDING_INC;
- max: SCROLLER_LEFT_PADDING_INC SCROLLER_LEFT_PADDING_INC;
+ min: GRID_ITEM_RIGHT_PADDING GRID_ITEM_TOP_BOTTOM_PADDING_INC;
+ max: GRID_ITEM_RIGHT_PADDING GRID_ITEM_TOP_BOTTOM_PADDING_INC;
rel1 { relative: 1.0 1.0; to: "bg"; }
rel2 { relative: 1.0 1.0; to: "bg"; }
}
GENGRID_ITEM_SELECT_VI_EFFECT
}
}
- part { name: "item_inner_bg_top_left_padding";
- type: SPACER;
- scale: 1;
- description { state: "default" 0.0;
- fixed: 1 1;
- align: 0.0 0.0;
- min: CLIPBOARD_PANEL_TOP_PADDING_INC GRID_ITEM_INNER_BG_PADDING_INC;
- max: CLIPBOARD_PANEL_TOP_PADDING_INC GRID_ITEM_INNER_BG_PADDING_INC;
- rel1 { relative: 0.0 0.0; to: "item_outer_bg"; }
- rel2 { relative: 0.0 0.0; to: "item_outer_bg"; }
- }
- }
- part { name: "item_inner_bg_bottom_right_padding";
- type: SPACER;
- scale: 1;
- description { state: "default" 0.0;
- fixed: 1 1;
- align: 1.0 1.0;
- min: CLIPBOARD_PANEL_TOP_PADDING_INC GRID_ITEM_INNER_BG_PADDING_INC;
- max: CLIPBOARD_PANEL_TOP_PADDING_INC GRID_ITEM_INNER_BG_PADDING_INC;
- rel1 { relative: 1.0 1.0; to: "item_outer_bg"; }
- rel2 { relative: 1.0 1.0; to: "item_outer_bg"; }
- }
- }
part { name: "item_inner_bg";
type: SPACER;
mouse_events: 0;
description { state: "default" 0.0;
- rel1 { relative: 1.0 1.0; to: "item_inner_bg_top_left_padding"; }
- rel2 { relative: 0.0 0.0; to: "item_inner_bg_bottom_right_padding"; }
+ rel1 { relative: 0.0 0.0; to: "item_outer_bg"; }
+ rel2 { relative: 1.0 1.0; to: "item_outer_bg"; }
GENGRID_ITEM_SELECT_VI_EFFECT
}
}
description { state: "default" 0.0;
fixed: 1 1;
align: 0.0 0.0;
- min: GRID_COMBINED_TOP_LEFT_PADDING_INC GRID_COMBINED_TOP_LEFT_PADDING_INC ;
+ min: GRID_COMBINED_TOP_LEFT_PADDING_INC GRID_COMBINED_TOP_LEFT_PADDING_INC;
max: GRID_COMBINED_TOP_LEFT_PADDING_INC GRID_COMBINED_TOP_LEFT_PADDING_INC;
rel1 { relative: 0.0 0.0; to: "item_inner_bg"; }
rel2 { relative: 0.0 0.0; to: "item_inner_bg"; }
mouse_events: 0;
description { state: "default" 0.0;
align: 0.0 0.0;
- max: GRID_COMBINED_MAX_SIZE_INC;
+ max: GRID_COMBINED_ITEM_W_INC GRID_COMBINED_ITEM_H_INC;
rel1 { relative: 1.0 1.0; to: "content_top_left_padding"; }
rel2 { relative: 1.0 1.0; to: "content_top_left_padding"; }
GENGRID_ITEM_SELECT_VI_EFFECT
scale: 1;
description { state: "default" 0.0;
fixed: 1 1;
- align: 0.5 0.0;
- min: CLIPBOARD_PANEL_TOP_PADDING_INC GRID_COMBINED_SEPERATOR_PADDING_INC;
- max: -1 GRID_COMBINED_SEPERATOR_PADDING_INC;
- rel1 { relative: 0.0 1.0; to: "elm.swallow.content"; }
- rel2 { relative: 0.0 1.0; to_x: "text_bottom_right_padding"; to_y: "elm.swallow.content"; }
+ align: 0.0 0.0;
+ min: GRID_COMBINED_SEPERATOR_PADDING_INC CLIPBOARD_PANEL_TOP_PADDING_INC;
+ max: GRID_COMBINED_SEPERATOR_PADDING_INC -1;
+ rel1 { relative: 1.0 0.0; to: "elm.swallow.content"; }
+ rel2 { relative: 1.0 0.0; to: "elm.swallow.content"; }
}
}
part { name: "elm.text";
style: "clipboard_02_style";
align: 0.0 0.0;
}
- rel1 { relative: 0.0 1.0; to: "separator_padding"; }
+ rel1 { relative: 1.0 0.0; to: "separator_padding"; }
rel2 { relative: 0.0 0.0; to: "text_bottom_right_padding"; }
}
description { state: "pressed" 0.0;
type: SPACER;
scale: 1;
description { state: "default" 0.0;
- rel1 { relative: 0.0 1.0; to: "delbtn_top_left_padding"; }
- rel2 { relative: 0.0 1.0; to: "delbtn_top_left_padding"; }
+ rel1 { relative: 0.0 0.0; to: "delbtn_top_left_padding"; }
+ rel2 { relative: 0.0 0.0; to: "delbtn_top_left_padding"; }
align: 0.0 0.0;
fixed: 1 1;
min: GRID_ITEM_DELETE_BTN_SIZE_INC;
part { name: "delbtn/img";
scale: 1;
mouse_events: 1;
+ type: SWALLOW;
description { state: "default" 0.0;
rel1.to: "delbtn";
rel2.to: "delbtn";
description { state: "show" 0.0;
inherit: "default" 0.0;
visible: 1;
- image {
- normal: "clipboard_delete.png";
- }
}
description { state: "pressed" 0.0;
inherit: "default" 0.0;
visible: 1;
- image {
- normal: "clipboard_delete_press.png";
- }
}
}
}
target: "elm.swallow.content";
target: "elm.text";
)
- program { name: "mouse_down";
- signal: "mouse,down,1";
- source: "delbtn/img";
- script {
- new st[31];
- new Float:vl;
- get_state(PART:"delbtn/img", st, 30, vl);
- if (!strcmp(st, "show"))
- set_state(PART:"delbtn/img", "pressed", 0.0);
- }
- }
- program { name: "mouse_out";
- signal: "mouse,out";
- source: "delbtn/img";
- script {
- new st[31];
- new Float:vl;
- get_state(PART:"delbtn/img", st, 30, vl);
- if (!strcmp(st, "pressed"))
- set_state(PART:"delbtn/img", "show", 0.0);
- }
- }
- program { name: "mouse_up";
- signal: "mouse,up,1";
- source: "delbtn/img";
- script {
- new st[31];
- new Float:vl;
- get_state(PART:"delbtn/img", st, 30, vl);
- if (!strcmp(st, "pressed"))
- set_state(PART:"delbtn/img", "show", 0.0);
- }
- }
- program { name: "play_sound_delbtn";
- signal: "mouse,clicked,1";
- source: "delbtn/img";
- action: RUN_PLUGIN "touch_sound";
- }
program { name: "touch_sound_program";
action: RUN_PLUGIN "touch_sound";
}
SET(POFILES
ar.po
+ as.po
az.po
bg.po
+ bn.po
ca.po
cs.po
da.po
ja_JP.po
ka.po
kk.po
+ kn.po
ko_KR.po
lt.po
lv.po
mk.po
+ ml.po
+ mr.po
nb.po
+ ne.po
nl.po
+ or.po
+ pa.po
pl.po
pt_BR.po
pt_PT.po
ro.po
ru_RU.po
+ si.po
sk.po
sl.po
sr.po
sv.po
+ ta.po
+ te.po
tr_TR.po
uk.po
+ ur.po
uz.po
zh_CN.po
zh_HK.po
msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
msgstr "سيتم حذف %d عناصر."
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "سيتم حذف كل العناصر."
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "حذف كل العناصر"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "سيتم حذف كل العناصر من الحافظة."
msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
msgstr "تم بالفعل نسخ العنصر إلى الحافظة."
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "لا توجد عناصر"
+
--- /dev/null
+msgid "IDS_COM_BODY_DELETE"
+msgstr "বিলোপ কৰক"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "ক্লিপবোৰ্ডৰ পৰা বিলোপ কৰক"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "ক্লিপব'ৰ্ডলৈ লক কৰক"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "ক্লিপব'ৰ্ডৰ পৰা আনলক কৰক"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "বাতিল"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "ক্লিপবোৰ্ড বিকল্প"
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "সকলো বিলোপ কৰিবনে?"
+
+msgid "IDS_DM_POP_PD_ITEMS_WILL_BE_DELETED_ABB2"
+msgstr "%d টা আইটেম বিলোপ কৰা হ'ব৷"
+
+msgid "IDS_DM_POP_THIS_ITEM_WILL_BE_DELETED_ABB"
+msgstr "এই আইটেমটো বিলোপ কৰা হ'ব৷"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "বন্ধ কৰক"
+
+msgid "IDS_COM_BODY_DONE"
+msgstr "সম্পন্ন"
+
+msgid "IDS_COM_BODY_SELECT_ALL"
+msgstr "সকলো চয়ন কৰক"
+
+msgid "IDS_COM_BODY_COPY"
+msgstr "প্ৰতিলিপি"
+
+msgid "IDS_COM_POP_DELETE_Q"
+msgstr "বিলোপ কৰিবনে?"
+
+msgid "IDS_COM_SK_SELECT"
+msgstr "চয়ন কৰক"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "সকলো বিলোপ কৰক"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "ক্লিপবৰ্ডলৈ প্ৰতিলিপি হৈছে৷"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "ইতিমধ্যে মজুত আছে৷"
+
+msgid "IDS_COM_BODY_CUT"
+msgstr "কাটক"
+
+msgid "IDS_COM_BODY_PASTE"
+msgstr "লেপন কৰক"
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "ক্লিপব'ৰ্ড"
+
+msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
+msgstr "%d টা আইটেম বিলোপ কৰা হ'ব৷"
+
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "সকলো আইটেম বিলোপ কৰক"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "সকলো আইটেম ক্লিপব'ৰ্ডৰ পৰা বিলোপ কৰা হ'ব৷"
+
+msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
+msgstr "আইটেম ইতিমধ্যেই ক্লিপব'ৰ্ডলৈ প্ৰতিলিপি কৰা হ'ল৷"
+
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "আইটেম নাই"
+
msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
msgstr "%d element silinəcək."
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "Bütün elementlər silinəcək."
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Bütün elementləri sil"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "Bütün elementlər yalnız mübadilə buferindən silinəcək."
msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
msgstr "Element artıq məlumat buferinə kopyalanmışdır."
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "Element yoxdur"
+
msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
msgstr "%d елемента ще бъдат изтрити."
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "Всички елементи ще бъдат изтрити."
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Изтриване на всички елементи"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "Всички елементи ще бъдат изтрити от клипборда."
msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
msgstr "Елементът вече е копиран в клипборда."
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "Няма елементи"
+
--- /dev/null
+msgid "IDS_COM_BODY_DELETE"
+msgstr "মুছুন"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "ক্লিপবোর্ড থেকে মুছুন"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "ক্লিপবোর্ডে আবদ্ধ করুন"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "ক্লিপবোর্ড থেকে আনলক করুন"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "বাতিল"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "ক্লিপবোর্ড বিকল্প"
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "সব মুছবেন?"
+
+msgid "IDS_DM_POP_PD_ITEMS_WILL_BE_DELETED_ABB2"
+msgstr "%dটি আইটেম মোছা হবে।"
+
+msgid "IDS_DM_POP_THIS_ITEM_WILL_BE_DELETED_ABB"
+msgstr "এই আইটেমটি মোছা হবে।"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "বন্ধ করুন"
+
+msgid "IDS_COM_BODY_DONE"
+msgstr "সম্পন্ন"
+
+msgid "IDS_COM_BODY_SELECT_ALL"
+msgstr "সমস্ত নির্বাচন করুন"
+
+msgid "IDS_COM_BODY_COPY"
+msgstr "অনুলিপি করুন"
+
+msgid "IDS_COM_POP_DELETE_Q"
+msgstr "মুছবেন?"
+
+msgid "IDS_COM_SK_SELECT"
+msgstr "নির্বাচন"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "সমস্ত মুছুন"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "ক্লিপবোর্ডে প্রতিলিপি গঠন করা হয়েছে।"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "ইতিমধ্যে রয়েছে।"
+
+msgid "IDS_COM_BODY_CUT"
+msgstr "কাট"
+
+msgid "IDS_COM_BODY_PASTE"
+msgstr "প্রতিলেপন"
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "ক্লিপবোর্ড"
+
+msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
+msgstr "%dটি আইটেম মোছা হবে।"
+
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "সমস্ত আইটেম মুছুন"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "ক্লিপবোর্ড থেকে সমস্ত আইটেম মোছা হবে।"
+
+msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
+msgstr "আইটেম ইতিমধ্যে ক্লিপবোর্ডে অনুলিপি করা হয়েছে।"
+
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "কোনও আইটেম নেই"
+
msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
msgstr "S'esborraran %d elements"
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "S'esborraran tots els elements"
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Esborrar tots els elements"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "S'esborraran tots els elements del porta-retalls."
msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
msgstr "Element ja copiat al porta-retalls."
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "Cap element"
+
msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
msgstr "%d položek bude odstraněno."
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "Všechny položky budou odstraněny."
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Odstranit všechny položky"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "Ze schránky budou odstraněny všechny položky."
msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
msgstr "Položka již byla zkopírována do schránky."
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "Žádné položky"
+
msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
msgstr "%d elementer vil blive slettet."
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "Alle elementer bliver slettet."
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Slet alle elementer"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "Alle elementer vil blive slettet fra udklipsholderen."
msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
msgstr "Elementet er allerede blevet kopieret til udklipsholderen."
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "Ingen elementer"
+
msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
msgstr "%d Elemente werden gelöscht."
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "Alle Elemente werden gelöscht."
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Löschen aller Elemente"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "Alle Elemente werden aus der Zwischenablage entfernt."
msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
msgstr "Das Element wurde bereits in die Zwischenablage kopiert."
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "Keine Elemente"
+
msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
msgstr "Θα διαγραφούν %d στοιχεία."
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "Θα γίνει διαγραφή όλων των στοιχείων."
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Διαγραφή όλων των στοιχείων"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "Όλα τα στοιχεία θα διαγραφούν από το πρόχειρο."
msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
msgstr "Το στοιχείο έχει ήδη αντιγραφεί στο πρόχειρο."
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "Κανένα στοιχείο"
+
msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
msgstr "%d items will be deleted."
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "All items will be deleted."
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Delete all items"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "All items will be deleted from the clipboard."
msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
msgstr "Item already copied to clipboard."
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "No items"
+
msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
msgstr "%d items will be deleted."
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "All items will be deleted."
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Delete all items"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "All items will be deleted from the clipboard."
msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
msgstr "Item already copied to clipboard."
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "No items"
+
msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
msgstr "%d items will be deleted."
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "All items will be deleted."
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Delete all items"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "All items will be deleted from the clipboard."
msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
msgstr "Item already copied to clipboard."
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "No items"
+
msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
msgstr "Se eliminarán %d elementos"
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "Se eliminarán todos los elementos"
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Eliminar todos los elementos"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "Se eliminarán todos los elementos del portapapeles."
msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
msgstr "Elemento ya copiado en el portapapeles."
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "Sin elementos"
+
msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
msgstr "Se eliminarán %d elementos."
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "Se eliminarán todos los elementos."
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Eliminar todos los elementos"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "Se eliminarán todos los elementos del portapapeles."
msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
msgstr "Ya se copió el elemento al portapapeles."
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "No hay elementos"
msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
msgstr "%d uksust kustutatakse."
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "Kõik üksused kustutatakse."
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Kõigi üksuste kustutamine"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "Kõik üksused kustutatakse lõikelaualt."
msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
msgstr "Üksus on juba kopeeritud lõikelauale."
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "Üksusi pole"
+
msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
msgstr "%d elementu ezabatuko dira"
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "Elementu guztiak ezabatuko dira"
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Ezabatu elementu guztiak"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "Elementu guztiak ezabatuko dira arbeletik."
msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
msgstr "Elementua arbelean kopiatu dago aurretik."
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "Elementurik ez"
+
msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
msgstr "%d kohdetta poistetaan."
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "Kaikki kohteet poistetaan."
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Poista kaikki kohteet"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "Kaikki kohteet poistetaan leikepöydältä."
msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
msgstr "Kohde on jo kopioitu leikepöydälle."
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "Ei kohteita"
+
msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
msgstr "%d éléments vont être supprimés."
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "Tous les éléments vont être supprimés."
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Suppression ts les éléments"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "Tous les éléments vont être supprimés du presse-papiers."
msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
msgstr "Elément déjà copié sur le presse-papiers."
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "Aucun élément"
+
msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
msgstr "%d éléments vont être supprimés."
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "Tous les éléments vont être supprimés."
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Suppression ts les éléments"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "Tous les éléments vont être supprimés du presse-papier."
msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
msgstr "Élément déjà copié sur le presse-papier."
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "Aucun élément"
+
msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
msgstr "Scriosfar %d mír"
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "Scriosfar gach mír"
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Scrios gach mír"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "Scriosfar gach mír ón ngearrthaisce."
msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
msgstr "Mír cóipeáilte chuig an ngearrthaisce cheana."
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "Níl míreanna ann"
+
msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
msgstr "Eliminaranse %d elementos"
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "Eliminaranse todos os elementos"
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Eliminar todos os elementos"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "Eliminaranse todos os elementos do portapapeis."
msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
msgstr "Elemento xa copiado no portapapeis."
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "Sen elementos"
+
msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
msgstr "%d मदें हटाई जाएँगी।"
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "सभी मदें हटाए जाएँगे।"
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "सभी मदें हटाएँ"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "क्लिपबोर्ड से सभी मदें हटाई जाएँगी।"
msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
msgstr "मद पहले से ही क्लिपबोर्ड में कॉपी किया गया।"
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "कोई मद नहीं"
+
msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
msgstr "%d datoteka bit će obrisano."
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "Svi će stavke biti obrisane."
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Brisanje svih stavki"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "Izbrisat će se sve stavke iz međuspremnika."
msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
msgstr "Stavka je već kopirana u međuspremnik."
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "Nema stavki"
+
msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
msgstr "%d tételt törölni fog."
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "Minden tételt törölni fog."
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Összes elem törlése"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "Törli a vágólap összes elemét."
msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
msgstr "Már a vágólapra másolta ezt az elemet."
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "Nincs tétel"
+
msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
msgstr "%d տարրեր կվերացվեն:"
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "Բոլոր տարրերը կվերացվեն:"
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Վերացնել բոլոր տարրերը"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "Բոլոր տարրերը կվերացվեն միայն գզրոցից:"
msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
msgstr "Տարրն արդեն պատճենվել է գզրոցում:"
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "Տարրեր չկան"
+
msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
msgstr "%d hlutum verður eytt."
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "Öllum hlutum verður eytt."
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Eyða öllum atriðum"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "Öllum atriðum verður eytt af klippiborðinu."
msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
msgstr "Búið er að afrita atriðið á klippiborð."
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "Engin atriði"
+
msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
msgstr "%d elementi verranno eliminati."
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "Tutti gli elementi verranno eliminati."
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Elimina tutti gli elementi"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "Tutti gli elementi verranno eliminati dagli appunti."
msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
msgstr "Elemento già copiato negli appunti."
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "Nessun elemento"
+
msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
msgstr "%d件のアイテムを削除します。"
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "全てのアイテムを削除します。"
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "全てのアイテムを削除"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "全てのアイテムがクリップボードから削除されます。"
msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
msgstr "アイテムは既にクリップボードにコピーされています。"
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "アイテムがありません"
+
msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
msgstr "%d ელემენტი წაიშლება."
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "ყველა ელემენტი წაიშლება."
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "ყველა ელემენტის წაშლა"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "ბუფერულ მეხსიერებაში წაიშლება ყველაფერი."
msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
msgstr "ასლი უკვე შენახულია ბუფერში."
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "ელემენტები არაა"
+
msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
msgstr "%d элемент жойылады."
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "Барлық элементтер жойылады."
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Барлық элементтерді жою"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "Пернетақтадан барлық элементтер жойылады."
msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
msgstr "Элемент буферге көшіріліп қойған."
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "Элементтер жоқ"
+
--- /dev/null
+msgid "IDS_COM_BODY_DELETE"
+msgstr "ಅಳಿಸು"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "ಕ್ಲಿಪ್ಬೋರ್ಡ್ನಿಂದ ಅಳಿಸಿ"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "ಕ್ಲಿಪ್ಬೋರ್ಡ್ಗೆ ಲಾಕ್ ಮಾಡಿ"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "ಕ್ಲಿಪ್ಬೋರ್ಡ್ನಿಂದ ಅನ್ಲಾಕ್ ಮಾಡಿ"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "ರದ್ದು"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "ಕ್ಲಿಪ್ಬೋರ್ಡ್ ಆಯ್ಕೆಗಳು"
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "ಎಲ್ಲವನ್ನೂ ಅಳಿಸುವುದೆ?"
+
+msgid "IDS_DM_POP_PD_ITEMS_WILL_BE_DELETED_ABB2"
+msgstr "%d ಅಂಶಗಳನ್ನು ಅಳಿಸಲಾಗುವುದು."
+
+msgid "IDS_DM_POP_THIS_ITEM_WILL_BE_DELETED_ABB"
+msgstr "ಈ ಅಂಶವನ್ನು ಅಳಿಸಲಾಗುವುದು."
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "ಮುಚ್ಚಿ"
+
+msgid "IDS_COM_BODY_DONE"
+msgstr "ಮಾಡಲಾಗಿದೆ"
+
+msgid "IDS_COM_BODY_SELECT_ALL"
+msgstr "ಎಲ್ಲಾ ಆಯ್ಕೆಮಾಡಿ"
+
+msgid "IDS_COM_BODY_COPY"
+msgstr "ನಕಲಿಸಿ"
+
+msgid "IDS_COM_POP_DELETE_Q"
+msgstr "ಅಳಿಸಲೇ?"
+
+msgid "IDS_COM_SK_SELECT"
+msgstr "ಆಯ್ಕೆ"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "ಎಲ್ಲವನ್ನು ತೆಗೆದುಹಾಕಿ"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "ಕ್ಲಿಪ್ಬೋರ್ಡ್ಗೆ ನಕಲಿಸಿದೆ."
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "ಈಗಾಗಲೇ ಇದೆ."
+
+msgid "IDS_COM_BODY_CUT"
+msgstr "ಕತ್ತರಿಸು"
+
+msgid "IDS_COM_BODY_PASTE"
+msgstr "ಅಂಟಿಸಿರಿ"
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "ಕ್ಲಿಪ್ಬೋರ್ಡ್"
+
+msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
+msgstr "%dಅಂಶಗಳನ್ನು ಅಳಿಸಲಾಗುವುದು."
+
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "ಎಲ್ಲಾ ಐಟಮ್ಗಳನ್ನು ಅಳಿಸಿ"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "ಕ್ಲಿಪ್ಬೋರ್ಡ್ನಿಂದ ಎಲ್ಲ ಐಟಂಗಳನ್ನು ಅಳಿಸಲಾಗುತ್ತದೆ."
+
+msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
+msgstr "ಅಂಶವನ್ನು ಈಗಾಗಲೇ ಕ್ಲಿಪ್ಬೋರ್ಡ್ಗೆ ನಕಲಿಸಲಾಗಿದೆ."
+
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "ಯಾವುದೇ ಅಂಶಗಳಿಲ್ಲ"
+
msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
msgstr "항목 %d개를 삭제합니다."
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "항목을 모두 삭제합니다."
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "모든 항목 삭제"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "클립보드의 모든 항목을 삭제합니다."
msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
msgstr "클립보드에 이미 복사된 항목입니다."
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "항목이 없습니다"
+
msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
msgstr "Bus ištrinta elementų: %d."
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "Bus ištrinti visi elementai."
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Trinti visus elementus"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "Visi iškarpinės elementai bus ištrinti."
msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
msgstr "Elementas jau nukopijuotas į iškarpinę."
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "Nėra elementų"
+
msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
msgstr "%d objekti tiks izdzēsti."
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "Visi objekti tiks izdzēsti."
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Dzēst visus objektus"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "Visi objekti tiks izdzēsti no starpliktuves."
msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
msgstr "Objekts jau ir kopēts uz starpliktuvi."
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "Nav objektu"
+
msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
msgstr "%d записи ќе се избришат."
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "Сите записи ќе се избришат."
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Избриши ги сите записи"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "Сите записи ќе се избришат од посредната меморија."
msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
msgstr "Ставката е веќе ископирана во посредната меморија."
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "Нема записи"
+
--- /dev/null
+msgid "IDS_COM_BODY_DELETE"
+msgstr "ഇല്ലാതാക്കുക"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "ക്ലിപ്ബോര്ഡില് നിന്നും ഇല്ലാതാക്കുക"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "ക്ലിപ്ബോര്ഡിലേക്ക് ലോക്ക് ചെയ്യുക"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "ക്ലിപ്ബോര്ഡില് നിന്നും അണ്ലോക്ക് ചെയ്യുക"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "റദ്ദാക്കുക"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "ക്ലിപ്ബോര്ഡ് ഓപ്ഷനുകള്"
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "എല്ലാം ഇല്ലാതാക്കണോ?"
+
+msgid "IDS_DM_POP_PD_ITEMS_WILL_BE_DELETED_ABB2"
+msgstr "%d ഇനങ്ങൾ ഇല്ലാതാക്കപ്പെടും."
+
+msgid "IDS_DM_POP_THIS_ITEM_WILL_BE_DELETED_ABB"
+msgstr "ഈ ഇനം ഇല്ലാതാക്കപ്പെടും."
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "അടയ്ക്കുക"
+
+msgid "IDS_COM_BODY_DONE"
+msgstr "ചെയ്തു"
+
+msgid "IDS_COM_BODY_SELECT_ALL"
+msgstr "എല്ലാം തിരഞ്ഞെടുക്കുക"
+
+msgid "IDS_COM_BODY_COPY"
+msgstr "പകര്ത്തുക"
+
+msgid "IDS_COM_POP_DELETE_Q"
+msgstr "ഇല്ലാതാക്കണോ?"
+
+msgid "IDS_COM_SK_SELECT"
+msgstr "തിരഞ്ഞെ."
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "എല്ലാം ഇല്ലാതാക്കുക"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "ക്ലിപ്ബോര്ഡിലേക്ക് പകര്ത്തി."
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "ഇതിനകം നിലവിലുണ്ട്."
+
+msgid "IDS_COM_BODY_CUT"
+msgstr "മുറിക്കുക"
+
+msgid "IDS_COM_BODY_PASTE"
+msgstr "ഒട്ടിക്കുക"
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "ക്ലിപ്ബോര്ഡ്"
+
+msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
+msgstr "%d ഇനം ഇല്ലാതാക്കപ്പെടും."
+
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "എല്ലാ ഇനങ്ങളും മായ്ക്കുക"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "ക്ലിപ്ബോർഡിൽ നിന്ന് എല്ലാ ഇനങ്ങളും ഇല്ലാതാക്കപ്പെടും."
+
+msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
+msgstr "ഇനത്തെ നേരത്തേതന്നെ ക്ലിപ്ബോർഡിലേക്ക് പകർത്തിയിട്ടുണ്ട്."
+
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "ഇനങ്ങളൊന്നുമില്ല"
+
--- /dev/null
+msgid "IDS_COM_BODY_DELETE"
+msgstr "काढून टाका"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "क्लिपबोर्डमधून हटवा"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "क्लिपबोर्डवर लॉक करा."
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "क्लिपबोर्ड मधून अनलॉक करा."
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "रद्द"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "क्लिपबोर्ड पर्याय"
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "सर्व काढून टाकायचे?"
+
+msgid "IDS_DM_POP_PD_ITEMS_WILL_BE_DELETED_ABB2"
+msgstr "%d आयटम्स हटवले जातील."
+
+msgid "IDS_DM_POP_THIS_ITEM_WILL_BE_DELETED_ABB"
+msgstr "हा आयटम हटवला जाईल."
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "बंद करा"
+
+msgid "IDS_COM_BODY_DONE"
+msgstr "झाले"
+
+msgid "IDS_COM_BODY_SELECT_ALL"
+msgstr "सर्व निवडा"
+
+msgid "IDS_COM_BODY_COPY"
+msgstr "कॉपी"
+
+msgid "IDS_COM_POP_DELETE_Q"
+msgstr "काढून टाकायचे?"
+
+msgid "IDS_COM_SK_SELECT"
+msgstr "निवडा"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "सर्व काढून टाका"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "क्लिपबोर्डवर कॉपी केले."
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "आधिपासूनच."
+
+msgid "IDS_COM_BODY_CUT"
+msgstr "कट"
+
+msgid "IDS_COM_BODY_PASTE"
+msgstr "पेस्ट"
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "क्लिपबोर्ड"
+
+msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
+msgstr "%d बाबी हटवल्या जातील."
+
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "सर्व आयटम्स हटवा"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "सर्व आयटम्स क्लिपबोर्डवरून हटवण्यात येतील."
+
+msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
+msgstr "आयटम आधीपासूनच क्लिपबोर्डवर कॉपी केला."
+
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "बाबी नाही"
+
msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
msgstr "%d elementer vil bli slettet."
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "Alle elementer vil bli slettet."
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Slett alle elementer"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "Alle elementer blir slettet fra utklippstavlen."
msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
msgstr "Element er allerede kopiert til utklippstavle."
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "Ingen elementer"
+
--- /dev/null
+msgid "IDS_COM_BODY_DELETE"
+msgstr "मेटाउनु"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "क्लिपवोर्डबाट मेटाउ"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "क्लिपबोर्डमा लक गर्नुहोस्"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "क्लिपबोर्डबाट अनलक गर्नुहोस्"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "रद्द"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "क्लिपवोर्ड विकल्पहरू"
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "सबै मेटाउनु?"
+
+msgid "IDS_DM_POP_PD_ITEMS_WILL_BE_DELETED_ABB2"
+msgstr "%d वस्तुहरू मेटाइनेछ।"
+
+msgid "IDS_DM_POP_THIS_ITEM_WILL_BE_DELETED_ABB"
+msgstr "यो वस्तुलाई मेटाइनेछ।"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "बन्द गर्नुहोस्"
+
+msgid "IDS_COM_BODY_DONE"
+msgstr "भयो"
+
+msgid "IDS_COM_BODY_SELECT_ALL"
+msgstr "सबै छान्नुहोस्"
+
+msgid "IDS_COM_BODY_COPY"
+msgstr "कपी गर्नुहोस्"
+
+msgid "IDS_COM_POP_DELETE_Q"
+msgstr "मेट्ऊँ?"
+
+msgid "IDS_COM_SK_SELECT"
+msgstr "चयन गर"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "सबै मेटाउनु"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "क्लिपबोर्डमा प्रतिलिपि गरियो।"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "पहिले स्थापित छ।"
+
+msgid "IDS_COM_BODY_CUT"
+msgstr "काट्नुहोस्"
+
+msgid "IDS_COM_BODY_PASTE"
+msgstr "पेस्ट गर्नुहोस्"
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "क्लिपबोर्ड"
+
+msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
+msgstr "%d वस्तुहरू मेटाइनेछ।"
+
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "सबै वस्तुहरू मेटाउनुहोस्"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "क्लिपबोर्डबाट सबै वस्तुहरू मेटाइनेछ।"
+
+msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
+msgstr "वस्तु क्लिपबोर्डमा पहिले नै प्रतिलिपि गरियो।"
+
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "वस्तुहरु छैनन्"
+
msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
msgstr "%d items worden verwijderd."
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "Alle items worden verwijderd."
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Alle items verwijderen"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "Alle items worden verwijderd van het klembord."
msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
msgstr "Item is al gekopieerd naar klembord."
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "Geen items"
+
--- /dev/null
+msgid "IDS_COM_BODY_DELETE"
+msgstr "ବିଲୋପ"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "କ୍ଲିପ୍ବୋର୍ଡରୁ ବିଲୋପ କରନ୍ତୁ।"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "କ୍ଲିପ୍ବୋର୍ଡ୍କୁ ଲକ୍ କରନ୍ତୁ।"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "କ୍ଲିପ୍ବୋର୍ଡରୁ ଅନ୍ଲକ୍ କରନ୍ତୁ।"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "ବାତିଲ୍"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "କ୍ଲିପବୋର୍ଡ୍ ବିକଳ୍ପଗୁଡିକ"
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "ସମସ୍ତ ବିଲୋପ କରିବେ?"
+
+msgid "IDS_DM_POP_PD_ITEMS_WILL_BE_DELETED_ABB2"
+msgstr "%dଟି ଆଇଟମ୍ ବିଲୋପିତ ହେବ।"
+
+msgid "IDS_DM_POP_THIS_ITEM_WILL_BE_DELETED_ABB"
+msgstr "ଏହି ଆଇଟମ୍ ବିଲୋପିତ ହେବ।"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "ବନ୍ଦ"
+
+msgid "IDS_COM_BODY_DONE"
+msgstr "ସମାପ୍ତ"
+
+msgid "IDS_COM_BODY_SELECT_ALL"
+msgstr "ସମସ୍ତ ଚୟନ କରନ୍ତୁ"
+
+msgid "IDS_COM_BODY_COPY"
+msgstr "କପି"
+
+msgid "IDS_COM_POP_DELETE_Q"
+msgstr "ବିଲୋପ କରିବେ?"
+
+msgid "IDS_COM_SK_SELECT"
+msgstr "ଚୟନ"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "ସମସ୍ତ ବିଲୋପ କରନ୍ତୁ"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "କ୍ଲିପ୍ବୋର୍ଡ୍କୁ କପି ହୋଇଛି।"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "ପୂର୍ବରୁ ବିଦ୍ୟମାନ ଅଛି।"
+
+msgid "IDS_COM_BODY_CUT"
+msgstr "ଛେଦନ"
+
+msgid "IDS_COM_BODY_PASTE"
+msgstr "ଲେପନ"
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "କ୍ଲିପବୋର୍ଡ୍"
+
+msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
+msgstr "%d ଆଇଟମ୍ ବିଲୋପିତ ହେବ।"
+
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "ସମସ୍ତ ଆଇଟମ୍ ବିଲୋପ"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "କ୍ଲିପବୋର୍ଡରୁ ସମସ୍ତ ଆଇଟମ୍ ବିଲୋପ ହେବ।"
+
+msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
+msgstr "ଆଇଟମ୍ ପୂର୍ବରୁ କ୍ଲିପବୋର୍ଡକୁ କପି ହୋଇଛି।"
+
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "କୌଣସି ଆଇଟମ୍ ନାହିଁ"
+
--- /dev/null
+msgid "IDS_COM_BODY_DELETE"
+msgstr "ਮਿਟਾਓ"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "ਕਲਿਪਬੋਰਡ ਤੋਂ ਮਿਟਾਓ"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "ਕਲਿਪਬੋਰਡ ਤੇ ਲੌਕ ਕਰੋ"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "ਕਲਿਪਬੋਰਡ ਤੋਂ ਅਨਲੌਕ ਕਰੋ"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "ਰੱਦ"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "ਕਲਿਪਬੋਰਡ ਵਿਕਲਪ"
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "ਸਾਰੇ ਮਿਟਾਉਣੇ ਹਨ?"
+
+msgid "IDS_DM_POP_PD_ITEMS_WILL_BE_DELETED_ABB2"
+msgstr "%d ਆਈਟਮਸ ਨੂੰ ਮਿਟਾਇਆ ਜਾਵੇਗਾ।"
+
+msgid "IDS_DM_POP_THIS_ITEM_WILL_BE_DELETED_ABB"
+msgstr "ਇਸ ਆਈਟਮ ਨੂੰ ਮਿਟਾਇਆ ਜਾਵੇਗਾ।"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "ਬੰਦ ਕਰੋ"
+
+msgid "IDS_COM_BODY_DONE"
+msgstr "ਪੂਰਨ"
+
+msgid "IDS_COM_BODY_SELECT_ALL"
+msgstr "ਸਭ ਚੁਣੋ"
+
+msgid "IDS_COM_BODY_COPY"
+msgstr "ਕਾਪੀ ਕਰੋ"
+
+msgid "IDS_COM_POP_DELETE_Q"
+msgstr "ਮਿਟਾਉ?"
+
+msgid "IDS_COM_SK_SELECT"
+msgstr "ਚੁਣੋ"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "ਸਾਰੇ ਮਿਟਾਓ"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "ਕਲਿਪਬੋਰਡ ਤੇ ਕਾਪੀ ਹੋਇਆ।"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "ਪਹਿਲਾਂ ਤੋਂ ਹੀ ਮੌਜ਼ੂਦ ਹੈ।"
+
+msgid "IDS_COM_BODY_CUT"
+msgstr "ਕੱਟੋ"
+
+msgid "IDS_COM_BODY_PASTE"
+msgstr "ਪੇਸਟ ਕਰੋ"
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "ਕਲਿਪਬੋਰਡ"
+
+msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
+msgstr "%d ਆਈਟਮਾਂ ਮਿਟ ਜਾਣਗੀਆਂ।"
+
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "ਸਭ ਆਈਟਮਸ ਮਿਟਾਓ"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "ਸਾਰੇ ਆਈਟਮਸ ਕਲਿਪਬੋਰਡ ਤੋਂ ਮਿਟ ਜਾਣਗੇ।"
+
+msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
+msgstr "ਆਈਟਮ ਪਹਿਲਾਂ ਤੋਂ ਹੀ ਕਲਿਪਬੋਰਡ ਤੇ ਕਾਪੀ ਕੀਤੀ ਗਈ ਹੈ।"
+
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "ਕੋਈ ਆਈਟਮ ਨਹੀਂ"
+
msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
msgstr "Liczba elementów, które zostaną usunięte: %d."
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "Wszystkie elementy zostaną usunięte."
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Usuwanie wszystkich element."
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "Wszystkie elementy zostaną usunięte ze schowka."
msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
msgstr "Element już skopiowano do schowka."
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "Brak elementów"
+
msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
msgstr "%d itens serão excluídos"
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "Todos os itens serão apagados."
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Excluir todos os itens"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "Todos os itens serão excluídos da área de transferência."
msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
msgstr "Item já copiado para a área de transferência."
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "Nenhum item"
+
msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
msgstr "%d itens serão eliminados."
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "Todos os itens serão eliminados."
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Eliminar todos os itens"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "Todos os itens serão eliminados da área de transferência."
msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
msgstr "O item já foi copiado para a área de transferência."
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "Sem itens"
+
msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
msgstr "%d elemente vor fi şterse."
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "Toate elementele vor fi şterse."
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Ştergeţi toate elementele"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "Toate elementele vor fi şterse din clipboard."
msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
msgstr "Elementul a fost deja copiat în clipboard."
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "Niciun element"
+
msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
msgstr "Элементы (%d) будут удалены."
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "Все элементы будут удалены."
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Удаление всех элементов"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "Все элементы будут удалены из буфера обмена."
msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
msgstr "Элемент уже скопирован в буфер обмена."
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "Элементы отсутствуют"
+
--- /dev/null
+msgid "IDS_COM_BODY_DELETE"
+msgstr "මකන්න"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "ක්ලිප්බෝඩයෙන් මකන්න"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "ක්ලිප් බෝඩයට අගුලු දමන්න"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "ක්ලිප් බෝඩයෙන් අගුලු හරින්න"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "අවල. කර"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "ක්ලිප්බෝඩ් විකල්ප"
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "සියල්ල මකන්නද?"
+
+msgid "IDS_DM_POP_PD_ITEMS_WILL_BE_DELETED_ABB2"
+msgstr "අයිතම %d ක් මැකෙනු ඇත."
+
+msgid "IDS_DM_POP_THIS_ITEM_WILL_BE_DELETED_ABB"
+msgstr "මෙම අයිතමය මැකෙනු ඇත."
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "වසන්න"
+
+msgid "IDS_COM_BODY_DONE"
+msgstr "නිමයි"
+
+msgid "IDS_COM_BODY_SELECT_ALL"
+msgstr "සියල්ල තෝරන්න"
+
+msgid "IDS_COM_BODY_COPY"
+msgstr "පිටපත් කරන්න"
+
+msgid "IDS_COM_POP_DELETE_Q"
+msgstr "මකන්නද?"
+
+msgid "IDS_COM_SK_SELECT"
+msgstr "තෝරන්න"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "සියල්ල මකන්න"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "ක්ලිප්බෝඩ් වෙත පිටපත් විය."
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "දැනටමත් පවතී."
+
+msgid "IDS_COM_BODY_CUT"
+msgstr "කපන්න"
+
+msgid "IDS_COM_BODY_PASTE"
+msgstr "අලවන්න"
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "ක්ලිප් පුවරුව"
+
+msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
+msgstr "අයිතම %d මැකෙනු ඇත."
+
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "අයිතම සියල්ල මැකීම"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "අයිතම සියල්ල ක්ලිප්පුවරුව වෙතින් මැකෙනු ඇත."
+
+msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
+msgstr "අයිතමය දැනටමත් ක්ලිප්පුවරුවට පිටපත් කොට තිබේ."
+
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "අයිතම නැත"
+
msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
msgstr "%d položky sa vymažú."
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "Všetky položky sa vymažú."
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Odstrán. všetkých položiek"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "Zo schránky sa odstránia všetky položky."
msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
msgstr "Položka je už skopírovaná do schránky."
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "Žiadne položky"
+
msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
msgstr "%d elementov bo izbrisanih."
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "Vsi elementi bodo izbrisani."
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Izbrišite vse elemente"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "Vsi elementi bodo izbrisani iz odložišča."
msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
msgstr "Element je že bil kopiran v odložišče."
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "Ni elementov"
+
msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
msgstr "Biće obrisane/o %d stavke/i."
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "Biće obrisane sve stavke."
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Izbriši sve stavke"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "Sve stavke će biti izbrisane iz privremene memorije."
msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
msgstr "Stavka je već kopirana u privremenu memoriju."
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "Nema stavki"
+
msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
msgstr "%d objekt raderas."
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "Alla objekt tas bort."
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Ta bort alla objekt"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "Alla objekt kommer att tas bort från urklipp."
msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
msgstr "Objektet har redan kopierats till urklipp."
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "Inga objekt"
+
--- /dev/null
+msgid "IDS_COM_BODY_DELETE"
+msgstr "நீக்கு"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "க்ளிப்போர்டிலிருந்து நீக்குக"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "க்ளிப்போர்டில் பூட்டுக"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "க்ளிப்போர்டிலிருந்து பூட்டுநீக்குக"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "ரத்து"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "க்ளிப்போர்டு தெரிவுகள்"
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "எல்லாம் நீக்கவா?"
+
+msgid "IDS_DM_POP_PD_ITEMS_WILL_BE_DELETED_ABB2"
+msgstr "%d உருப்படிகள் நீக்கப்படும்."
+
+msgid "IDS_DM_POP_THIS_ITEM_WILL_BE_DELETED_ABB"
+msgstr "இந்த உருப்படி நீக்கப்படும்."
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "மூடவும்"
+
+msgid "IDS_COM_BODY_DONE"
+msgstr "முடிந்தது"
+
+msgid "IDS_COM_BODY_SELECT_ALL"
+msgstr "எல்லாம் தேர்வு"
+
+msgid "IDS_COM_BODY_COPY"
+msgstr "நகல்"
+
+msgid "IDS_COM_POP_DELETE_Q"
+msgstr "நீக்கவா?"
+
+msgid "IDS_COM_SK_SELECT"
+msgstr "தேர்வு"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "எல்லாம் நீக்குக"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "க்ளிப்போர்டிற்கு நகலெடுக்கப்பட்டது."
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "முன்பே உள்ளது."
+
+msgid "IDS_COM_BODY_CUT"
+msgstr "வெட்டு"
+
+msgid "IDS_COM_BODY_PASTE"
+msgstr "ஒட்டு"
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "கிளிப்போர்டு"
+
+msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
+msgstr "%d உருப்படிகள் நீக்கப்படும்."
+
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "எல். உருப்படிகளையும் நீக்குக"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "அனைத்து உருப்படிகளும் கிளிப்போர்டில் இருந்து நீக்கப்படும்."
+
+msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
+msgstr "உருப்படி ஏற்கனவே க்ளிப்போர்டிற்கு நகலெடுக்கப்பட்டது."
+
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "உருப்படிகள் இல்லை"
+
--- /dev/null
+msgid "IDS_COM_BODY_DELETE"
+msgstr "తొలగించు"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "క్లిప్బోర్డ్ నుండి తొలగించండి"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "క్లిప్బోర్డ్ కు లాక్ చేయండి"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "క్లిప్బోర్డ్ నుండి అన్లాక్ చెయ్యి"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "రద్దు"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "క్లిప్బోర్డ్ ఎంపికలు"
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "అన్నీ తొలగించాలా?"
+
+msgid "IDS_DM_POP_PD_ITEMS_WILL_BE_DELETED_ABB2"
+msgstr "%d అంశాలు తొలగించబడతాయి."
+
+msgid "IDS_DM_POP_THIS_ITEM_WILL_BE_DELETED_ABB"
+msgstr "ఈ అంశం తొలగిచబడుతుంది."
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "మూసివేయి"
+
+msgid "IDS_COM_BODY_DONE"
+msgstr "పూర్తయింది"
+
+msgid "IDS_COM_BODY_SELECT_ALL"
+msgstr "అన్నీ ఎంచుకోండి"
+
+msgid "IDS_COM_BODY_COPY"
+msgstr "కాపీ"
+
+msgid "IDS_COM_POP_DELETE_Q"
+msgstr "తొలగించాలా?"
+
+msgid "IDS_COM_SK_SELECT"
+msgstr "ఎంచు."
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "అన్నిటినీ తొలగించు"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "క్లిప్ బోర్డుకు కాపీ అయింది."
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "ఇప్పటికే ఉంది."
+
+msgid "IDS_COM_BODY_CUT"
+msgstr "కట్"
+
+msgid "IDS_COM_BODY_PASTE"
+msgstr "అతికించు"
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "క్లిప్బోర్డ్"
+
+msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
+msgstr "%d ఐటమ్లు తొలగించబడతాయి."
+
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "అన్ని అంశాలను తొలగించు"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "క్లిప్బోర్డ్ నుండి అన్ని అంశాలు తొలగించబడతాయి."
+
+msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
+msgstr "అంశం ఇప్పటికే క్లిప్బోర్డ్కు కాపీ చేయబడింది."
+
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "అంశాలు లేవు"
+
msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
msgstr "%d öğe silinecek."
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "Tüm öğeler silinecek."
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Tüm öğeleri sil"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "Tüm öğeler panodan silinecek."
msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
msgstr "Öğe zaten panoya kopyalandı."
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "Öğe yok"
+
msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
msgstr "%d об’єктів буде видалено."
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "Усі об’єкти буде видалено."
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Видалити всі об’єкти"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "Усі об’єкти буде видалено з буферу обміну."
msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
msgstr "Об’єкт уже скопійовано до буфера обміну."
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "Немає об’єктів"
+
--- /dev/null
+msgid "IDS_COM_BODY_DELETE"
+msgstr "مٹانا"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "کلپ بورڈ سے حذف کریں"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "کلپ بورڈ پر لاک کریں"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "کلپ بورڈ سے ان لاک کریں"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "منسوخ"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "کلپ بورڈ اختیارات"
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "تمام مٹانا؟"
+
+msgid "IDS_DM_POP_PD_ITEMS_WILL_BE_DELETED_ABB2"
+msgstr "%d اشیا حذف کردی جائیں گی۔"
+
+msgid "IDS_DM_POP_THIS_ITEM_WILL_BE_DELETED_ABB"
+msgstr "اس آئٹم کو حذف کر دیا جائے گا۔"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "بند کرنا"
+
+msgid "IDS_COM_BODY_DONE"
+msgstr "ٹھیک ہے"
+
+msgid "IDS_COM_BODY_SELECT_ALL"
+msgstr "تمام منتخب کریں"
+
+msgid "IDS_COM_BODY_COPY"
+msgstr "کاپی"
+
+msgid "IDS_COM_POP_DELETE_Q"
+msgstr "مٹانا؟"
+
+msgid "IDS_COM_SK_SELECT"
+msgstr "انتخاب"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "تمام مٹانا"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "کلپ بورڈ پر نقل ہوگیا۔"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "پہلے سے موجود۔"
+
+msgid "IDS_COM_BODY_CUT"
+msgstr "کٹ"
+
+msgid "IDS_COM_BODY_PASTE"
+msgstr "جوڑ دیں"
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "کلپ بورڈ"
+
+msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
+msgstr "%d اشیا حذف کردی جائیں گی"
+
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "تمام اشیاء حذف کریں"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "تمام اشیاء کو کلپ بورڈ سے حذف کر دیا جائے گا۔"
+
+msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
+msgstr "آئٹم پہلے ہی کلپ بورڈ میں کاپی ہوچکا ہے۔"
+
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "کوئی آئٹمز نہیں ہیں"
+
msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
msgstr "%d element o'chirib tashlanadi."
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "Barcha elementlar o'chirib tashlanadi."
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Barcha elementlarni o‘chir"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "Barcha elementlar faqat buferdan yo‘q qilinadi."
msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
msgstr "Elementdan buferga nusxa olindi."
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "Elementlar yo‘q"
+
msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
msgstr "将删除 %d 个项目。"
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "全部项目将被删除。"
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "删除所有项目"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "所有项目将从剪贴板删除。"
msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
msgstr "项目已复制至剪贴板"
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "无项目"
+
msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
msgstr "將刪除 %d 個項目。"
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "所有項目將被刪除。"
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "刪除所有項目"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "所有項目將從剪貼板刪除。"
msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
msgstr "項目已複製至剪貼板。"
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "無項目"
+
msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
msgstr "將刪除%d 個項目。"
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "所有項目將被刪除。"
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "刪除所有項目"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "將自剪貼簿刪除所有項目。"
msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
msgstr "項目已複製到剪貼簿。"
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "無項目"
+
#define _CBHM_H_
#include <Elementary.h>
-#include <efl_assist.h>
#include <Ecore_X.h>
#if !defined(PACKAGE)
# define APPNAME "Clipboard History Manager"
#endif
-#if !defined(LOCALEDIR)
-# define LOCALEDIR "/usr/share/locale"
-#endif
-
#define CBHM_MAGIC 0xad960009
typedef struct _TargetHandler TargetHandler;
typedef char *(*text_converter_func)(AppData *ad, int type_index, const char *str);
#define ITEM_CNT_MAX 20
-#define COPIED_DATA_STORAGE_DIR "/opt/var/.cbhm_files"
+#define COPIED_DATA_STORAGE_DIR DATADIR"/.cbhm_files"
#include "clipdrawer.h"
#include "item_manager.h"
#include "item_manager.h"
#include "xconverter.h"
-#define EDJ_PATH "/usr/share/edje"
+#define EDJ_PATH DATADIR"/edje"
#define APP_EDJ_FILE EDJ_PATH"/cbhmdrawer.edj"
#define GRP_MAIN "cbhmdrawer"
#define ANIM_DURATION 30 // 1 seconds
#define ANIM_FLOPS (0.5/30)
#define DEFAULT_WIDTH 720
-#define COMBINED_ITEM_IMAGE_HEIGHT 54
#define BUFF (int)1024 //limited gengrid text buffer
#define EDJE_CLOSE_PART_PREFIX "background/title/close/bg"
#define EDJE_DELETE_MODE_PREFIX "background/title/delete/image"
#define EDJE_DELETE_ALL_BTN_PART_PREFIX "background/title/delete_all/image"
-#define TIME_DELAY_LOWER_VIEW 0.1 //Time to delay lower view
-
static Evas_Object *create_win(ClipdrawerData *cd, const char *name);
static Evas_Object *_grid_image_content_get(void *data, Evas_Object *obj, const char *part);
static Evas_Object *_grid_combined_content_get(void *data, Evas_Object *obj, const char *part);
static char *_grid_text_get(void *data, Evas_Object *obj, const char *part);
+static Evas_Object *_grid_content_get(void *data, Evas_Object *obj, const char *part);
static void _grid_realized(void *data, Evas_Object *obj, void *event_info);
-static void _grid_unrealized(void *data, Evas_Object *obj, void *event_info);
static Eina_Bool clipdrawer_add_item(AppData *ad, CNP_ITEM *item);
static Eina_Bool clipdrawer_del_item(AppData *ad, CNP_ITEM *item);
static void _ok_btn_cb(void *data, Evas_Object *obj, void *event_info);
static void _cancel_btn_cb(void *data, Evas_Object *obj, void *event_info);
-static void _create_cbhm_popup(AppData *ad);
+static void _create_cbhm_popup(AppData *ad, ClipdrawerData *cd);
+static void _show_cbhm_popup(ClipdrawerData *cd);
+static void _hide_cbhm_popup(ClipdrawerData *cd);
static void clipdrawer_ly_clicked(void *data, Evas_Object *obj, const char *emission, const char *source);
-static void _grid_item_ly_clicked(void *data, Elm_Object_Item *it, const char *emission, const char *source);
+static void _grid_item_button_clicked(void *data, Evas_Object *obj, void *event_info);
static void setting_win(Ecore_X_Display *x_disp, Ecore_X_Window x_root_win, Ecore_X_Window x_main_win);
static Ecore_X_Window isf_ise_window_get();
static void set_transient_for(Ecore_X_Window x_main_win, Ecore_X_Window x_active_win);
static void unset_transient_for(Ecore_X_Window x_main_win);
static void set_focus_for_app_window(Ecore_X_Window x_main_win, Eina_Bool enable);
+static void rotate_cb(void *data, Evas_Object * obj, void *event);
static Evas_Event_Flags flick_end(void *data , void *event_info)
{
elm_object_item_signal_emit(gitem, "elm,state,show,dim", "elm");
else
elm_object_item_signal_emit(gitem, "elm,state,hide,dim", "elm");
+ if (entry_text) free(entry_text);
}
gitem = elm_gengrid_item_next_get(gitem);
static Eina_Bool keydown_cb(void *data, int type, void *event)
{
if (!data || !event) return ECORE_CALLBACK_DONE;
-
AppData *ad = data;
ClipdrawerData *cd = ad->clipdrawer;
Ecore_Event_Key *ev = event;
- if (!SAFE_STRCMP(ev->keyname, KEY_END))
+ if (!SAFE_STRCMP(ev->keyname, "XF86Back"))
{
if (cd->popup_activate)
- {
- cd->popup_activate = EINA_FALSE;
- evas_object_del(cd->popup_conform);
- evas_object_del(cd->popup_win);
- }
+ _hide_cbhm_popup(ad->clipdrawer);
else if (delete_mode)
_delete_mode_set(ad, EINA_FALSE);
else
clipdrawer_lower_view(ad);
}
- else if(!SAFE_STRCMP(ev->keyname, KEY_HOME))
+ else if(!SAFE_STRCMP(ev->keyname, "XF86Home"))
{
clipdrawer_lower_view(ad);
return ECORE_CALLBACK_PASS_ON;
ClipdrawerData *cd = ad->clipdrawer;
if ((item_count_get(ad, ATOM_INDEX_COUNT_ALL) - cd->locked_item_count) != 0)
- _create_cbhm_popup(ad);
+ _show_cbhm_popup(ad->clipdrawer);
}
ClipdrawerData* init_clipdrawer(AppData *ad)
ClipdrawerData *cd = calloc(1, sizeof(ClipdrawerData));
const char *data;
Evas_Object *part_obj, *access_obj;
+ int rotations[4] = { 0, 90, 180, 270 };
+ Evas_Coord w, h;
/* create and setting window */
if (!cd)
return NULL;
}
- //double scale = elm_config_scale_get();
- Evas_Object* ly = elm_layout_edje_get(cd->main_layout);
+ elm_win_wm_rotation_available_rotations_set(cd->main_win, rotations, 4);
+ evas_object_smart_callback_add(cd->main_win, "wm,rotation,changed", rotate_cb, ad);
- data = edje_object_data_get(ly, "clipboard_height");
- cd->height = data ? atoi(data) : 0;
- cd->height = ELM_SCALE_SIZE(cd->height);
-
- data = edje_object_data_get(ly, "clipboard_landscape_height");
- cd->landscape_height = data ? atoi(data) : 0;
- cd->landscape_height = ELM_SCALE_SIZE(cd->landscape_height);
+ cd->popup_win = elm_win_add(NULL, "delete popup", ELM_WIN_MENU);
+ ecore_x_window_size_get(ecore_x_window_root_first_get(), &w, &h);
+ evas_object_resize(cd->popup_win, w, h);
+ elm_win_alpha_set(cd->popup_win, EINA_TRUE);
+ ecore_x_icccm_name_class_set(elm_win_xwindow_get(cd->popup_win),"APP_POPUP", "APP_POPUP");
+ set_focus_for_app_window(elm_win_xwindow_get(cd->popup_win) , EINA_FALSE);
+ set_transient_for(elm_win_xwindow_get(cd->popup_win), cd->x_main_win);
+ elm_win_wm_rotation_available_rotations_set(cd->popup_win, rotations, 4);
+ elm_win_conformant_set(cd->popup_win, EINA_TRUE);
- data = edje_object_data_get(ly, "grid_item_bg_w");
- cd->grid_item_bg_w = data ? atoi(data) : 0;
- cd->grid_item_bg_w = ELM_SCALE_SIZE(cd->grid_item_bg_w);
+ cd->popup_conform = elm_conformant_add(cd->popup_win);
+ evas_object_size_hint_weight_set(cd->popup_conform, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ elm_win_resize_object_add(cd->popup_win, cd->popup_conform);
- data = edje_object_data_get(ly, "grid_item_bg_h");
- cd->grid_item_bg_h = data ? atoi(data) : 0;
- cd->grid_item_bg_h = ELM_SCALE_SIZE(cd->grid_item_bg_h);
+ _create_cbhm_popup(ad, cd);
- data = edje_object_data_get(ly, "grid_image_item_w");
- cd->grid_image_item_w = data ? atoi(data) : 0;
- cd->grid_image_item_w = ELM_SCALE_SIZE(cd->grid_image_item_w);
+ //double scale = elm_config_scale_get();
+ Evas_Object* ly = elm_layout_edje_get(cd->main_layout);
- data = edje_object_data_get(ly, "grid_image_item_h");
- cd->grid_image_item_h = data ? atoi(data) : 0;
- cd->grid_image_item_h = ELM_SCALE_SIZE(cd->grid_image_item_h);
+
+ if (cd->root_w == WVGA_WIDTH && cd->root_h == WVGA_HEIGHT)
+ {
+ cd->height = WVGA_CLIPBOARD_H;
+ cd->landscape_height = WVGA_CLIPBOARD_LANDSCAPE_H;
+ cd->grid_item_bg_w = WVGA_GRID_ITEM_W;
+ cd->grid_item_bg_h = WVGA_GRID_ITEM_H;
+ cd->grid_image_item_w = WVGA_GRID_IMAGE_ITEM_W;
+ cd->grid_image_item_h = WVGA_GRID_IMAGE_ITEM_H;
+ cd->grid_combined_item_w = WVGA_GRID_COMBINED_ITEM_W;
+ cd->grid_combined_item_h = WVGA_GRID_COMBINED_ITEM_H;
+ }
+ else
+ {
+ cd->height = CLIPBOARD_H;
+ cd->landscape_height = CLIPBOARD_LANDSCAPE_H;
+ cd->grid_item_bg_w = GRID_ITEM_W;
+ cd->grid_item_bg_h = GRID_ITEM_H;
+ cd->grid_image_item_w = GRID_IMAGE_ITEM_W;
+ cd->grid_image_item_h = GRID_IMAGE_ITEM_H;
+ cd->grid_combined_item_w = GRID_COMBINED_ITEM_W;
+ cd->grid_combined_item_h = GRID_COMBINED_ITEM_H;
+
+ cd->height = ELM_SCALE_SIZE(cd->height);
+ cd->landscape_height = ELM_SCALE_SIZE(cd->landscape_height);
+ cd->grid_item_bg_w = ELM_SCALE_SIZE(cd->grid_item_bg_w);
+ cd->grid_item_bg_h = ELM_SCALE_SIZE(cd->grid_item_bg_h);
+ cd->grid_image_item_w = ELM_SCALE_SIZE(cd->grid_image_item_w);
+ cd->grid_image_item_h = ELM_SCALE_SIZE(cd->grid_image_item_h);
+ cd->grid_combined_item_w = ELM_SCALE_SIZE(cd->grid_combined_item_w);
+ cd->grid_combined_item_h = ELM_SCALE_SIZE(cd->grid_combined_item_h);
+ }
/* create and setting gengrid */
elm_theme_extension_add(NULL, APP_EDJ_FILE);
elm_gengrid_clear(cd->gengrid);
evas_object_smart_callback_add(cd->gengrid, "realized", _grid_realized, NULL);
- evas_object_smart_callback_add(cd->gengrid, "unrealized", _grid_unrealized, NULL);
cd->gic_image.item_style = "clipboard/image_style";
cd->gic_image.func.text_get = NULL;
cd->gic_text.item_style = "clipboard/text_style";
cd->gic_text.func.text_get = _grid_text_get;
- cd->gic_text.func.content_get = NULL;
+ cd->gic_text.func.content_get = _grid_content_get;
cd->gic_text.func.state_get = NULL;
cd->gic_text.func.del = NULL;
cd->item_clicked = EINA_FALSE;
cd->delbtn_clicked = EINA_FALSE;
- cd->lower_view_timer = NULL;
-
cd->event_rect = evas_object_rectangle_add(evas_object_evas_get(cd->main_win));
evas_object_size_hint_weight_set(cd->event_rect, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_color_set(cd->event_rect, 0, 0, 0, 0);
elm_gesture_layer_attach(cd->gesture_layer, cd->event_rect);
elm_gesture_layer_cb_set(cd->gesture_layer, ELM_GESTURE_N_FLICKS, ELM_GESTURE_STATE_END, flick_end, ad);
+ cd->noc_layout = elm_layout_add(cd->main_win);
+ elm_layout_theme_set(cd->noc_layout, "layout", "nocontents", "default");
+ elm_object_part_text_set(cd->noc_layout, "elm.text", S_NO_ITEMS);
+
return cd;
}
void depose_clipdrawer(ClipdrawerData *cd)
{
- utilx_ungrab_key(ecore_x_display_get(), cd->x_main_win, KEY_END);
- utilx_ungrab_key(ecore_x_display_get(), cd->x_main_win, KEY_HOME);
+ utilx_ungrab_key(ecore_x_display_get(), cd->x_main_win, "XF86Back");
+ utilx_ungrab_key(ecore_x_display_get(), cd->x_main_win, "XF86Home");
evas_object_del(cd->main_win);
+ evas_object_del(cd->cbhm_popup);
+ evas_object_del(cd->popup_conform);
+ evas_object_del(cd->popup_win);
if (cd->anim_timer)
ecore_timer_del(cd->anim_timer);
if (cd->keydown_handler)
else
return SAFE_STRDUP(item->data);
}
-
return NULL;
}
+static Evas_Object *_grid_content_get(void *data, Evas_Object *obj, const char *part)
+{
+ CNP_ITEM *item = data;
+
+ if (!SAFE_STRCMP(part, "delbtn/img")) /* text */
+ {
+ Evas_Object *btn = elm_button_add(obj);
+ elm_object_style_set(btn, "delete_icon");
+ evas_object_propagate_events_set(btn,EINA_FALSE);
+ evas_object_smart_callback_add(btn, "clicked", _grid_item_button_clicked, item);
+ return btn;
+ }
+ else
+ return NULL;
+}
+
+
static Evas_Object *_grid_image_content_get(void *data, Evas_Object *obj, const char *part)
{
CNP_ITEM *item = data;
if (w > grid_image_real_w || h > grid_image_real_h)
{
- if (w >= h)
+ if (w > h)
{
- iw = ELM_SCALE_SIZE(126);
- ih = ELM_SCALE_SIZE(106);
+ iw = cd->grid_image_item_w;
+ ih = cd->grid_image_item_h;
+ }
+ else if (w < h)
+ {
+ iw = (float)cd->grid_image_item_h / 1.5;
+ ih = cd->grid_image_item_h;
}
else
{
- iw = ELM_SCALE_SIZE(106);
- ih = ELM_SCALE_SIZE(126);
+ iw = cd->grid_image_item_h;
+ ih = cd->grid_image_item_h;
}
}
else
else
elm_object_item_signal_emit(gitem, "elm,state,hide,dim", "elm");
}
+ else if (!SAFE_STRCMP(part, "delbtn/img")) /* text */
+ {
+ Evas_Object *btn = elm_button_add(obj);
+ elm_object_style_set(btn, "delete_icon");
+ evas_object_propagate_events_set(btn,EINA_FALSE);
+ evas_object_smart_callback_add(btn, "clicked", _grid_item_button_clicked, item);
+ return btn;
+ }
else
return NULL;
if (w <= 0 || h <= 0)
return NULL;
- if (w > grid_image_real_w || h > COMBINED_ITEM_IMAGE_HEIGHT)
+ if (w > cd->grid_combined_item_w || h > cd->grid_combined_item_h )
{
- if (w >= h)
+ if (h >= w)
{
- ih = (float)grid_image_real_w / w * h;
- if (ih > COMBINED_ITEM_IMAGE_HEIGHT)
+ iw = (float)grid_image_real_h / h * w;
+ if (iw > cd->grid_combined_item_w)
{
- iw = (float)COMBINED_ITEM_IMAGE_HEIGHT / h * w;
- ih = COMBINED_ITEM_IMAGE_HEIGHT;
+ ih = (float)cd->grid_combined_item_w / w * h;
+ iw = cd->grid_combined_item_w;
}
else
{
- iw = grid_image_real_w;
+ ih = cd->grid_combined_item_h;
}
}
else
{
- iw = (float)COMBINED_ITEM_IMAGE_HEIGHT / h * w;
- ih = COMBINED_ITEM_IMAGE_HEIGHT;
+ ih = (float)cd->grid_combined_item_w / w * h;
+ iw = cd->grid_combined_item_w;
}
}
else
if (entry_text)
{
entry_text = evas_textblock_text_markup_to_utf8(NULL, entry_text);
- if (entry_text)
- strcat(entry_text, "\0");
+ if (entry_text)
+ strcat(entry_text, "\0");
}
if (cd->paste_text_only && entry_text && !strlen(entry_text))
elm_object_item_signal_emit(gitem, "elm,state,show,dim", "elm");
else
elm_object_item_signal_emit(gitem, "elm,state,hide,dim", "elm");
+ if (entry_text)
+ free(entry_text);
+ }
+ else if (!SAFE_STRCMP(part, "delbtn/img")) /* text */
+ {
+ Evas_Object *btn = elm_button_add(obj);
+ elm_object_style_set(btn, "delete_icon");
+ evas_object_propagate_events_set(btn,EINA_FALSE);
+ evas_object_smart_callback_add(btn, "clicked", _grid_item_button_clicked, item);
+ return btn;
}
else
return NULL;
{
item = elm_object_item_data_get(gitem);
- if (item)
- elm_object_item_signal_callback_add(gitem, "mouse,clicked,1", "*", _grid_item_ly_clicked, item);
-
if (delete_mode)
elm_object_item_signal_emit(gitem, "elm,state,show,delbtn", "elm");
else
}
}
-static void _create_cbhm_popup(AppData *ad)
+void _create_cbhm_popup(AppData *ad, ClipdrawerData *cd)
{
- if (ad == NULL) return;
-
- ClipdrawerData *cd = ad->clipdrawer;
Evas_Object *btn1;
Evas_Object *btn2;
- int w,h;
- int rotations[4] = { 0, 90, 180, 270 };
-
- if (cd->popup_activate == EINA_TRUE)
- return;
-
- cd->popup_activate = EINA_TRUE;
-
- cd->popup_win = elm_win_add(NULL, "delete popup", ELM_WIN_MENU);
- ecore_x_window_size_get(ecore_x_window_root_first_get(), &w, &h);
- evas_object_resize(cd->popup_win, w, h);
- elm_win_alpha_set(cd->popup_win, EINA_TRUE);
- ecore_x_icccm_name_class_set(elm_win_xwindow_get(cd->popup_win),"APP_POPUP", "APP_POPUP");
- set_focus_for_app_window(elm_win_xwindow_get(cd->popup_win) , EINA_FALSE);
- set_transient_for(elm_win_xwindow_get(cd->popup_win), cd->x_main_win);
- elm_win_wm_rotation_available_rotations_set(cd->popup_win, rotations, 4);
- evas_object_show(cd->popup_win);
-
- cd->popup_conform = elm_conformant_add(cd->popup_win);
- evas_object_size_hint_weight_set(cd->popup_conform, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- elm_win_resize_object_add(cd->popup_win, cd->popup_conform);
- evas_object_show(cd->popup_conform);
-
- elm_win_conformant_set(cd->popup_win, EINA_TRUE);
cd->cbhm_popup = elm_popup_add(cd->popup_win);
-
elm_object_part_text_set(cd->cbhm_popup, "title,text", S_DELETE_Q);
elm_object_text_set(cd->cbhm_popup, S_DELETE_ALL_Q);
btn1 = elm_button_add(cd->cbhm_popup);
- elm_object_style_set(btn1, "popup_button/default");
+ elm_object_style_set(btn1, "popup");
elm_object_text_set(btn1, S_CANCEL);
elm_object_part_content_set(cd->cbhm_popup, "button1", btn1);
evas_object_smart_callback_add(btn1, "clicked", _cancel_btn_cb, ad);
btn2 = elm_button_add(cd->cbhm_popup);
- elm_object_style_set(btn2, "popup_button/default");
+ elm_object_style_set(btn2, "popup");
elm_object_text_set(btn2, S_DELETE);
elm_object_part_content_set(cd->cbhm_popup, "button2", btn2);
evas_object_smart_callback_add(btn2, "clicked", _ok_btn_cb, ad);
+}
+
+static void _show_cbhm_popup(ClipdrawerData *cd)
+{
+ if (cd == NULL) return;
+
+ if (cd->popup_activate == EINA_TRUE)
+ return;
+ cd->popup_activate = EINA_TRUE;
+
+ evas_object_show(cd->popup_conform);
evas_object_show(cd->cbhm_popup);
+ evas_object_show(cd->popup_win);
}
-static void _grid_unrealized(void *data, Evas_Object *obj, void *event_info)
+static void _hide_cbhm_popup(ClipdrawerData *cd)
{
- Elm_Object_Item *gitem = (Elm_Object_Item *) event_info;
+ if (cd == NULL) return;
- if (gitem)
- elm_object_item_signal_callback_del(gitem, "mouse,clicked,1", "*", _grid_item_ly_clicked);
+ if (cd->popup_activate == EINA_FALSE)
+ return;
+
+ cd->popup_activate = EINA_FALSE;
+
+ evas_object_hide(cd->popup_win);
+ evas_object_hide(cd->popup_conform);
+ evas_object_hide(cd->cbhm_popup);
}
static void clipdrawer_ly_clicked(void *data, Evas_Object *obj, const char *emission, const char *source)
else if (!SAFE_STRNCMP(source, EDJE_DELETE_MODE_PREFIX, SAFE_STRLEN(EDJE_DELETE_MODE_PREFIX)))
_delete_mode_set(ad, !delete_mode);
else if (!SAFE_STRNCMP(source, EDJE_DELETE_ALL_BTN_PART_PREFIX, SAFE_STRLEN(EDJE_DELETE_ALL_BTN_PART_PREFIX)))
- _create_cbhm_popup(ad);
+ _show_cbhm_popup(ad->clipdrawer);
else
return;
}
CNP_ITEM *gitem_data = elm_object_item_data_get(gitem);
gitem = elm_gengrid_item_next_get(gitem);
- if (gitem_data && !gitem_data->locked)
+ if(!gitem_data->locked)
item_delete_by_CNP_ITEM(ad, gitem_data);
}
if (item_count_get(ad, ATOM_INDEX_COUNT_ALL) == 0)
clipdrawer_lower_view(ad);
else
- {
- cd->popup_activate = EINA_FALSE;
- evas_object_del(cd->popup_conform);
- evas_object_del(cd->popup_win);
- }
+ _hide_cbhm_popup(ad->clipdrawer);
}
static void _cancel_btn_cb(void *data, Evas_Object *obj, void *event_info)
AppData *ad = data;
ClipdrawerData *cd = ad->clipdrawer;
- cd->popup_activate = EINA_FALSE;
- evas_object_del(cd->popup_conform);
- evas_object_del(cd->popup_win);
+ _hide_cbhm_popup(ad->clipdrawer);
}
-static void _grid_item_ly_clicked(void *data, Elm_Object_Item *it, const char *emission, const char *source)
+static void _grid_item_button_clicked(void *data, Evas_Object *obj, void *event_info)
{
CNP_ITEM *item = data;
AppData *ad = item->ad;
if (cd->anim_status != STATUS_NONE)
return;
- #define EDJE_DELBTN_PART_PREFIX "delbtn/img"
- if (!SAFE_STRNCMP(source, EDJE_DELBTN_PART_PREFIX, SAFE_STRLEN(EDJE_DELBTN_PART_PREFIX)))
- cd->delbtn_clicked = EINA_TRUE;
+ item_delete_by_CNP_ITEM(ad, item);
}
static Ecore_X_Window isf_ise_window_get()
return ECORE_CALLBACK_CANCEL;
}
-void rotate_cb(void *data, Evas_Object * obj, void *event)
+static void rotate_cb(void *data, Evas_Object * obj, void *event)
{
if (!data) return;
Ecore_X_Window x_transient_win = ad->x_active_win;
Ecore_X_Window x_isf_ise_win = 0;
Ecore_X_Virtual_Keyboard_State isf_ise_state;
- int rotations[4] = { 0, 90, 180, 270 };
if(cd->main_layout)
{
}
set_transient_for(cd->x_main_win, x_transient_win);
- elm_win_wm_rotation_available_rotations_set(cd->main_win, rotations, 4);
- evas_object_smart_callback_add(cd->main_win, "wm,rotation,changed", rotate_cb, ad);
_delete_mode_set(ad, EINA_FALSE);
set_rotation_to_clipdrawer(ad);
evas_object_show(cd->main_win);
elm_win_activate(cd->main_win);
ecore_x_e_illume_clipboard_state_set(ad->x_active_win, ECORE_X_ILLUME_CLIPBOARD_STATE_ON);
- utilx_grab_key(ad->x_disp, cd->x_main_win, KEY_END, TOP_POSITION_GRAB);
- utilx_grab_key(ad->x_disp, cd->x_main_win, KEY_HOME, SHARED_GRAB);
+ utilx_grab_key(ad->x_disp, cd->x_main_win, "XF86Back", TOP_POSITION_GRAB);
+ utilx_grab_key(ad->x_disp, cd->x_main_win, "XF86Home", SHARED_GRAB);
ecore_timer_add(0.125, timer_cb, cd); //0.125 is experimentally decided.
}
+
+ if (item_count_get(ad, ATOM_INDEX_COUNT_ALL) == 0)
+ {
+ elm_object_part_content_unset(cd->main_layout, "historyitems");
+ evas_object_hide(cd->gengrid);
+ elm_object_part_content_set(cd->main_layout, "historyitems", cd->noc_layout);
+ }
+ else
+ {
+ elm_object_part_content_unset(cd->main_layout, "historyitems");
+ evas_object_hide(cd->noc_layout);
+ elm_object_part_content_set(cd->main_layout, "historyitems", cd->gengrid);
+ }
}
-static Eina_Bool clipdrawer_lower_view_timer_cb(void *data)
+void clipdrawer_lower_view(AppData* ad)
{
CALLED();
- AppData *ad = (AppData *)data;
ClipdrawerData *cd = ad->clipdrawer;
-
- cd->lower_view_timer = NULL;
+ Ecore_X_Window x_isf_ise_win = 0;
+ Ecore_X_Virtual_Keyboard_State isf_ise_state;
if (cd->main_win)
{
+ if(cd->popup_activate)
+ _hide_cbhm_popup(ad->clipdrawer);
+
elm_object_signal_emit(cd->main_layout, "elm,state,hide,historyitems", "elm");
edje_object_message_signal_process(elm_layout_edje_get(cd->main_layout));
+ Elm_Object_Item *it = elm_gengrid_first_item_get (cd->gengrid);
+ elm_gengrid_item_show(it, ELM_GENGRID_ITEM_SCROLLTO_NONE);
evas_object_hide(cd->main_win);
elm_win_lower(cd->main_win);
unset_transient_for(cd->x_main_win);
_delete_mode_set(ad, EINA_FALSE);
- }
-
- return ECORE_CALLBACK_CANCEL;
-}
-void clipdrawer_lower_view(AppData* ad)
-{
- CALLED();
- ClipdrawerData *cd = ad->clipdrawer;
- Ecore_X_Window x_isf_ise_win = 0;
- Ecore_X_Virtual_Keyboard_State isf_ise_state;
-
- if (cd->lower_view_timer) return;
-
- if (cd->main_win)
- {
ecore_x_e_illume_clipboard_state_set(ad->x_active_win, ECORE_X_ILLUME_CLIPBOARD_STATE_OFF);
ecore_x_e_illume_clipboard_geometry_set(ad->x_active_win, 0, 0, 0, 0);
ecore_x_e_illume_clipboard_state_set(x_isf_ise_win, ECORE_X_ILLUME_CLIPBOARD_STATE_OFF);
}
- utilx_ungrab_key(ad->x_disp, cd->x_main_win, KEY_END);
- utilx_ungrab_key(ad->x_disp, cd->x_main_win, KEY_HOME);
-
- if(cd->popup_activate)
- {
- cd->popup_activate = EINA_FALSE;
- evas_object_del(cd->popup_conform);
- evas_object_del(cd->popup_win);
- }
+ utilx_ungrab_key(ad->x_disp, cd->x_main_win, "XF86Back");
+ utilx_ungrab_key(ad->x_disp, cd->x_main_win, "XF86Home");
}
-
- cd->lower_view_timer = ecore_timer_add(TIME_DELAY_LOWER_VIEW, clipdrawer_lower_view_timer_cb, ad);
}
void _delete_mode_set(AppData* ad, Eina_Bool del_mode)
else
{
elm_object_part_text_set(cd->main_layout, "panel_function_delete", S_DELETE);
-
+
if (item_count_get(ad, ATOM_INDEX_COUNT_ALL) == 0)
{
elm_object_signal_emit(cd->main_layout, "elm,state,show,delete_all", "elm");
elm_object_signal_emit(cd->main_layout, "elm,state,disable,del", "elm");
+ elm_object_part_content_unset(cd->main_layout, "historyitems");
+ evas_object_hide(cd->gengrid);
+ elm_object_part_content_set(cd->main_layout, "historyitems", cd->noc_layout);
}
else
elm_object_signal_emit(cd->main_layout, "elm,state,show,delete_all", "elm");
#include <Ecore_X.h>
#include <Elementary.h>
+
+// WVGA Resolution
+#define WVGA_WIDTH 480
+#define WVGA_HEIGHT 800
+#define WVGA_CLIPBOARD_H 276
+#define WVGA_CLIPBOARD_LANDSCAPE_H 212
+#define WVGA_GRID_ITEM_W 158
+#define WVGA_GRID_ITEM_H 105
+#define WVGA_GRID_IMAGE_ITEM_W 148
+#define WVGA_GRID_IMAGE_ITEM_H 97
+#define WVGA_GRID_COMBINED_ITEM_W 61
+#define WVGA_GRID_COMBINED_ITEM_H 91
+
+// Default Resolution
+#define CLIPBOARD_H 442
+#define CLIPBOARD_LANDSCAPE_H 318
+#define GRID_ITEM_W 259
+#define GRID_ITEM_H 175
+#define GRID_IMAGE_ITEM_W 240
+#define GRID_IMAGE_ITEM_H 159
+#define GRID_COMBINED_ITEM_W 102
+#define GRID_COMBINED_ITEM_H 153
+
typedef enum _AnimStatus AnimStatus;
enum _AnimStatus {
STATUS_NONE = 0,
Evas_Object *popup_win;
Evas_Object *popup_conform;
Evas_Object *cbhm_popup;
+ Evas_Object *noc_layout;
Evas *evas;
Ecore_Event_Handler *keydown_handler;
Ecore_Timer *anim_timer;
Elm_Gengrid_Item_Class gic;
- Ecore_Timer *lower_view_timer;
int locked_item_count;
Ecore_X_Window x_main_win;
int grid_item_bg_h;
int grid_image_item_w;
int grid_image_item_h;
+ int grid_combined_item_w;
+ int grid_combined_item_h;
AnimStatus anim_status;
int anim_count;
}
ClipdrawerData *cd = ad->clipdrawer;
if ((item_count_get(ad, ATOM_INDEX_COUNT_ALL) - cd->locked_item_count) == 0)
+ {
elm_object_signal_emit(cd->main_layout, "elm,state,enable,del", "elm");
+ elm_object_part_content_unset(cd->main_layout, "historyitems");
+ evas_object_hide(cd->noc_layout);
+ elm_object_part_content_set(cd->main_layout, "historyitems", cd->gengrid);
+ }
+
if (!item)
{
ERR("WRONG PARAMETER in %s, ad: 0x%p, item: 0x%p", __func__, ad, item);
now = localtime(&tim);
if (now)
sprintf(filename, "fromweb-%d%02d%02d%02d%02d%02d%s",
- now->tm_year + 1900, now->tm_mon + 1, now->tm_mday,
- now->tm_hour, now->tm_min, now->tm_sec, ".jpg");
+ now->tm_year + 1900, now->tm_mon + 1, now->tm_mday,
+ now->tm_hour, now->tm_min, now->tm_sec, ".jpg");
else
sprintf(filename, "fromweb-%d%02d%02d%02d%02d%02d%s",
1900, 1, 1, 0, 0, 0,".jpg");
{
entry_text = string_for_entry_get(ad, ATOM_INDEX_EFL, data);
copied_path = string_for_image_path_get(ad, ATOM_INDEX_EFL, data);
+ if (copied_path)
+ item->img_from_markup = EINA_TRUE;
}
else if (item->type_index == ATOM_INDEX_IMAGE)
{
FREE(orig_path);
}
- // Set vconf value to notify copy event to popsync application
- vconf_set_str(VCONFKEY_POPSYNC_COPY_EVENT_SET_KEY, "1");
return item;
}
slot_item_count_set(ad);
if (item_count_get(ad, ATOM_INDEX_COUNT_ALL) == 0)
+ {
_delete_mode_set(ad, EINA_FALSE);
+ clipdrawer_lower_view(ad);
+ }
}
void item_delete_by_data(AppData *ad, void *data, int len)
#include "cbhm.h"
#include <vconf.h>
-#include <vconf-internal-popsync-keys.h>
+#include <vconf-internal-keys.h>
#define MULTI_(s) dgettext(PACKAGE, s)
#define S_CLIPBOARD MULTI_("IDS_COM_BODY_CLIPBOARD")
#define S_COPY MULTI_("IDS_COM_POP_COPIED_TO_CLIPBOARD")
#define S_EXIST MULTI_("IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD")
#define S_DELETE_ALL MULTI_("IDS_COM_BODY_DELETE_ALL")
-#define S_DELETE_ALL_Q MULTI_("IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED")
+#define S_DELETE_ALL_Q MULTI_("IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD")
#define S_CANCEL MULTI_("IDS_COM_BUTTON_CANCEL")
#define S_CLOSE MULTI_("IDS_COM_BODY_CLOSE")
#define S_CLIPBOARD_OPTION MULTI_("IDS_COM_HEADER_CLIPBOARD_OPTIONS")
-#define S_DELETE_Q MULTI_("IDS_COM_BODY_DELETE")
+#define S_DELETE_Q MULTI_("IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB")
+#define S_NO_ITEMS MULTI_("IDS_GALLERY_NPBODY_NO_ITEMS")
enum GRID_ITEM_STYLE {
GRID_ITEM_STYLE_TEXT = 0,
size_t file_len;
int gitem_style;
Eina_Bool img_from_web;
+ Eina_Bool img_from_markup;
Elm_Object_Item *gitem;
Eina_Bool locked;
AppData *ad;
{
AppData *ad = (AppData *)data;
- elm_app_base_scale_set(1.8);
+ elm_app_base_scale_set(2.6);
ecore_x_init(ad->x_disp);
_log_domain = eina_log_domain_register("cbhm", EINA_COLOR_LIGHTBLUE);
if (!_log_domain)
return 0;
}
+static int _lang_changed(void *data)
+{
+ return 0;
+}
+
int main(int argc, char *argv[])
{
AppData *ad;
g_main_ad = ad;
appcore_set_i18n(PACKAGE, LOCALEDIR);
+ appcore_set_event_callback(APPCORE_EVENT_LANG_CHANGE, _lang_changed, NULL);
// Notyfication to systemd
sd_notify(1, "READY=1");
#include <Ecore_File.h>
#include "storage.h"
-#define STORAGE_FILEPATH "/opt/var/.cbhm_data"
+#define STORAGE_FILEPATH DATADIR"/.cbhm_data"
#define STORAGE_KEY_INDEX_FORMAT "<index%02d>"
#define STORAGE_KEY_ITEM_FORMAT "<item%02d%s>"
#define STORAGE_INDEX_ITEM_NONE 0.0
file = item->file;
}
- if (!file || item->img_from_web)
+ if (!file || item->img_from_web || item->img_from_markup)
{
if (item_type_index == ATOM_INDEX_HTML)
ad->targetAtoms[item_type_index].convert_to_target[ATOM_INDEX_IMAGE] = NULL;
if (xpos)
{
int absizeLen = SAFE_STRLEN(value);
- char *modify = SAFE_STRNDUP(value, xpos - value);
- if (modify)
- {
- FREE(data->width);
- data->width = modify;
- }
- modify = SAFE_STRNDUP(xpos + 1, absizeLen - (xpos - value) - 1);
- if (modify)
- {
- FREE(data->height);
- data->height = modify;
- }
+ freeAndAssign(data->width, SAFE_STRNDUP(value, xpos - value));
+ freeAndAssign(data->height, SAFE_STRNDUP(xpos + 1, absizeLen - (xpos - value) - 1));
DBG("image width: -%s-, height: -%s-", data->width, data->height);
}
FREE(value);
Eina_Bool image_path_exists = EINA_FALSE;
int len = SAFE_STRLEN(str);
char *p = entry_convert_emoticon_to_normal_text((char *)str);
- char *s = NULL;
+ char *s, *temp;
char *image_path = NULL;
-
- if (!p) return NULL;
-
+ temp = p;
if (type_index == ATOM_INDEX_EFL)
{
for (s = p; (p - s) <= len; p++)
}
}
}
-
+ FREE(temp);
if (image_path_exists)
{
image_path = eina_strbuf_string_steal(sbuf);
eina_strbuf_free(sbuf);
- free(s);
return image_path;
}
eina_strbuf_free(sbuf);
- if (s)
- free(s);
return NULL;
}
{
char *remain_text = (char *)src_text;
char *dst_str = NULL;
+ const char *str;
Eina_Strbuf *msg_data = eina_strbuf_new();
- if (!msg_data) return NULL;
-
while (*remain_text) {
char *text_start = remain_text;
int emoticon = ENTRY_EMOTICON_NONE;
break;
}
}
-
- dst_str = strdup(eina_strbuf_string_get(msg_data));
+ str = eina_strbuf_string_get(msg_data);
+ if (str) dst_str = strdup(str);
eina_strbuf_free(msg_data);
return dst_str;
char *emoticon_text = entry_convert_emoticon_to_normal_text(str);
char *normal_text = markup_to_entry(ad, type_index, emoticon_text);
- FREE(emoticon_text);
+
return normal_text;
}
char *emoticon_text = entry_convert_emoticon_to_normal_text(str);
if (emoticon_text)
{
- entry_text = markup_to_entry(ad, type_index, emoticon_text);
- entry_text = evas_textblock_text_markup_to_utf8(NULL, entry_text);
+ char *tmp;
+ tmp = markup_to_entry(ad, type_index, emoticon_text);
+ entry_text = evas_textblock_text_markup_to_utf8(NULL, tmp);
+ free(tmp);
if (entry_text) strcat(entry_text, "\0");
FREE(emoticon_text);
}
DBG("targets_data->num_targets: 0x%x", targets_data->num_targets);
int i, j, k;
- for (i = 0; i < targets_data->num_targets; i++)
+ for (j = 0; j < targets_data->num_targets; j++)
{
- DBG("get target: %s", targets_data->targets[i]);
- for (j = 0; j < ATOM_INDEX_MAX; j++)
+ for (i = 0; i < ATOM_INDEX_MAX; i++)
{
- for (k = 0; k < ad->targetAtoms[j].atom_cnt; k++)
+ DBG("get target: %s", targets_data->targets[j]);
+ for (k = 0; k < ad->targetAtoms[i].atom_cnt; k++)
{
- if (!SAFE_STRCMP(targets_data->targets[i], ad->targetAtoms[j].name[k]))
+ if (!SAFE_STRCMP(targets_data->targets[j], ad->targetAtoms[i].name[k]))
{
- DBG("find matched target: %s", ad->targetAtoms[j].name[k]);
- ecore_x_selection_clipboard_request(ad->x_event_win, ad->targetAtoms[j].name[k]);
+ DBG("find matched target: %s", ad->targetAtoms[i].name[k]);
+ ecore_x_selection_clipboard_request(ad->x_event_win, ad->targetAtoms[i].name[k]);
return;
}
}
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
PROJECT(cbhm C)
-SET(PREFIX ${CMAKE_INSTALL_PREFIX})
-SET(LIBDIR "${PREFIX}/lib")
+SET(PREFIX "${CMAKE_INSTALL_PREFIX}")
SET(DATADIR "${PREFIX}/share")
SET(LOCALEDIR "${DATADIR}/locale")
SET(VERSION 0.1.0)
ENDIF ( MDM_ENABLE )
INCLUDE(FindPkgConfig)
- pkg_check_modules(pkgs REQUIRED elementary eet appcore-efl appcore-common x11 ecore-x utilX eina evas ecore ecore-file ecore-evas edje ecore-input notification vconf vconf-internal-keys libsystemd-daemon efl-assist ${MDM_REQUIED_PKGS})
+ pkg_check_modules(pkgs REQUIRED elementary eet appcore-efl appcore-common x11 ecore-x utilX eina evas ecore ecore-file ecore-evas edje ecore-input notification vconf vconf-internal-keys libsystemd-daemon ${MDM_REQUIED_PKGS})
FOREACH(flag ${pkgs_CFLAGS})
SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed -pie")
-ADD_DEFINITIONS("-DPREFIX=\"${CMAKE_INSTALL_PREFIX}\"")
+ADD_DEFINITIONS("-DDATADIR=\"${DATADIR}\"")
+ADD_DEFINITIONS("-DLOCALEDIR=\"${LOCALEDIR}\"")
ADD_EXECUTABLE(${PROJECT_NAME} ${SRCS})
#for XV extension screenshot
)
ADD_DEPENDENCIES(${PROJECT_NAME} cbhmdrawer.edj)
-INSTALL(TARGETS ${PROJECT_NAME} DESTINATION bin)
+INSTALL(TARGETS ${PROJECT_NAME} DESTINATION ${PREFIX}/bin)
INSTALL(FILES ${CMAKE_BINARY_DIR}/data/themes/cbhmdrawer.edj DESTINATION ${DATADIR}/edje)
ADD_SUBDIRECTORY(po)
-INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/../systemd/cbhm.service DESTINATION ${LIBDIR}/systemd/user)
-INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/../systemd/cbhm.service DESTINATION ${LIBDIR}/systemd/system)
+INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/../systemd/cbhm.service DESTINATION /usr/lib/systemd/user)
+INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/../systemd/cbhm.service DESTINATION /usr/lib/systemd/system)
#define _CBHM_H_
#include <Elementary.h>
-#include <efl_assist.h>
#include <Ecore_X.h>
#if !defined(PACKAGE)
# define APPNAME "Clipboard History Manager"
#endif
-#if !defined(LOCALEDIR)
-# define LOCALEDIR "/usr/share/locale"
-#endif
-
#define CBHM_MAGIC 0xad960009
typedef struct _TargetHandler TargetHandler;
typedef char *(*text_converter_func)(AppData *ad, int type_index, const char *str);
#define ITEM_CNT_MAX 20
-#define COPIED_DATA_STORAGE_DIR "/opt/var/.cbhm_files"
+#define COPIED_DATA_STORAGE_DIR DATADIR"/.cbhm_files"
#include "clipdrawer.h"
#include "item_manager.h"
#include "item_manager.h"
#include "xconverter.h"
-#define EDJ_PATH "/usr/share/edje"
+#define EDJ_PATH DATADIR"/edje"
#define APP_EDJ_FILE EDJ_PATH"/cbhmdrawer.edj"
#define GRP_MAIN "cbhmdrawer"
FREE(orig_path);
}
- // Set vconf value to notify copy event to popsync application
- vconf_set_str(VCONFKEY_POPSYNC_COPY_EVENT_SET_KEY, "1");
return item;
}
#include "cbhm.h"
#include <vconf.h>
-#include <vconf-internal-popsync-keys.h>
+#include <vconf-internal-keys.h>
#define MULTI_(s) dgettext(PACKAGE, s)
#define S_CLIPBOARD MULTI_("IDS_COM_BODY_CLIPBOARD")
#include <Ecore_File.h>
#include "storage.h"
-#define STORAGE_FILEPATH "/opt/var/.cbhm_data"
+#define STORAGE_FILEPATH DATADIR"/.cbhm_data"
#define STORAGE_KEY_INDEX_FORMAT "<index%02d>"
#define STORAGE_KEY_ITEM_FORMAT "<item%02d%s>"
#define STORAGE_INDEX_ITEM_NONE 0.0
if (xpos)
{
int absizeLen = SAFE_STRLEN(value);
- char *modify = SAFE_STRNDUP(value, xpos - value);
- if (modify)
- {
- FREE(data->width);
- data->width = modify;
- }
- modify = SAFE_STRNDUP(xpos + 1, absizeLen - (xpos - value) - 1);
- if (modify)
- {
- FREE(data->height);
- data->height = modify;
- }
+ freeAndAssign(data->width, SAFE_STRNDUP(value, xpos - value));
+ freeAndAssign(data->height, SAFE_STRNDUP(xpos + 1, absizeLen - (xpos - value) - 1));
DBG("image width: -%s-, height: -%s-", data->width, data->height);
}
FREE(value);
-Copyright (c) 2010 - 2014 Samsung Electronics Co., Ltd. All rights reserved.
+Copyright (c) 2010 - 2015 Samsung Electronics Co., Ltd. All rights reserved.
Apache License
Version 2.0, January 2004
<manifest>
<define>
<domain name="cbhm"/>
+ <provide>
+ <label name="cbhm::share"/>
+ </provide>
<request>
<smack request="system::homedir" type="rwxat"/>
<smack request="popsync-agent::vconf" type="rwxat"/>
<smack request="mdm-server::admin" type="r"/>
<smack request="system::use_internet" type="w"/>
+ <smack request="tizen::vconf::public::r" type="rl"/>
+ <smack request="tizen::vconf::setting::admin" type="rl" />
+ <smack request="device::app_logging" type="rw"/>
+ <smack request="device::sys_logging" type="rw"/>
+ <smack request="pkgmgr::db" type="rl"/>
+ <smack request="ail::db" type="rl"/>
+ <smack request="xorg" type="w"/>
+ <smack request="isf" type="rx"/>
+ <smack request="tizen::vconf::public::r::platform::rw" type="rl"/>
+ <smack request="tizen::vconf::public::r" type="rw"/>
+ <smack request="tizen::vconf::setting" type="rl"/>
+ <smack request="tizen::vconf::camcorder" type="rl"/>
+ <smack request="org.tizen.browser" type="rx"/>
+ <smack request="pulseaudio" type="rw"/>
+ <smack request="system::use_internet" type="w"/>
+ <smack request="dbus" type="rwx" />
+ <smack request="system::ext_storage" type="rx"/>
+ <smack request="com.samsung.memo" type="rx"/>
+ <smack request="cbhm::share" type="rwxt"/>
</request>
<permit>
<smack permit="system::use_internet" type="w"/>
+ <smack permit="dbus" type="rwx" />
+ <smack permit="xorg" type="rwx"/>
</permit>
</define>
<request>
<domain name="cbhm"/>
</request>
<assign>
- <filesystem path="/usr/share/locale/*" label="_"/>
+ <filesystem path="/usr/apps/org.tizen.cbhm" label="_"/>
+ <filesystem path="/usr/apps/org.tizen.cbhm/share" label="cbhm::share" type="transmutable"/>
<filesystem path="/usr/lib/systemd/user/cbhm.service" label="_" exec_label="none" />
<filesystem path="/usr/lib/systemd/user/core-efl.target.wants/cbhm.service" label="_" exec_label="none" />
</assign>
Name: cbhm
Summary: cbhm application
-Version: 0.1.227
+Version: 0.1.235
Release: 1
-Group: System/Libraries
+Group: Applications
License: Apache-2.0
URL: http://www.samsung.com/
Source0: %{name}-%{version}.tar.gz
BuildRequires: pkgconfig(notification)
BuildRequires: pkgconfig(vconf)
BuildRequires: pkgconfig(vconf-internal-keys)
-BuildRequires: pkgconfig(efl-assist)
BuildRequires: edje-tools
BuildRequires: pkgconfig(libsystemd-daemon)
BuildRequires: gettext
%setup -q
%build
-
%if "%{?tizen_profile_name}" == "wearable"
- export TARGET=2.3-wearable
+ export TARGET=2.3-wearable
%else
- export TARGET=2.3-mobile
+ %if "%{?tizen_profile_name}" == "mobile"
+ export TARGET=2.3-mobile
+ %else
+ %if "%{?tizen_profile_name}" == "tv"
+ export TARGET=2.3-mobile
+ %endif
+ %endif
%endif
-cd $TARGET && rm -rf CMakeFiles CMackCache.txt && cmake . -DCMAKE_INSTALL_PREFIX=%{_prefix}
+%define PREFIX /usr/apps/org.tizen.cbhm
+
+cd $TARGET && rm -rf CMakeFiles CMackCache.txt && cmake . -DCMAKE_INSTALL_PREFIX=%{PREFIX}
make %{?jobs:-j%jobs}
%install
%if "%{?tizen_profile_name}" == "wearable"
- export TARGET=2.3-wearable
+ export TARGET=2.3-wearable
%else
- export TARGET=2.3-mobile
+ %if "%{?tizen_profile_name}" == "mobile"
+ export TARGET=2.3-mobile
+ %else
+ %if "%{?tizen_profile_name}" == "tv"
+ export TARGET=2.3-mobile
+ %endif
+ %endif
%endif
cd $TARGET && %make_install
%post
echo "INFO: System should be restarted or execute: systemctl --user daemon-reload from user session to finish service installation."
+chown -R 5000:5000 %{PREFIX}/share
%files
%defattr(-,root,root,-)
-%{_bindir}/cbhm
-%{_datadir}/edje/cbhmdrawer.edj
-%{_datadir}/locale/*
+%{PREFIX}/bin/*
+%{PREFIX}/share/edje/cbhmdrawer.edj
+%{PREFIX}/share/locale/*
## systemd
%{_libdir}/systemd/user/cbhm.service
%{_libdir}/systemd/user/core-efl.target.wants/cbhm.service
Requires=tizen-runtime.target
[Service]
+User=app
+Group=app
+SmackProcessLabel=cbhm
Type=simple
-ExecStart=/usr/bin/cbhm
+ExecStart=/usr/apps/org.tizen.cbhm/bin/cbhm
EnvironmentFile=/run/tizen-mobile-env
[Install]