macOS; Use transient scrollbars unless they are disabled in system preferences

This commit is contained in:
Kovid Goyal 2019-12-14 11:15:33 +05:30
parent 180c15bcb1
commit 537a27d098
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
4 changed files with 16 additions and 7 deletions

View File

@ -1104,7 +1104,13 @@ class Application(QApplication):
pcache[v] = p pcache[v] = p
v = pcache[v] v = pcache[v]
icon_map[getattr(QStyle, 'SP_'+k)] = v icon_map[getattr(QStyle, 'SP_'+k)] = v
self.pi.load_style(icon_map) transient_scroller = 0
if isosx:
transient_scroller = plugins['cocoa'][0].transient_scroller()
try:
self.pi.load_style(icon_map, transient_scroller)
except TypeError:
self.pi.load_style(icon_map)
def _send_file_open_events(self): def _send_file_open_events(self):
with self._file_open_lock: with self._file_open_lock:

View File

@ -138,9 +138,10 @@ class CalibreStyle: public QProxyStyle {
QHash<int, QString> icon_map; QHash<int, QString> icon_map;
QByteArray desktop_environment; QByteArray desktop_environment;
QDialogButtonBox::ButtonLayout button_layout; QDialogButtonBox::ButtonLayout button_layout;
int transient_scroller;
public: public:
CalibreStyle(QStyle *base, QHash<int, QString> icmap) : QProxyStyle(base), icon_map(icmap) { CalibreStyle(QStyle *base, QHash<int, QString> icmap, int transient_scroller) : QProxyStyle(base), icon_map(icmap), transient_scroller(transient_scroller) {
setObjectName(QString("calibre")); setObjectName(QString("calibre"));
desktop_environment = detectDesktopEnvironment(); desktop_environment = detectDesktopEnvironment();
button_layout = static_cast<QDialogButtonBox::ButtonLayout>(QProxyStyle::styleHint(SH_DialogButtonLayout)); button_layout = static_cast<QDialogButtonBox::ButtonLayout>(QProxyStyle::styleHint(SH_DialogButtonLayout));
@ -163,6 +164,8 @@ class CalibreStyle: public QProxyStyle {
return button_layout; return button_layout;
case SH_FormLayoutFieldGrowthPolicy: case SH_FormLayoutFieldGrowthPolicy:
return QFormLayout::FieldsStayAtSizeHint; // Do not have fields expand to fill all available space in QFormLayout return QFormLayout::FieldsStayAtSizeHint; // Do not have fields expand to fill all available space in QFormLayout
case SH_ScrollBar_Transient:
return transient_scroller;
default: default:
break; break;
} }
@ -320,9 +323,9 @@ class CalibreStyle: public QProxyStyle {
} }
}; };
int load_style(QHash<int,QString> icon_map) { int load_style(QHash<int,QString> icon_map, int transient_scroller) {
QStyle *base_style = QStyleFactory::create(QString("Fusion")); QStyle *base_style = QStyleFactory::create(QString("Fusion"));
QApplication::setStyle(new CalibreStyle(base_style, icon_map)); QApplication::setStyle(new CalibreStyle(base_style, icon_map, transient_scroller));
return 0; return 0;
} }

View File

@ -77,6 +77,6 @@ private:
QColor m_dark, m_light; QColor m_dark, m_light;
}; };
int load_style(QHash<int,QString> icon_map); int load_style(QHash<int,QString> icon_map, int transient_scroller=0);
void set_no_activate_on_click(QWidget *widget); void set_no_activate_on_click(QWidget *widget);
void draw_snake_spinner(QPainter &painter, QRect rect, int angle, const QColor & light, const QColor & dark); void draw_snake_spinner(QPainter &painter, QRect rect, int angle, const QColor & light, const QColor & dark);

View File

@ -7,7 +7,7 @@
%ModuleHeaderCode %ModuleHeaderCode
#include <QPainter> #include <QPainter>
int load_style(QHash<int,QString> icon_map); int load_style(QHash<int,QString> icon_map, int transient_scroller);
void set_no_activate_on_click(QWidget *widget); void set_no_activate_on_click(QWidget *widget);
void draw_snake_spinner(QPainter &painter, QRect rect, int angle, const QColor & light, const QColor & dark); void draw_snake_spinner(QPainter &painter, QRect rect, int angle, const QColor & light, const QColor & dark);
%End %End
@ -55,6 +55,6 @@ protected:
}; };
int load_style(QHash<int,QString> icon_map); int load_style(QHash<int,QString> icon_map, int transient_scroller);
void set_no_activate_on_click(QWidget *widget); void set_no_activate_on_click(QWidget *widget);
void draw_snake_spinner(QPainter &painter, QRect rect, int angle, const QColor & light, const QColor & dark); void draw_snake_spinner(QPainter &painter, QRect rect, int angle, const QColor & light, const QColor & dark);