summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNilesh Trimbake <t.shripati@samsung.com>2018-03-21 18:38:00 +0530
committerNilesh Trimbake <t.shripati@samsung.com>2018-03-21 18:40:52 +0530
commitddd256919d9fa1769cb0b029c879f9201c6c5515 (patch)
tree4866b0ccbc095714a3f797796b1113b431cd21a4
parent314533c4361ef0ccd109b7448336b02588719db4 (diff)
parent763d0a44ed6f68868a3a6e3c01ceebfe0e689c8b (diff)
downloadgallery-ddd256919d9fa1769cb0b029c879f9201c6c5515.tar.gz
gallery-ddd256919d9fa1769cb0b029c879f9201c6c5515.tar.bz2
gallery-ddd256919d9fa1769cb0b029c879f9201c6c5515.zip
Merge following patches from 'tizen_4.0' into tizen
1. TizenRefApp-9559 [Gallery] Fix issue with invalid thumbnails when adding new images 2. TizenRefApp-9544 [Gallery] Crash when try to preview video from MMS 3. TizenRefApp-9548 [Gallery] Implement RTL mode support 4. TizenRefApp-9416 [Gallery] Add support change application name according to selected language Change-Id: Ida53613d421b81fc539f59aa1dced18bf4131748
-rw-r--r--gallery/model/MediaItem.cpp24
-rw-r--r--gallery/model/MediaItem.h6
-rw-r--r--gallery/presenters/Instance.cpp12
-rw-r--r--gallery/presenters/misc/ProcessingPresenter.cpp3
-rw-r--r--gallery/presenters/pages/PreviewPage.cpp4
-rw-r--r--gallery/presenters/pages/ThumbnailPage.cpp4
-rw-r--r--gallery/presenters/pages/VideoPlayerPage.cpp11
-rw-r--r--gallery/view/ImageGrid.cpp120
-rw-r--r--gallery/view/ImageGrid.h15
-rw-r--r--gallery/view/ImageViewer.cpp2
-rw-r--r--gallery/view/helpers.cpp23
-rw-r--r--gallery/view/helpers.h2
-rw-r--r--tizen-manifest.xml50
13 files changed, 208 insertions, 68 deletions
diff --git a/gallery/model/MediaItem.cpp b/gallery/model/MediaItem.cpp
index aec6b5d..fd21ffc 100644
--- a/gallery/model/MediaItem.cpp
+++ b/gallery/model/MediaItem.cpp
@@ -233,7 +233,9 @@ namespace gallery {
MediaItem::~MediaItem()
{
- cancelThumbnailPathGet();
+ if (m_thumbCbProxy) {
+ cancelThumbnailPathGet();
+ }
}
MediaItemSRef MediaItem::newInstance(const media_info_h media)
@@ -459,11 +461,12 @@ namespace gallery {
}
if (m_thumbCbProxy) {
- m_thumbCbProxy->callback = cb;
+ m_thumbCbProxy->callbacks += cb;
return RES_FALSE;
}
- auto cbProxy = util::makeUnique(new ThumbCbProxy{this, cb});
+ auto cbProxy = util::makeUnique(new ThumbCbProxy{this});
+ cbProxy->callbacks += cb;
{
MutexLock lock(getMediaMutex());
@@ -478,12 +481,21 @@ namespace gallery {
return RES_FALSE;
}
- void MediaItem::cancelThumbnailPathGet() const
+ void MediaItem::cancelThumbnailPathGet(const ThumbnailPathGetCb &cb) const
{
if (!m_thumbCbProxy) {
return;
}
+ m_thumbCbProxy->callbacks -= cb;
+
+ if (isEmpty(m_thumbCbProxy->callbacks)) {
+ cancelThumbnailPathGet();
+ }
+ }
+
+ void MediaItem::cancelThumbnailPathGet() const
+ {
MutexLock lock(getMediaMutex());
const int ret = media_info_cancel_thumbnail(m_media);
@@ -528,10 +540,10 @@ namespace gallery {
item->m_media = nullptr;
}
- const auto proxy = std::move(*item->m_thumbCbProxy);
+ auto proxy = std::move(*item->m_thumbCbProxy);
item->m_thumbCbProxy.reset();
- proxy.callback(result, proxy.item->m_thumbPath);
+ proxy.callbacks.dispatch(result, proxy.item->m_thumbPath);
}
}
diff --git a/gallery/model/MediaItem.h b/gallery/model/MediaItem.h
index 439de36..0aa8a01 100644
--- a/gallery/model/MediaItem.h
+++ b/gallery/model/MediaItem.h
@@ -22,6 +22,7 @@
#include <media_content.h>
#include "ucl/misc/AutoHandle.h"
+#include "ucl/misc/Event.h"
#include "IJob.h"
@@ -81,7 +82,7 @@ namespace gallery {
const std::string &getFilePath() const;
ucl::Result getThumbnailPath(const ThumbnailPathGetCb &cb) const;
- void cancelThumbnailPathGet() const;
+ void cancelThumbnailPathGet(const ThumbnailPathGetCb &cb) const;
ucl::Result removeFile();
ucl::Result saveToDevice();
@@ -97,13 +98,14 @@ namespace gallery {
private:
ucl::Result initThumbPath(media_info_h media) const;
+ void cancelThumbnailPathGet() const;
private:
// XXX This proxy is needed to deal with cases when
// media_thumbnail_completed_cb can't be cancelled
struct ThumbCbProxy final {
const MediaItem *item;
- ThumbnailPathGetCb callback;
+ ucl::Event<ThumbnailPathGetCb> callbacks;
void completeCb(media_content_error_e error, const char *path);
};
diff --git a/gallery/presenters/Instance.cpp b/gallery/presenters/Instance.cpp
index 39c7112..15daa2d 100644
--- a/gallery/presenters/Instance.cpp
+++ b/gallery/presenters/Instance.cpp
@@ -16,8 +16,6 @@
#include "Instance.h"
-#include <system_settings.h>
-
#include "ucl/appfw/helpers.h"
#include "gallery/model/helpers.h"
@@ -73,6 +71,8 @@ namespace gallery {
FAIL_RETURN(setupTheme(), "setupTheme() failed!");
+ util::updateElmLanguage();
+
m_navi = Naviframe::Builder().
build(m_win->getConformant());
if (!m_navi) {
@@ -390,13 +390,7 @@ namespace gallery {
switch(sysEvent) {
case SysEvent::LANGUAGE_CHANGED:
DLOG("SysEvent::LANGUAGE_CHANGED");
- {
- char *locale = NULL;
- system_settings_get_value_string(
- SYSTEM_SETTINGS_KEY_LOCALE_LANGUAGE, &locale);
- elm_language_set(locale);
- free(locale);
- }
+ util::updateElmLanguage();
break;
default:
DLOG("sysEvent: %d", sysEvent);
diff --git a/gallery/presenters/misc/ProcessingPresenter.cpp b/gallery/presenters/misc/ProcessingPresenter.cpp
index 4a077e0..bfaa1b6 100644
--- a/gallery/presenters/misc/ProcessingPresenter.cpp
+++ b/gallery/presenters/misc/ProcessingPresenter.cpp
@@ -210,6 +210,9 @@ namespace gallery {
m_popup->setContent(*icon, impl::PART_TOAST_ICON);
+ elm_object_mirrored_automatic_set(*icon, EINA_FALSE);
+ elm_object_mirrored_set(*icon, EINA_FALSE);
+
m_icon = icon;
return RES_OK;
diff --git a/gallery/presenters/pages/PreviewPage.cpp b/gallery/presenters/pages/PreviewPage.cpp
index a406a4f..19c00da 100644
--- a/gallery/presenters/pages/PreviewPage.cpp
+++ b/gallery/presenters/pages/PreviewPage.cpp
@@ -150,7 +150,8 @@ namespace gallery {
void unrealize()
{
- m_media->cancelThumbnailPathGet();
+ m_media->cancelThumbnailPathGet(
+ WEAK_DELEGATE(Item::onThumbnail, asWeak(*this)));
}
MediaItemSRef getMedia()
@@ -266,6 +267,7 @@ namespace gallery {
"m_album->forEachMedia() failed!");
m_imageGrid->setItemCount(m_items.size());
+ m_imageGrid->scrollToItem(0);
}
// TODO Temp solution.
diff --git a/gallery/presenters/pages/ThumbnailPage.cpp b/gallery/presenters/pages/ThumbnailPage.cpp
index f33effb..d8b1afb 100644
--- a/gallery/presenters/pages/ThumbnailPage.cpp
+++ b/gallery/presenters/pages/ThumbnailPage.cpp
@@ -107,7 +107,8 @@ namespace gallery {
virtual ~RealizedItem()
{
- m_parent.m_mediaItems[m_index]->cancelThumbnailPathGet();
+ m_parent.m_mediaItems[m_index]->cancelThumbnailPathGet(
+ WEAK_DELEGATE(RealizedItem::onThumbnail, asWeak(this)));
}
int getIndex() const
@@ -170,6 +171,7 @@ namespace gallery {
"m_album->forEachMedia() failed!");
m_imageGrid->setItemCount(m_mediaItems.size());
+ m_imageGrid->scrollToItem(0);
}
Result ThumbnailPage::doPrepare(NaviItem &item)
diff --git a/gallery/presenters/pages/VideoPlayerPage.cpp b/gallery/presenters/pages/VideoPlayerPage.cpp
index b2f695d..f0b511e 100644
--- a/gallery/presenters/pages/VideoPlayerPage.cpp
+++ b/gallery/presenters/pages/VideoPlayerPage.cpp
@@ -196,6 +196,9 @@ namespace gallery {
LOG_RETURN(RES_FAIL, "m_content is NULL");
}
+ elm_object_mirrored_automatic_set(*m_content, EINA_FALSE);
+ elm_object_mirrored_set(*m_content, EINA_FALSE);
+
item = getNaviframe().push(*m_content, NAVIFRAME_NO_CLIP);
if (!item) {
LOG_RETURN(RES_FAIL, "Naviframe::push() failed!");
@@ -263,14 +266,14 @@ namespace gallery {
FAIL_RETURN(util::getNz(player_create, m_player),
"player_create() failed!");
- FAIL_RETURN(util::call(player_set_display_mode, m_player,
- PLAYER_DISPLAY_MODE_CROPPED_FULL),
- "player_set_display_mode() failed!");
-
FAIL_RETURN(util::call(player_set_display, m_player,
PLAYER_DISPLAY_TYPE_EVAS, GET_DISPLAY(m_image->getEo())),
"player_set_display() failed!");
+ FAIL_RETURN(util::call(player_set_display_mode, m_player,
+ PLAYER_DISPLAY_MODE_CROPPED_FULL),
+ "player_set_display_mode() failed!");
+
FAIL_RETURN(util::call(player_set_uri, m_player,
m_media->getFilePath().c_str()),
"player_set_uri() failed!");
diff --git a/gallery/view/ImageGrid.cpp b/gallery/view/ImageGrid.cpp
index f72f8d4..a456e0a 100644
--- a/gallery/view/ImageGrid.cpp
+++ b/gallery/view/ImageGrid.cpp
@@ -334,6 +334,10 @@ namespace gallery {
listener->onItemRealized(itemIndex);
}
+ if (!m_wasUpdated) {
+ update({"", "", 0, 0, 0});
+ }
+
makeWhite(m_btn);
} else {
makeTransparent(m_btn);
@@ -818,6 +822,8 @@ namespace gallery {
if (m_animator) {
finalizeTransition();
}
+ evas_object_event_callback_del_full(m_box, EVAS_CALLBACK_RESIZE,
+ CALLBACK_A(ImageGrid::onBoxResize), this);
}
const ImageGrid::Info &ImageGrid::getInfo(const Type type)
@@ -871,7 +877,10 @@ namespace gallery {
createCircleScroller();
- createHighlighKeeper();
+ createHighlightKeeper();
+
+ m_scroller->addEventHandler(SmartEvent{"language,changed"},
+ WEAK_DELEGATE(ImageGrid::onLanguageChanged, asWeak(*this)));
m_scroller->addEventHandler(WidgetEvent::RESIZE,
WEAK_DELEGATE(ImageGrid::onScrollerResize, asWeak(*this)));
@@ -881,6 +890,10 @@ namespace gallery {
m_box.addEventHandler(WidgetEvent::MOVE,
WEAK_DELEGATE(ImageGrid::onBoxMove, asWeak(*this)));
+
+ evas_object_event_callback_priority_add(m_box,
+ EVAS_CALLBACK_RESIZE, EO_CALLBACK_PRIORITY_AFTER,
+ CALLBACK_A(ImageGrid::onBoxResize), this);
}
void ImageGrid::createCircleScroller()
@@ -905,12 +918,12 @@ namespace gallery {
}
}
- void ImageGrid::createHighlighKeeper()
+ void ImageGrid::createHighlightKeeper()
{
- m_highlighKeeper = util::createFakeAccessObject(*m_box.getWindow());
- UCL_ASSERT(m_highlighKeeper, "m_highlighKeeper is NULL");
+ m_highlightKeeper = util::createFakeAccessObject(*m_box.getWindow());
+ UCL_ASSERT(m_highlightKeeper, "m_highlightKeeper is NULL");
- m_highlighKeeper->addEventHandler(ATSPI_UNHIGHLIGHTED,
+ m_highlightKeeper->addEventHandler(ATSPI_UNHIGHLIGHTED,
WEAK_DELEGATE(ImageGrid::onKeeperUnhighlighted, asWeak(*this)));
}
@@ -936,6 +949,7 @@ namespace gallery {
m_itemCount = count;
if (updateMaxSlotCount()) {
+ updatePadSizes();
updateSlotCount();
if (updateMaxBeginSlotIndex()) {
updateBeginSlotIndex();
@@ -988,10 +1002,6 @@ namespace gallery {
m_animator = ecore_animator_add(
CALLBACK_A(ImageGrid::onAnimationFrame), this);
- evas_object_event_callback_priority_add(m_box,
- EVAS_CALLBACK_RESIZE, EO_CALLBACK_PRIORITY_AFTER,
- CALLBACK_A(ImageGrid::onBoxResize), this);
-
auto &slotlayout = m_slots[m_beginSlotIndex & 1]->getLayout();
slotlayout.addEventHandler(WidgetEvent::CHANGED_SIZE_HINTS,
@@ -999,7 +1009,7 @@ namespace gallery {
elm_object_signal_callback_add(slotlayout,
impl::SIGNAL_TRANSITION_FINISHED.name, "",
- CALLBACK_A(ImageGrid::onTransitonFinished), this);
+ CALLBACK_A(ImageGrid::onTransitionFinished), this);
return RES_OK;
}
@@ -1014,7 +1024,7 @@ namespace gallery {
return !!m_animator;
}
- void ImageGrid::onTransitonFinished(Evas_Object *obj,
+ void ImageGrid::onTransitionFinished(Evas_Object *obj,
const char *emission, const char *source)
{
evalSlotSizes();
@@ -1039,9 +1049,6 @@ namespace gallery {
m_animator = nullptr;
}
- evas_object_event_callback_del_full(m_box, EVAS_CALLBACK_RESIZE,
- CALLBACK_A(ImageGrid::onBoxResize), this);
-
auto &slotlayout = m_slots[m_beginSlotIndex & 1]->getLayout();
slotlayout.delEventHandler(WidgetEvent::CHANGED_SIZE_HINTS,
@@ -1049,7 +1056,7 @@ namespace gallery {
elm_object_signal_callback_del(slotlayout,
"gallery,transition,finished", "",
- CALLBACK_A(ImageGrid::onTransitonFinished));
+ CALLBACK_A(ImageGrid::onTransitionFinished));
}
Eina_Bool ImageGrid::onAnimationFrame()
@@ -1074,18 +1081,6 @@ namespace gallery {
}
}
- void ImageGrid::onBoxResize(Evas *e, Evas_Object *obj, void *eventInfo)
- {
- m_scrollOffset = (m_scrollLockIndex * m_slotSize);
- if (m_info.isHorizontal) {
- elm_scroller_region_show(*m_scroller,
- m_scrollOffset, 0, m_scrollerSize, 1);
- } else {
- elm_scroller_region_show(*m_scroller,
- 0, m_scrollOffset, 1, m_scrollerSize);
- }
- }
-
void ImageGrid::update()
{
Unrealizer(*this);
@@ -1181,14 +1176,15 @@ namespace gallery {
if (m_animator) {
LOG_RETURN(RES_INVALID_OPERATION, "Transition is in progress.");
}
+ forceBoxSizeCalculate();
return showItem(itemIndex, elm_scroller_region_bring_in);
}
- template <class SHOW_FUNC>
- Result ImageGrid::showItem(const int itemIndex, SHOW_FUNC &&showFunc)
+ template <class SCROLL_FUNC>
+ Result ImageGrid::showItem(const int itemIndex, SCROLL_FUNC &&scrollFunc)
{
return doWithCell(itemIndex,
- [this, &showFunc](const int slotIndex, const int itemOffset)
+ [this, &scrollFunc](const int slotIndex, const int itemOffset)
{
int minVisibleOffset = 0;
int maxVisibleOffset = 0;
@@ -1199,16 +1195,33 @@ namespace gallery {
const int scrollOffset = ((m_scrollOffset > maxVisibleOffset) ?
maxVisibleOffset : minVisibleOffset);
- if (m_info.isHorizontal) {
- showFunc(*m_scroller, scrollOffset, 0, m_scrollerSize, 1);
- } else {
- showFunc(*m_scroller, 0, scrollOffset, 1, m_scrollerSize);
- }
+ scrollTo(scrollOffset, scrollFunc);
return RES_OK;
});
}
+ template <class SCROLL_FUNC>
+ void ImageGrid::scrollTo(const int offset, SCROLL_FUNC &&scrollFunc)
+ {
+ int scrollOffset = offset;
+
+ if (elm_config_mirrored_get()) {
+ int childSizeX = 0;
+ int childSizeY = 0;
+ elm_scroller_child_size_get(*m_scroller, &childSizeX, &childSizeY);
+
+ scrollOffset = ((m_info.isHorizontal ? childSizeX : childSizeY) -
+ m_scrollerSize - offset);
+ }
+
+ if (m_info.isHorizontal) {
+ scrollFunc(*m_scroller, scrollOffset, 0, m_scrollerSize, 1);
+ } else {
+ scrollFunc(*m_scroller, 0, scrollOffset, 1, m_scrollerSize);
+ }
+ }
+
bool ImageGrid::isItemFullyVisible(int itemIndex)
{
int minVisibleOffset = 0;
@@ -1321,7 +1334,7 @@ namespace gallery {
if (m_highlightID == itemIndex) {
m_highlightID = (-1 - itemIndex);
if (m_isHighlightLocked) {
- elm_atspi_component_highlight_grab(*m_highlighKeeper);
+ elm_atspi_component_highlight_grab(*m_highlightKeeper);
} else {
m_highlightTimeout.reset();
}
@@ -1609,8 +1622,10 @@ namespace gallery {
std::max((m_scrollerSize / m_slotSize) * m_slotSize, 1));
m_padSize1 = std::lround(spaceSize / 2.0);
- m_padSize2 = (spaceSize - m_padSize1 +
- m_info.calcExtraPaddingSize(m_slotSize));
+ m_padSize2 = std::max(spaceSize - m_padSize1 +
+ m_info.calcExtraPaddingSize(m_slotSize),
+ (m_scrollerSize - m_padSize1 -
+ m_maxSlotCount / 2 * m_slotSize));
}
void ImageGrid::updateScrollBias()
@@ -1689,8 +1704,20 @@ namespace gallery {
{
int scrollOffsetX = 0;
int scrollOffsetY = 0;
+
+ int scrollerSizeX = 0;
+ int scrollerSizeY = 0;
elm_scroller_region_get(*m_scroller, &scrollOffsetX, &scrollOffsetY,
- nullptr, nullptr);
+ &scrollerSizeX, &scrollerSizeY);
+
+ if (elm_config_mirrored_get()) {
+ int childSizeX = 0;
+ int childSizeY = 0;
+ elm_scroller_child_size_get(*m_scroller, &childSizeX, &childSizeY);
+
+ scrollOffsetX = (childSizeX - scrollerSizeX - scrollOffsetX);
+ scrollOffsetY = (childSizeY - scrollerSizeY - scrollOffsetY);
+ }
return (m_info.isHorizontal ? scrollOffsetX : scrollOffsetY);
}
@@ -1812,6 +1839,11 @@ namespace gallery {
--m_eventsLock;
}
+ void ImageGrid::onLanguageChanged(Widget &sender, void *eventInfo)
+ {
+ Unrealizer u(*this);
+ }
+
void ImageGrid::onScrollerResize(Widget &sender, void *eventInfo)
{
handleResize();
@@ -1826,4 +1858,14 @@ namespace gallery {
{
handleScrolling();
}
+
+ void ImageGrid::onBoxResize(Evas *e, Evas_Object *obj, void *eventInfo)
+ {
+ if (m_animator) {
+ m_scrollOffset = (m_scrollLockIndex * m_slotSize);
+ scrollTo(m_scrollOffset, elm_scroller_region_show);
+ } else {
+ handleScrolling();
+ }
+ }
}
diff --git a/gallery/view/ImageGrid.h b/gallery/view/ImageGrid.h
index 2eff5f5..8ba129f 100644
--- a/gallery/view/ImageGrid.h
+++ b/gallery/view/ImageGrid.h
@@ -143,8 +143,10 @@ namespace gallery {
template <class FUNC>
ucl::Result doWithCell(int itemIndex, FUNC &&func) const;
- template <class SHOW_FUNC>
- ucl::Result showItem(int itemIndex, SHOW_FUNC &&showFunc);
+ template <class SCROLL_FUNC>
+ ucl::Result showItem(int itemIndex, SCROLL_FUNC &&scrollFunc);
+ template <class SCROLL_FUNC>
+ void scrollTo(int offset, SCROLL_FUNC &&scrollFunc);
bool isItemFullyVisible(int itemIndex);
bool isItemFullyVisible(int itemIndex,
@@ -177,14 +179,13 @@ namespace gallery {
void finalizeTransition();
Eina_Bool onAnimationFrame();
void onSlotResize(Widget &widget, void *eventInfo);
- void onBoxResize(Evas *e, Evas_Object *obj, void *eventInfo);
- void onTransitonFinished(Evas_Object *obj, const char *emission,
+ void onTransitionFinished(Evas_Object *obj, const char *emission,
const char *source);
// Initialization
void prepare();
void createCircleScroller();
- void createHighlighKeeper();
+ void createHighlightKeeper();
// Actual slots count
bool updateSlotCount();
@@ -238,9 +239,11 @@ namespace gallery {
void handleResize();
// Events
+ void onLanguageChanged(Widget &sender, void *eventInfo);
void onScrollerResize(Widget &sender, void *eventInfo);
void onScrollerMove(Widget &sender, void *eventInfo);
void onBoxMove(Widget &sender, void *eventInfo);
+ void onBoxResize(Evas *e, Evas_Object *obj, void *eventInfo);
private:
const Info &m_info;
@@ -279,7 +282,7 @@ namespace gallery {
bool m_isInSelectMode;
bool m_isRotaryActive;
- ucl::ElmWidgetSRef m_highlighKeeper;
+ ucl::ElmWidgetSRef m_highlightKeeper;
ucl::TimeoutSRef m_highlightTimeout;
int m_highlightID;
bool m_isHighlightLocked;
diff --git a/gallery/view/ImageViewer.cpp b/gallery/view/ImageViewer.cpp
index da3a0c2..33dbf66 100644
--- a/gallery/view/ImageViewer.cpp
+++ b/gallery/view/ImageViewer.cpp
@@ -128,6 +128,8 @@ namespace gallery {
ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF);
elm_scroller_single_direction_set(*m_scroller,
ELM_SCROLLER_SINGLE_DIRECTION_NONE);
+ elm_object_mirrored_automatic_set(*m_scroller, EINA_FALSE);
+ elm_object_mirrored_set(*m_scroller, EINA_FALSE);
show(*m_scroller);
expandAndFill(m_layout);
diff --git a/gallery/view/helpers.cpp b/gallery/view/helpers.cpp
index 52d5e23..d2f466d 100644
--- a/gallery/view/helpers.cpp
+++ b/gallery/view/helpers.cpp
@@ -18,6 +18,9 @@
#include <vector>
+#include <system_settings.h>
+#include <utils_i18n_ulocale.h>
+
#include "ucl/gui/Window.h"
#include "ucl/gui/Layout.h"
@@ -101,6 +104,26 @@ namespace gallery { namespace util {
return result;
}
+
+ void updateElmLanguage()
+ {
+ std::string locale = "en_US.utf8";
+ i18n_ulocale_layout_type_e layout = I18N_ULOCALE_LAYOUT_LTR;
+
+ FAIL_LOG(util::getNz(system_settings_get_value_string,
+ locale, SYSTEM_SETTINGS_KEY_LOCALE_LANGUAGE),
+ "system_settings_get_value_string() failed!");
+
+ const int rc = i18n_ulocale_get_character_orientation(
+ locale.c_str(), &layout);
+ if (rc != I18N_ERROR_NONE) {
+ WLOG("i18n_ulocale_get_character_orientation() failed! %d", rc);
+ layout = I18N_ULOCALE_LAYOUT_LTR;
+ }
+
+ elm_config_mirrored_set(layout == I18N_ULOCALE_LAYOUT_RTL);
+ elm_language_set(locale.c_str());
+ }
}}
namespace gallery {
diff --git a/gallery/view/helpers.h b/gallery/view/helpers.h
index 5a13ab4..aa0732b 100644
--- a/gallery/view/helpers.h
+++ b/gallery/view/helpers.h
@@ -27,6 +27,8 @@ namespace gallery { namespace util {
Eext_Circle_Surface *getCircleSurface(const ucl::ElmWidget &widget);
ucl::ElmWidgetSRef createFakeAccessObject(ucl::ElmWidget &parent);
+
+ void updateElmLanguage();
}}
namespace gallery {
diff --git a/tizen-manifest.xml b/tizen-manifest.xml
index 1d0f3d4..233ce3a 100644
--- a/tizen-manifest.xml
+++ b/tizen-manifest.xml
@@ -3,6 +3,56 @@
<profile name="wearable"/>
<ui-application appid="org.tizen.w-gallery" exec="w-gallery" hw-acceleration="on" launch_mode="caller" multiple="false" nodisplay="false" taskmanage="true" type="capp">
<label>Gallery</label>
+ <label xml:lang="ar-ae">الاستوديو</label>
+ <label xml:lang="az-az">Qalereya</label>
+ <label xml:lang="bg-bg">Галерия</label>
+ <label xml:lang="ca-es">Galeria</label>
+ <label xml:lang="cs-cz">Galerie</label>
+ <label xml:lang="da-dk">Galleri</label>
+ <label xml:lang="de-de">Galerie</label>
+ <label xml:lang="el-gr">Συλλογή</label>
+ <label xml:lang="en-gb">Gallery</label>
+ <label xml:lang="en-ph">Gallery</label>
+ <label xml:lang="en-us">Gallery</label>
+ <label xml:lang="es-es">Galería</label>
+ <label xml:lang="es-us">Galería</label>
+ <label xml:lang="et-ee">Galerii</label>
+ <label xml:lang="eu-es">Galeria</label>
+ <label xml:lang="fi-fi">Galleria</label>
+ <label xml:lang="fr-fr">Galerie</label>
+ <label xml:lang="fr-ca">Galerie</label>
+ <label xml:lang="ga-ie">Gailearaí</label>
+ <label xml:lang="gl-es">Galería</label>
+ <label xml:lang="hi-in">गैलरी</label>
+ <label xml:lang="hr-hr">Galerija</label>
+ <label xml:lang="hu-hu">Galéria</label>
+ <label xml:lang="hy-am">Պատկերասրահ</label>
+ <label xml:lang="is-is">Gallerí</label>
+ <label xml:lang="it-it">Galleria</label>
+ <label xml:lang="ja-jp">ギャラ​リー</label>
+ <label xml:lang="ka-ge">გალერეა</label>
+ <label xml:lang="kk-kz">Галерея</label>
+ <label xml:lang="ko-kr">갤러리</label>
+ <label xml:lang="lt-lt">Galerija</label>
+ <label xml:lang="lv-lv">Galerija</label>
+ <label xml:lang="mk-mk">Галерија</label>
+ <label xml:lang="nb-no">Galleri</label>
+ <label xml:lang="nl-nl">Galerij</label>
+ <label xml:lang="pl-pl">Galeria</label>
+ <label xml:lang="pt-br">Galeria</label>
+ <label xml:lang="pt-pt">Galeria</label>
+ <label xml:lang="ro-ro">Galerie</label>
+ <label xml:lang="ru-ru">Галерея</label>
+ <label xml:lang="sk-sk">Galéria</label>
+ <label xml:lang="sl-si">Galerija</label>
+ <label xml:lang="sr-rs">Galerija</label>
+ <label xml:lang="sv-se">Galleri</label>
+ <label xml:lang="tr-tr">Galeri</label>
+ <label xml:lang="uk-ua">Галерея</label>
+ <label xml:lang="uz-uz">Galereya</label>
+ <label xml:lang="zh-cn">相册</label>
+ <label xml:lang="zh-hk">媒體瀏覽器</label>
+ <label xml:lang="zh-tw">媒體瀏覽器</label>
<icon>org.tizen.gallery.png</icon>
<app-control>
<operation name="http://tizen.org/appcontrol/operation/view"/>