mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-09 18:31:04 +00:00
fix for something similar to bug132, pluss some small stuff
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@3429 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
d6dd467219
commit
bd82f1d334
@ -405,17 +405,26 @@ void BufferView::Pimpl::updateScrollbar()
|
||||
}
|
||||
|
||||
long const text_height = bv_->text->height;
|
||||
long const work_height = workarea_.height();
|
||||
|
||||
if (text_height <= work_height) {
|
||||
workarea_.setScrollbarBounds(0.0, 0.0);
|
||||
current_scrollbar_value = bv_->text->first;
|
||||
workarea_.setScrollbar(current_scrollbar_value, 1.0);
|
||||
return;
|
||||
}
|
||||
|
||||
double const lineh = bv_->text->defaultHeight();
|
||||
double const slider_size =
|
||||
(text_height == 0) ? 1.0 : 1.0 / double(text_height);
|
||||
|
||||
static long old_text_height = 0;
|
||||
static double old_lineh = 0;
|
||||
static double old_slider_size = 0;
|
||||
|
||||
static long old_text_height;
|
||||
static double old_lineh;
|
||||
static double old_slider_size;
|
||||
|
||||
if (text_height != old_text_height) {
|
||||
workarea_.setScrollbarBounds(0, text_height - workarea_.height());
|
||||
workarea_.setScrollbarBounds(0.0,
|
||||
text_height - work_height);
|
||||
old_text_height = text_height;
|
||||
}
|
||||
if (lineh != old_lineh) {
|
||||
@ -437,6 +446,7 @@ void BufferView::Pimpl::scrollCB(double value)
|
||||
if (!buffer_) return;
|
||||
|
||||
current_scrollbar_value = long(value);
|
||||
|
||||
if (current_scrollbar_value < 0)
|
||||
current_scrollbar_value = 0;
|
||||
|
||||
@ -570,11 +580,7 @@ void BufferView::Pimpl::workAreaMotionNotify(int x, int y, unsigned int state)
|
||||
bv_->text->setSelection(bv_);
|
||||
screen_->toggleToggle(bv_->text, bv_);
|
||||
fitCursor();
|
||||
#if 0
|
||||
screen_->showCursor(bv_->text, bv_);
|
||||
#else
|
||||
showCursor();
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@ -630,11 +636,7 @@ void BufferView::Pimpl::workAreaButtonPress(int xpos, int ypos,
|
||||
screen_->toggleSelection(bv_->text, bv_);
|
||||
bv_->text->clearSelection();
|
||||
bv_->text->fullRebreak(bv_);
|
||||
#if 0
|
||||
screen_->update(bv_->text, bv_);
|
||||
#else
|
||||
update();
|
||||
#endif
|
||||
updateScrollbar();
|
||||
|
||||
// Single left click in math inset?
|
||||
@ -740,7 +742,8 @@ void BufferView::Pimpl::tripleClick(int /*x*/, int /*y*/, unsigned int button)
|
||||
|
||||
void BufferView::Pimpl::selectionRequested()
|
||||
{
|
||||
string const sel(bv_->getLyXText()->selectionAsString(bv_->buffer(), false));
|
||||
string const sel(bv_->getLyXText()->selectionAsString(bv_->buffer(),
|
||||
false));
|
||||
if (!sel.empty()) {
|
||||
workarea_.putClipboard(sel);
|
||||
}
|
||||
@ -864,7 +867,8 @@ void BufferView::Pimpl::workAreaButtonRelease(int x, int y,
|
||||
}
|
||||
|
||||
|
||||
Box BufferView::Pimpl::insetDimensions(LyXText const & text, LyXCursor const & cursor) const
|
||||
Box BufferView::Pimpl::insetDimensions(LyXText const & text,
|
||||
LyXCursor const & cursor) const
|
||||
{
|
||||
Paragraph /*const*/ & par = *cursor.par();
|
||||
pos_type const pos = cursor.pos();
|
||||
@ -887,7 +891,9 @@ Box BufferView::Pimpl::insetDimensions(LyXText const & text, LyXCursor const & c
|
||||
}
|
||||
|
||||
|
||||
Inset * BufferView::Pimpl::checkInset(LyXText const & text, LyXCursor const & cursor, int & x, int & y) const
|
||||
Inset * BufferView::Pimpl::checkInset(LyXText const & text,
|
||||
LyXCursor const & cursor,
|
||||
int & x, int & y) const
|
||||
{
|
||||
pos_type const pos(cursor.pos());
|
||||
Paragraph /*const*/ & par(*cursor.par());
|
||||
|
@ -1,3 +1,18 @@
|
||||
2002-01-21 Lars Gullik Bjønnes <larsbj@birdstep.com>
|
||||
|
||||
* WorkArea.C (WorkArea): initialize the scrollbar bounds.
|
||||
|
||||
* DepTable.C (sumchange): do not evaluate end() on every iteratrion.
|
||||
(extchanged): ditto
|
||||
(ext_exist): ditto
|
||||
(remove_files_with_extension): ditto
|
||||
(remove_file): ditto
|
||||
(write): ditto
|
||||
|
||||
* BufferView_pimpl.C (updateScrollbar): do the right thing if the
|
||||
document is smaller than the work area height. Do not initialize
|
||||
static variables to 0.
|
||||
|
||||
2002-01-20 Jean-Marc Lasgouttes <lasgouttes@freesurf.fr>
|
||||
|
||||
* lyx_gui.C (init): give the toolbar tooltips a normal font.
|
||||
|
@ -34,23 +34,26 @@
|
||||
using std::make_pair;
|
||||
using std::ofstream;
|
||||
using std::ifstream;
|
||||
using std::flush;
|
||||
using std::endl;
|
||||
|
||||
inline bool DepTable::dep_info::changed() const
|
||||
|
||||
inline
|
||||
bool DepTable::dep_info::changed() const
|
||||
{
|
||||
return crc_prev != crc_cur && crc_cur != 0;
|
||||
}
|
||||
|
||||
void DepTable::insert(string const & fi,
|
||||
bool upd)
|
||||
|
||||
void DepTable::insert(string const & fi, bool upd)
|
||||
{
|
||||
// not quite sure if this is the correct place for MakeAbsPath
|
||||
string f = MakeAbsPath(fi);
|
||||
string const f = MakeAbsPath(fi);
|
||||
if (deplist.find(f) == deplist.end()) {
|
||||
dep_info di;
|
||||
di.crc_prev = 0;
|
||||
if (upd) {
|
||||
lyxerr[Debug::DEPEND] << " CRC..." << std::flush;
|
||||
lyxerr[Debug::DEPEND] << " CRC..." << flush;
|
||||
di.crc_cur = lyx::sum(f);
|
||||
lyxerr[Debug::DEPEND] << "done." << endl;
|
||||
struct stat f_info;
|
||||
@ -77,7 +80,7 @@ void DepTable::update()
|
||||
dep_info &di = itr->second;
|
||||
|
||||
struct stat f_info;
|
||||
if (0 == stat(itr->first.c_str(), &f_info) ) {
|
||||
if (stat(itr->first.c_str(), &f_info) == 0) {
|
||||
if (di.mtime_cur == f_info.st_mtime) {
|
||||
di.crc_prev = di.crc_cur;
|
||||
lyxerr[Debug::DEPEND] << itr->first << " same mtime";
|
||||
@ -113,10 +116,10 @@ void DepTable::update()
|
||||
|
||||
bool DepTable::sumchange() const
|
||||
{
|
||||
for (DepList::const_iterator cit = deplist.begin();
|
||||
cit != deplist.end();
|
||||
++cit) {
|
||||
if ((*cit).second.changed()) return true;
|
||||
DepList::const_iterator cit = deplist.begin();
|
||||
DepList::const_iterator end = deplist.end();
|
||||
for (; cit != end; ++cit) {
|
||||
if (cit->second.changed()) return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@ -125,7 +128,7 @@ bool DepTable::sumchange() const
|
||||
bool DepTable::haschanged(string const & f) const
|
||||
{
|
||||
// not quite sure if this is the correct place for MakeAbsPath
|
||||
string fil = MakeAbsPath(f);
|
||||
string const fil = MakeAbsPath(f);
|
||||
DepList::const_iterator cit = deplist.find(fil);
|
||||
if (cit != deplist.end()) {
|
||||
if (cit->second.changed())
|
||||
@ -137,9 +140,9 @@ bool DepTable::haschanged(string const & f) const
|
||||
|
||||
bool DepTable::extchanged(string const & ext) const
|
||||
{
|
||||
for (DepList::const_iterator cit = deplist.begin();
|
||||
cit != deplist.end();
|
||||
++cit) {
|
||||
DepList::const_iterator cit = deplist.begin();
|
||||
DepList::const_iterator end = deplist.end();
|
||||
for (; cit != end; ++cit) {
|
||||
if (suffixIs(cit->first, ext)) {
|
||||
if (cit->second.changed())
|
||||
return true;
|
||||
@ -151,16 +154,17 @@ bool DepTable::extchanged(string const & ext) const
|
||||
|
||||
bool DepTable::ext_exist(const string& ext ) const
|
||||
{
|
||||
for (DepList::const_iterator cit = deplist.begin();
|
||||
cit != deplist.end(); ++cit ) {
|
||||
|
||||
if ( suffixIs(cit->first, ext) ) {
|
||||
DepList::const_iterator cit = deplist.begin();
|
||||
DepList::const_iterator end = deplist.end();
|
||||
for (; cit != end; ++cit ) {
|
||||
if (suffixIs(cit->first, ext)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
bool DepTable::exist(string const & fil) const
|
||||
{
|
||||
return deplist.find(fil) != deplist.end();
|
||||
@ -170,15 +174,18 @@ bool DepTable::exist(string const & fil) const
|
||||
void DepTable::remove_files_with_extension(string const & suf)
|
||||
{
|
||||
DepList::iterator cit = deplist.begin();
|
||||
while (cit != deplist.end()) {
|
||||
DepList::iterator end = deplist.end();
|
||||
while (cit != end) {
|
||||
if (suffixIs(cit->first, suf)) {
|
||||
// Can't erase the current iterator, but we can increment and then erase.
|
||||
// deplist is a map so only the erased iterator is invalidated.
|
||||
// Can't erase the current iterator, but we
|
||||
// can increment and then erase.
|
||||
// Deplist is a map so only the erased
|
||||
// iterator is invalidated.
|
||||
DepList::iterator doomed = cit++;
|
||||
deplist.erase(doomed);
|
||||
continue;
|
||||
}
|
||||
cit++;
|
||||
++cit;
|
||||
}
|
||||
}
|
||||
|
||||
@ -186,15 +193,18 @@ void DepTable::remove_files_with_extension(string const & suf)
|
||||
void DepTable::remove_file(string const & filename)
|
||||
{
|
||||
DepList::iterator cit = deplist.begin();
|
||||
while (cit != deplist.end()) {
|
||||
DepList::iterator end = deplist.end();
|
||||
while (cit != end) {
|
||||
if (OnlyFilename(cit->first) == filename) {
|
||||
// Can't erase the current iterator, but we can increment and then erase.
|
||||
// deplist is a map so only the erased iterator is invalidated.
|
||||
// Can't erase the current iterator, but we
|
||||
// can increment and then erase.
|
||||
// deplist is a map so only the erased
|
||||
// iterator is invalidated.
|
||||
DepList::iterator doomed = cit++;
|
||||
deplist.erase(doomed);
|
||||
continue;
|
||||
}
|
||||
cit++;
|
||||
++cit;
|
||||
}
|
||||
}
|
||||
|
||||
@ -202,10 +212,12 @@ void DepTable::remove_file(string const & filename)
|
||||
void DepTable::write(string const & f) const
|
||||
{
|
||||
ofstream ofs(f.c_str());
|
||||
for (DepList::const_iterator cit = deplist.begin();
|
||||
cit != deplist.end(); ++cit) {
|
||||
DepList::const_iterator cit = deplist.begin();
|
||||
DepList::const_iterator end = deplist.end();
|
||||
for (; cit != end; ++cit) {
|
||||
if (lyxerr.debugging(Debug::DEPEND)) {
|
||||
// Store the second (most recently calculated) CRC value.
|
||||
// Store the second (most recently calculated)
|
||||
// CRC value.
|
||||
// The older one is effectively set to 0 upon re-load.
|
||||
lyxerr << "Write dep: "
|
||||
<< cit->first << " "
|
||||
|
@ -156,7 +156,8 @@ WorkArea::WorkArea(int xpos, int ypos, int width, int height)
|
||||
fl_set_object_gravity(obj, NorthEastGravity, SouthEastGravity);
|
||||
obj->u_vdata = this;
|
||||
fl_set_object_callback(obj, C_WorkArea_scroll_cb, 0);
|
||||
|
||||
setScrollbarBounds(0.0, 0.0);
|
||||
|
||||
///
|
||||
/// The free object
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user