зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1410894 - Add decoration drawing setup to nsWindow, r=jhorak
MozReview-Commit-ID: BHtqoOdfRpS --HG-- extra : rebase_source : 4baaebff7e86d79de833e14c9284adc22a787180
This commit is contained in:
Родитель
d11dfce827
Коммит
6a4c5abeaf
|
@ -291,6 +291,8 @@ TimeConverter() {
|
||||||
return sTimeConverterSingleton;
|
return sTimeConverterSingleton;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
nsWindow::CSDSupportLevel nsWindow::sCSDSupportLevel = CSD_SUPPORT_UNKNOWN;
|
||||||
|
|
||||||
namespace mozilla {
|
namespace mozilla {
|
||||||
|
|
||||||
class CurrentX11TimeGetter
|
class CurrentX11TimeGetter
|
||||||
|
@ -480,6 +482,8 @@ nsWindow::nsWindow()
|
||||||
mLastScrollEventTime = GDK_CURRENT_TIME;
|
mLastScrollEventTime = GDK_CURRENT_TIME;
|
||||||
#endif
|
#endif
|
||||||
mPendingConfigures = 0;
|
mPendingConfigures = 0;
|
||||||
|
mIsCSDAvailable = false;
|
||||||
|
mIsCSDEnabled = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
nsWindow::~nsWindow()
|
nsWindow::~nsWindow()
|
||||||
|
@ -6602,6 +6606,21 @@ nsWindow::ClearCachedResources()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
nsWindow::SetDrawsInTitlebar(bool aState)
|
||||||
|
{
|
||||||
|
if (!mIsCSDAvailable || aState == mIsCSDEnabled)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (mShell) {
|
||||||
|
gint wmd = aState ? GDK_DECOR_BORDER : ConvertBorderStyles(mBorderStyle);
|
||||||
|
gdk_window_set_decorations(gtk_widget_get_window(mShell),
|
||||||
|
(GdkWMDecoration) wmd);
|
||||||
|
}
|
||||||
|
|
||||||
|
mIsCSDEnabled = aState;
|
||||||
|
}
|
||||||
|
|
||||||
gint
|
gint
|
||||||
nsWindow::GdkScaleFactor()
|
nsWindow::GdkScaleFactor()
|
||||||
{
|
{
|
||||||
|
@ -6872,6 +6891,41 @@ nsWindow::SynthesizeNativeTouchPoint(uint32_t aPointerId,
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
bool
|
||||||
|
nsWindow::DoDrawTitlebar() const
|
||||||
|
{
|
||||||
|
return mIsCSDEnabled && mSizeState == nsSizeMode_Normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
nsWindow::CSDSupportLevel
|
||||||
|
nsWindow::GetCSDSupportLevel() {
|
||||||
|
if (sCSDSupportLevel != CSD_SUPPORT_UNKNOWN) {
|
||||||
|
return sCSDSupportLevel;
|
||||||
|
}
|
||||||
|
// TODO: MATE
|
||||||
|
const char* currentDesktop = getenv("XDG_CURRENT_DESKTOP");
|
||||||
|
if (currentDesktop) {
|
||||||
|
if (strcmp(currentDesktop, "GNOME") == 0) {
|
||||||
|
sCSDSupportLevel = CSD_SUPPORT_FULL;
|
||||||
|
} else if (strcmp(currentDesktop, "XFCE") == 0) {
|
||||||
|
sCSDSupportLevel = CSD_SUPPORT_FULL;
|
||||||
|
} else if (strcmp(currentDesktop, "X-Cinnamon") == 0) {
|
||||||
|
sCSDSupportLevel = CSD_SUPPORT_FULL;
|
||||||
|
} else if (strcmp(currentDesktop, "KDE") == 0) {
|
||||||
|
sCSDSupportLevel = CSD_SUPPORT_FLAT;
|
||||||
|
} else if (strcmp(currentDesktop, "LXDE") == 0) {
|
||||||
|
sCSDSupportLevel = CSD_SUPPORT_FLAT;
|
||||||
|
} else if (strcmp(currentDesktop, "openbox") == 0) {
|
||||||
|
sCSDSupportLevel = CSD_SUPPORT_FLAT;
|
||||||
|
} else if (strcmp(currentDesktop, "i3") == 0) {
|
||||||
|
sCSDSupportLevel = CSD_SUPPORT_NONE;
|
||||||
|
} else {
|
||||||
|
sCSDSupportLevel = CSD_SUPPORT_NONE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return sCSDSupportLevel;
|
||||||
|
}
|
||||||
|
|
||||||
int32_t
|
int32_t
|
||||||
nsWindow::RoundsWidgetCoordinatesTo()
|
nsWindow::RoundsWidgetCoordinatesTo()
|
||||||
{
|
{
|
||||||
|
|
|
@ -351,6 +351,8 @@ public:
|
||||||
#endif
|
#endif
|
||||||
virtual void GetCompositorWidgetInitData(mozilla::widget::CompositorWidgetInitData* aInitData) override;
|
virtual void GetCompositorWidgetInitData(mozilla::widget::CompositorWidgetInitData* aInitData) override;
|
||||||
|
|
||||||
|
void SetDrawsInTitlebar(bool aState) override;
|
||||||
|
|
||||||
// HiDPI scale conversion
|
// HiDPI scale conversion
|
||||||
gint GdkScaleFactor();
|
gint GdkScaleFactor();
|
||||||
|
|
||||||
|
@ -367,6 +369,8 @@ public:
|
||||||
LayoutDeviceIntRect GdkRectToDevicePixels(GdkRectangle rect);
|
LayoutDeviceIntRect GdkRectToDevicePixels(GdkRectangle rect);
|
||||||
|
|
||||||
virtual bool WidgetTypeSupportsAcceleration() override;
|
virtual bool WidgetTypeSupportsAcceleration() override;
|
||||||
|
|
||||||
|
bool DoDrawTitlebar() const;
|
||||||
protected:
|
protected:
|
||||||
virtual ~nsWindow();
|
virtual ~nsWindow();
|
||||||
|
|
||||||
|
@ -471,6 +475,10 @@ private:
|
||||||
// window. See bug 1225044.
|
// window. See bug 1225044.
|
||||||
unsigned int mPendingConfigures;
|
unsigned int mPendingConfigures;
|
||||||
|
|
||||||
|
bool mIsCSDAvailable;
|
||||||
|
// If true, draw our own window titlebar.
|
||||||
|
bool mIsCSDEnabled;
|
||||||
|
|
||||||
#ifdef ACCESSIBILITY
|
#ifdef ACCESSIBILITY
|
||||||
RefPtr<mozilla::a11y::Accessible> mRootAccessible;
|
RefPtr<mozilla::a11y::Accessible> mRootAccessible;
|
||||||
|
|
||||||
|
@ -567,6 +575,17 @@ private:
|
||||||
RefPtr<mozilla::widget::IMContextWrapper> mIMContext;
|
RefPtr<mozilla::widget::IMContextWrapper> mIMContext;
|
||||||
|
|
||||||
mozilla::UniquePtr<mozilla::CurrentX11TimeGetter> mCurrentTimeGetter;
|
mozilla::UniquePtr<mozilla::CurrentX11TimeGetter> mCurrentTimeGetter;
|
||||||
|
typedef enum { CSD_SUPPORT_FULL, // CSD including shadows
|
||||||
|
CSD_SUPPORT_FLAT, // CSD without shadows
|
||||||
|
CSD_SUPPORT_NONE, // WM does not support CSD at all
|
||||||
|
CSD_SUPPORT_UNKNOWN
|
||||||
|
} CSDSupportLevel;
|
||||||
|
/**
|
||||||
|
* Get the support of Client Side Decoration by checking
|
||||||
|
* the XDG_CURRENT_DESKTOP environment variable.
|
||||||
|
*/
|
||||||
|
static CSDSupportLevel GetCSDSupportLevel();
|
||||||
|
static CSDSupportLevel sCSDSupportLevel;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* __nsWindow_h__ */
|
#endif /* __nsWindow_h__ */
|
||||||
|
|
Загрузка…
Ссылка в новой задаче