Fix Firefox scrollbars

pull/1/head
Timothy Pearson 10 years ago
parent 6e6dbb068e
commit a90aa09722

@ -188,7 +188,6 @@ KcmGtk::KcmGtk(TQWidget *parent, const char *name, const TQStringList&)
widget->styleIcon->setPixmap(iconLoader.loadIcon("style", TDEIcon::Desktop));
widget->styleIcon3->setPixmap(iconLoader.loadIcon("style", TDEIcon::Desktop));
widget->fontIcon->setPixmap(iconLoader.loadIcon("fonts", TDEIcon::Desktop));
widget->firefoxIcon->setPixmap(iconLoader.loadIcon("firefox", TDEIcon::Desktop));
widget->keyboardIcon->setPixmap(iconLoader.loadIcon("keyboard", TDEIcon::Desktop));
getInstalledThemes();
@ -206,7 +205,6 @@ KcmGtk::KcmGtk(TQWidget *parent, const char *name, const TQStringList&)
connect(widget->styleBox3, TQT_SIGNAL(activated(int)), TQT_SLOT(styleChanged()));
connect(widget->emacsBox, TQT_SIGNAL(toggled(bool)), TQT_SLOT(itemChanged()));
connect(widget->fontChange, TQT_SIGNAL(clicked()), TQT_SLOT(fontChangeClicked()));
connect(widget->firefoxFix, TQT_SIGNAL(clicked()), TQT_SLOT(firefoxFixClicked()));
connect(widget->emacsDetails, TQT_SIGNAL(clicked()), TQT_SLOT(emacsDetailsClicked()));
connect(widget->warning3, TQT_SIGNAL(clicked()), TQT_SLOT(searchPathsClicked()));
connect(widget->warning6, TQT_SIGNAL(clicked()), TQT_SLOT(searchPathsClicked()));
@ -557,190 +555,6 @@ TQString KcmGtk::quickHelp() const
return i18n("");
}
void KcmGtk::firefoxFixClicked()
{
profiles.clear();
getProfiles(TQDir::homeDirPath() + "/.mozilla/firefox/", 0);
getProfiles(TQDir::homeDirPath() + "/.thunderbird/", 1);
TQString profilePath;
if (profiles.count() == 0)
{
KMessageBox::error(this, i18n("No Mozilla profiles found"), i18n("Could not load Mozilla profiles"));
return;
}
else if (profiles.count() == 1)
{
fixProfile(profiles.begin().data());
}
else
{
KDialogBase* dialog = new KDialogBase(this, "", true, i18n("Mozilla profile"), KDialogBase::Ok | KDialogBase::Cancel);
MozillaProfileWidget* w = new MozillaProfileWidget(dialog);
w->profilesList->header()->hide();
w->profilesList->hideColumn(1);
TQPixmap icon = TDEGlobal::iconLoader()->loadIcon("kuser", TDEIcon::Small);
for ( TQMapIterator<TQString,TQString> it = profiles.begin(); it != profiles.end(); ++it )
{
TDEListViewItem* i = new TDEListViewItem(w->profilesList);
i->setPixmap(0, icon);
i->setText(0, it.key());
i->setText(1, it.data());
}
dialog->setMainWidget(w);
if (dialog->exec() == TQDialog::Rejected)
{
delete dialog;
return;
}
TQListViewItemIterator it2(w->profilesList, TQListViewItemIterator::Selected);
while (it2.current())
{
TDEListViewItem* i = (TDEListViewItem*) it2.current();
++it2;
fixProfile(i->text(1));
}
delete dialog;
}
KMessageBox::information(this, i18n("Your Mozilla profile was updated sucessfully. You must close and restart all Firefox and Thunderbird windows for the changes to take effect"), i18n("Mozilla profile"));
}
void KcmGtk::getProfiles(const TQString& basePath, int type)
{
TQString fileName = basePath + "/profiles.ini";
if (TQFile::exists(fileName))
{
TDEConfig config(fileName, true, false);
TQStringList groups = config.groupList();
for ( TQStringList::Iterator it = groups.begin(); it != groups.end(); ++it )
{
if (!(*it).lower().startsWith("profile"))
continue;
config.setGroup(*it);
TQString name = (type ? i18n("Thunderbird") : i18n("Firefox")) + " - " + config.readEntry("Name");
TQString path = config.readEntry("Path");
if (!path.startsWith("/"))
path = basePath + path;
profiles.insert(name, path);
}
}
}
void KcmGtk::fixProfile(const TQString& path)
{
if (!TQFile::exists(path + "/chrome"))
{
TQDir dir(path);
dir.mkdir("chrome");
}
TQString data = scrollBarCSS();
writeFirefoxCSS(path + "/chrome/userChrome.css", data);
writeFirefoxCSS(path + "/chrome/userContent.css", data);
}
TQString KcmGtk::scrollBarCSS()
{
// The following code determines how many buttons are on a scrollbar
// It works by looking at each pixel of the scrollbar's area not taken up by the groove,
// and asking the style which subcontrol is at that location.
TQScrollBar sbar(NULL);
sbar.setOrientation(Qt::Horizontal);
sbar.setValue(1);
sbar.resize(200,25);
TQRect rect = tqApp->style().querySubControlMetrics(TQStyle::CC_ScrollBar, &sbar, TQStyle::SC_ScrollBarGroove);
bool back1 = false;
bool forward1 = false;
bool back2 = false;
bool forward2 = false;
TQStyle::SubControl sc = TQStyle::SC_None;
for (TQPoint pos(0,7) ; pos.x()<rect.x() ; pos.setX(pos.x()+1))
{
TQStyle::SubControl sc2 = tqApp->style().querySubControl(TQStyle::CC_ScrollBar, &sbar, pos);
if (sc != sc2)
{
if (sc2 == TQStyle::SC_ScrollBarAddLine) forward1 = true;
if (sc2 == TQStyle::SC_ScrollBarSubLine) back1 = true;
sc = sc2;
}
}
sc = TQStyle::SC_None;
for (TQPoint pos(rect.x()+rect.width(),7) ; pos.x()<200 ; pos.setX(pos.x()+1))
{
TQStyle::SubControl sc2 = tqApp->style().querySubControl(TQStyle::CC_ScrollBar, &sbar, pos);
if (sc != sc2)
{
if (sc2 == TQStyle::SC_ScrollBarAddLine) forward2 = true;
if (sc2 == TQStyle::SC_ScrollBarSubLine) back2 = true;
sc = sc2;
}
}
TQString upTop = (back1 ? "-moz-box" : "none");
TQString downTop = (forward1 ? "-moz-box" : "none");
TQString upBottom = (back2 ? "-moz-box" : "none");
TQString downBottom = (forward2 ? "-moz-box" : "none");
TQString data;
data += "/* The following four lines were added by TDE */\n";
data += "scrollbarbutton[sbattr=\"scrollbar-up-top\"] { display: " + upTop + " !important; }\n";
data += "scrollbarbutton[sbattr=\"scrollbar-down-top\"] { display: " + downTop + " !important; }\n";
data += "scrollbarbutton[sbattr=\"scrollbar-up-bottom\"] { display: " + upBottom + " !important; }\n";
data += "scrollbarbutton[sbattr=\"scrollbar-down-bottom\"] { display: " + downBottom + " !important; }\n";
return data;
}
void KcmGtk::writeFirefoxCSS(const TQString& path, const TQString& data)
{
TQString fileData;
TQFile file(path);
if (file.open(IO_ReadOnly))
{
TQTextStream stream(&file);
for (;;)
{
TQString line = stream.readLine();
if (line.isNull())
break;
if ((line == "# The following four lines were added by TDE") ||
(line == "/* The following four lines were added by TDE */"))
{
for (int i=0 ; i<4 ; i++)
stream.readLine();
continue;
}
fileData += line + "\n";
}
file.close();
}
if (!file.open(IO_WriteOnly | IO_Truncate))
{
KMessageBox::error(this, i18n("Could not write to %1").arg(path), i18n("Mozilla profile"));
return;
}
TQTextStream stream(&file);
stream << fileData << data;
file.close();
return;
}
void KcmGtk::emacsDetailsClicked()
{
if (emacsDetailsDialog == NULL)

@ -74,7 +74,6 @@ public slots:
void styleChanged();
void fontChangeClicked();
void itemChanged();
void firefoxFixClicked();
void emacsDetailsClicked();
void searchPathsClicked();
void searchPathsOk();
@ -85,14 +84,10 @@ public slots:
private:
void updateFontPreview();
void getProfiles(const TQString& basePath, int type);
void fixProfile(const TQString& path);
TQString scrollBarCSS();
void writeFirefoxCSS(const TQString& path, const TQString& data);
void getInstalledThemes();
TQString env(TQString key);
KcmGtkWidget* widget;
TQMap<TQString,TQString> themes;
TQMap<TQString,TQString> gtk3Themes;

@ -653,118 +653,6 @@
</widget>
</hbox>
</widget>
<widget class="TQGroupBox">
<property name="name">
<cstring>groupBox1</cstring>
</property>
<property name="sizePolicy">
<sizepolicy>
<hsizetype>5</hsizetype>
<vsizetype>4</vsizetype>
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="title">
<string>Firefox and Thunderbird</string>
</property>
<hbox>
<property name="name">
<cstring>unnamed</cstring>
</property>
<widget class="TQLayoutWidget">
<property name="name">
<cstring>layout7_2_2</cstring>
</property>
<vbox>
<property name="name">
<cstring>unnamed</cstring>
</property>
<widget class="TQLabel">
<property name="name">
<cstring>firefoxIcon</cstring>
</property>
<property name="scaledContents">
<bool>true</bool>
</property>
</widget>
<spacer>
<property name="name">
<cstring>spacer3_2_2</cstring>
</property>
<property name="orientation">
<enum>Vertical</enum>
</property>
<property name="sizeType">
<enum>Expanding</enum>
</property>
<property name="sizeHint">
<size>
<width>20</width>
<height>31</height>
</size>
</property>
</spacer>
</vbox>
</widget>
<widget class="TQLayoutWidget">
<property name="name">
<cstring>layout12</cstring>
</property>
<vbox>
<property name="name">
<cstring>unnamed</cstring>
</property>
<widget class="TQLabel">
<property name="name">
<cstring>textLabel1</cstring>
</property>
<property name="text">
<string>Scrollbar buttons may sometimes be displayed incorrectly in Firefox and Thunderbird. This can be fixed by installing some files into your Mozilla profile.</string>
</property>
<property name="alignment">
<set>WordBreak|AlignVCenter</set>
</property>
</widget>
<widget class="TQLayoutWidget">
<property name="name">
<cstring>layout11</cstring>
</property>
<hbox>
<property name="name">
<cstring>unnamed</cstring>
</property>
<widget class="TQPushButton">
<property name="name">
<cstring>firefoxFix</cstring>
</property>
<property name="text">
<string>I&amp;nstall scrollbar fix...</string>
</property>
</widget>
<spacer>
<property name="name">
<cstring>spacer11</cstring>
</property>
<property name="orientation">
<enum>Horizontal</enum>
</property>
<property name="sizeType">
<enum>Expanding</enum>
</property>
<property name="sizeHint">
<size>
<width>101</width>
<height>21</height>
</size>
</property>
</spacer>
</hbox>
</widget>
</vbox>
</widget>
</hbox>
</widget>
<widget class="TQLabel">
<property name="name">
<cstring>textLabel1_2</cstring>
@ -811,7 +699,6 @@
<tabstop>fontChange</tabstop>
<tabstop>emacsBox</tabstop>
<tabstop>emacsDetails</tabstop>
<tabstop>firefoxFix</tabstop>
</tabstops>
<layoutdefaults spacing="6" margin="11"/>
<includehints>

@ -2098,7 +2098,7 @@ void setRcProperties(GtkRcStyle* rc_style, int forceRecreate)
stream << parse_rc_string("GtkScrollbar::stepper-size = " + TQString::number(tqApp->style().querySubControlMetrics(TQStyle::CC_ScrollBar, &sbar, TQStyle::SC_ScrollBarSubLine).width() - 1), "*");
stream << parse_rc_string("GtkScrollbar::min-slider-length = " + TQString::number(tqApp->style().pixelMetric(TQStyle::PM_ScrollBarSliderMin)), "*");
stream << parse_rc_string("GtkScrollbar::slider-width = " + TQString::number(tqApp->style().pixelMetric(TQStyle::PM_ScrollBarExtent)-2), "*");
stream << parse_rc_string("GtkScrollbar::slider-width = " + TQString::number(tqApp->style().pixelMetric(TQStyle::PM_ScrollBarExtent)), "*");
stream << parse_rc_string("GtkButton::child-displacement-x = " + TQString::number(tqApp->style().pixelMetric(TQStyle::PM_ButtonShiftHorizontal)), "*");
stream << parse_rc_string("GtkButton::child-displacement-y = " + TQString::number(tqApp->style().pixelMetric(TQStyle::PM_ButtonShiftVertical)), "*");

@ -506,13 +506,16 @@ draw_arrow(GtkStyle* style,
{
sanitize_size(window, &width, &height);
if (gtkQtDebug)
if (gtkQtDebug) {
printf("Arrow (%d,%d,%d,%d) Widget: %s Detail: %s\n", x, y, width, height,gtk_widget_get_name(widget),detail);
if (DETAIL("hscrollbar") || DETAIL("vscrollbar"))
}
if (DETAIL("hscrollbar") || DETAIL("vscrollbar")) {
return;
if (DETAIL("spinbutton"))
}
if (DETAIL("spinbutton")) {
return;
}
if (DETAIL("notebook"))
{
drawArrow(window, style, state_type, arrow_type, x, y, width, height);
@ -688,7 +691,12 @@ draw_box(GtkStyle * style,
int orientation = ((width>height) ? GTK_ORIENTATION_HORIZONTAL : GTK_ORIENTATION_VERTICAL);
if (area) gdk_gc_set_clip_rectangle(style->bg_gc[state_type], area);
drawScrollBar(window, style, state_type, orientation, adj, x, y, width, height);
if (orientation == GTK_ORIENTATION_VERTICAL) {
drawScrollBar(window, style, state_type, orientation, adj, x+1, y, width, height);
}
else {
drawScrollBar(window, style, state_type, orientation, adj, x, y+1, width, height);
}
if (area) gdk_gc_set_clip_rectangle(style->bg_gc[state_type], NULL);
}
return;
@ -1363,12 +1371,12 @@ draw_slider(GtkStyle * style,
if (orientation == GTK_ORIENTATION_VERTICAL) {
if (area) gdk_gc_set_clip_rectangle(style->bg_gc[state_type], area);
drawScrollBarSlider(window, style, state_type, orientation, adj, x-1, y, width+2, height, y-widgetY, widget->allocation.height);
drawScrollBarSlider(window, style, state_type, orientation, adj, x, y, width, height, y-widgetY, widget->allocation.height);
if (area) gdk_gc_set_clip_rectangle(style->bg_gc[state_type], NULL);
}
else {
if (area) gdk_gc_set_clip_rectangle(style->bg_gc[state_type], area);
drawScrollBarSlider(window, style, state_type, orientation, adj, x, y-1, width, height+2, x-widgetX, widget->allocation.width);
drawScrollBarSlider(window, style, state_type, orientation, adj, x, y, width, height, x-widgetX, widget->allocation.width);
if (area) gdk_gc_set_clip_rectangle(style->bg_gc[state_type], NULL);
}
return;

Loading…
Cancel
Save