void DSWaylandTizenPolicyPrivate::tizen_policy_set_focus_skip(Resource *resource, struct ::wl_resource *surface)
{
- DSLOG_DBG("TizenPolicyPriv", "");
+ DSLOG_DBG("TizenPolicyPriv", "Request to skip focus. resource:%p, wl_surface:%p", resource, surface);
+ DSWaylandSurface *dswlSurface = DSWaylandSurface::fromWlResource(surface);
+ if (!dswlSurface) return;
+ if (!__wm) return;
+
+ __wm->setWindowSkipFocus(dswlSurface, true);
}
void DSWaylandTizenPolicyPrivate::tizen_policy_unset_focus_skip(Resource *resource, struct ::wl_resource *surface)
{
- DSLOG_DBG("TizenPolicyPriv", "");
+ DSLOG_DBG("TizenPolicyPriv", "Request to unset skip_focus. resource:%p, wl_surface:%p", resource, surface);
+ DSWaylandSurface *dswlSurface = DSWaylandSurface::fromWlResource(surface);
+ if (!dswlSurface) return;
+ if (!__wm) return;
+
+ __wm->setWindowSkipFocus(dswlSurface, false);
}
void DSWaylandTizenPolicyPrivate::tizen_policy_set_role(Resource *resource, struct ::wl_resource *surface, const std::string &role)
__winShell(nullptr),
__firstCommit(true),
__changedGeometry(false),
+ __acceptsFocus(true),
__title("")
{
}
return __title;
}
+bool DSWindowPrivate::setSkipFocus(bool set)
+{
+ __acceptsFocus = !set;
+ return true;
+}
+
+bool DSWindowPrivate::getSkipFocus(void)
+{
+ if (__acceptsFocus)
+ return false;
+ else
+ return true;
+}
+
bool DSWindowPrivate::setLayer(int layer)
{
return true;
return priv->getTitle();
}
+bool DSWindow::setSkipFocus(bool set)
+{
+ DS_GET_PRIV(DSWindow);
+ return priv->setSkipFocus(set);
+}
+
+bool DSWindow::getSkipFocus(void)
+{
+ DS_GET_PRIV(DSWindow);
+ return priv->getSkipFocus();
+}
+
bool DSWindow::setLayer(int layer)
{
DS_GET_PRIV(DSWindow);
bool setTitle(const std::string &title);
const std::string getTitle(void);
+ bool setSkipFocus(bool set);
+ bool getSkipFocus(void);
+
bool setLayer(int layer);
bool raise(void);
bool lower(void);
bool setTitle(const std::string &title);
const std::string getTitle(void);
+ bool setSkipFocus(bool set);
+ bool getSkipFocus(void);
+
bool setLayer(int layer);
bool raise(void);
bool lower(void);
DSWindowShell *__winShell;
bool __firstCommit;
bool __changedGeometry;
+ bool __acceptsFocus;
std::string __title;
};
}
}
+void DSWindowManagerPrivate::setWindowSkipFocus(DSWaylandSurface *dswlSurface, bool set)
+{
+ // find dswlSurface's window
+ DSZone *zone = __getZone(dswlSurface);
+ if (zone)
+ {
+ zone->setWindowSkipFocus(dswlSurface, set);
+ }
+}
+
+
DSWindowManager::DSWindowManager(DSObject *parent)
: DS_INIT_PRIVATE_PTR(DSWindowManager)
{
priv->lowerWindow(dswlSurface);
}
+void DSWindowManager::setWindowSkipFocus(DSWaylandSurface *dswlSurface, bool set)
+{
+ DS_GET_PRIV(DSWindowManager);
+ priv->setWindowSkipFocus(dswlSurface, set);
+}
+
} // namespace display_server
void raiseWindow(DSWaylandSurface *dswlSurface);
void lowerWindow(DSWaylandSurface *dswlSurface);
+ void setWindowSkipFocus(DSWaylandSurface *dswlSurface, bool set);
+
protected:
private:
void raiseWindow(DSWaylandSurface *dswlSurface);
void lowerWindow(DSWaylandSurface *dswlSurface);
+ void setWindowSkipFocus(DSWaylandSurface *dswlSurface, bool set);
+
private:
DSZone *__getZone(DSWindow *window);
DSZone *__getZone(DSWaylandSurface *surface);
return priv->setTitle(title);
}
+bool DSWindowShell::setSkipFocus(bool set)
+{
+ DS_GET_PRIV(DSWindowShell);
+ return priv->setSkipFocus(set);
+}
+
bool DSWindowShell::setPosition(int x, int y)
{
DS_GET_PRIV(DSWindowShell);
bool setTitle(const std::string &title);
+ bool setSkipFocus(bool set);
+
bool setPosition(int x, int y);
stPosition getPosition(void);
return false;
}
+bool DSWindowShellPrivate::setSkipFocus(bool set)
+{
+ if (__window)
+ {
+ __window->setSkipFocus(set);
+ return true;
+ }
+ else
+ return false;
+}
+
bool DSWindowShellPrivate::setPosition(int x, int y)
{
__x = x;
bool setTitle(const std::string &title);
+ bool setSkipFocus(bool set);
+
bool setPosition(int x, int y);
stPosition getPosition(void);
wShell->lower();
}
+void DSZone::setWindowSkipFocus(DSWaylandSurface *dswlSurface, bool set)
+{
+ DSWindowShell *wShell = __findWindowShell(dswlSurface);
+ if (!wShell) return;
+
+ wShell->setSkipFocus(set);
+}
} // namespace display_server
void raiseWindow(DSWaylandSurface* dswlSurface);
void lowerWindow(DSWaylandSurface* dswlSurface);
+ void setWindowSkipFocus(DSWaylandSurface *dswlSurface, bool set);
+
std::list<std::shared_ptr<DSWindow>> getWindowList();
std::list<std::shared_ptr<DSWindowShell>> getWindowShellList();
EXPECT_TRUE(win != nullptr);
stSize size = win->getSize();
- EXPECT_TRUE(size.w == 1);
- EXPECT_TRUE(size.h == 1);
+ EXPECT_TRUE(size.w == 0);
+ EXPECT_TRUE(size.h == 0);
win->setSize(1280, 720);
size = win->getSize();
EXPECT_TRUE(title.compare("test title") == 0);
}
+TEST_F(DSWindowTest, SkipFocusTest)
+{
+ bool ret;
+ bool skip;
+
+ auto win = std::make_shared<DSWindow>();
+ EXPECT_TRUE(win != nullptr);
+
+ skip = win->getSkipFocus();
+ EXPECT_TRUE(skip == false);
+
+ ret = win->setSkipFocus(true);
+ EXPECT_TRUE(ret == true);
+
+ skip = win->getSkipFocus();
+ EXPECT_TRUE(skip == true);
+
+ ret = win->setSkipFocus(false);
+ EXPECT_TRUE(ret == true);
+
+ skip = win->getSkipFocus();
+ EXPECT_TRUE(skip == false);
+}
+