#include "TextCache.h"
#include "bufferlist.h"
#include "insets/insetbib.h"
-#include "menus.h"
#include "lyx_gui_misc.h"
#include "lyxrc.h"
#include "intl.h"
#include "support/LAssert.h"
#include "frontends/Dialogs.h"
+#ifndef NEW_MENUBAR
+# include "menus.h"
+#endif
#ifdef SIGC_CXX_NAMESPACES
using SigC::slot;
extern BufferList bufferlist;
extern char ascii_type;
+extern "C" void TimerCB(FL_OBJECT *, long);
extern void sigchldhandler(pid_t pid, int * status);
extern int bibitemMaxWidth(BufferView *, LyXFont const &);
{
buffer_ = 0;
workarea_ = new WorkArea(bv_, xpos, ypos, width, height);
+ // Setup the signals
+ workarea_->workAreaExpose
+ .connect(slot(this, &BufferView::Pimpl::workAreaExpose));
+ workarea_->workAreaEnter
+ .connect(slot(this, &BufferView::Pimpl::enterView));
+ workarea_->workAreaLeave
+ .connect(slot(this, &BufferView::Pimpl::leaveView));
+ workarea_->workAreaButtonPress
+ .connect(slot(this, &BufferView::Pimpl::workAreaButtonPress));
+ workarea_->workAreaButtonRelease
+ .connect(slot(this,
+ &BufferView::Pimpl::workAreaButtonRelease));
+ workarea_->workAreaMotionNotify
+ .connect(slot(this, &BufferView::Pimpl::workAreaMotionNotify));
+ workarea_->workAreaDoubleClick
+ .connect(slot(this, &BufferView::Pimpl::doubleClick));
+ workarea_->workAreaTripleClick
+ .connect(slot(this, &BufferView::Pimpl::tripleClick));
+ workarea_->workAreaKeyPress
+ .connect(slot(this, &BufferView::Pimpl::workAreaKeyPress));
+
screen_ = 0;
cursor_timeout.timeout.connect(slot(this,
if (buffer_) {
lyxerr[Debug::INFO] << "Buffer addr: " << buffer_ << endl;
buffer_->addUser(bv_);
- owner_->getMenus()->showMenus();
// If we don't have a text object for this, we make one
if (bv_->text == 0) {
resizeCurrentBuffer();
updateScrollbar();
}
bv_->text->first = screen_->TopCursorVisible(bv_->text);
+#ifdef NEW_MENUBAR
+ owner_->updateMenubar();
+#else
+ owner_->getMenus()->showMenus();
+#endif
+ owner_->updateToolbar();
redraw();
owner_->getDialogs()->updateBufferDependent();
bv_->insetWakeup();
} else {
lyxerr[Debug::INFO] << " No Buffer!" << endl;
+#ifdef NEW_MENUBAR
+ owner_->updateMenubar();
+#else
owner_->getMenus()->hideMenus();
+#endif
+ owner_->updateToolbar();
updateScrollbar();
workarea_->redraw();
}
+void BufferView::Pimpl::workAreaKeyPress(KeySym keysym, unsigned int state)
+{
+ bv_->owner()->getLyXFunc()->processKeySym(keysym, state);
+}
+
+
void BufferView::Pimpl::workAreaMotionNotify(int x, int y, unsigned int state)
{
// Only use motion with button 1
LyXCursor cursor = bv_->text->cursor;
bv_->the_locking_inset->
InsetMotionNotify(bv_,
- x - cursor.x(),
+ x - cursor.x() -
+ bv_->the_locking_inset->scroll(),
y - cursor.y() + bv_->text->first,
state);
return;
void BufferView::Pimpl::tripleClick(int /*x*/, int /*y*/, unsigned int button)
{
// select a line
- if (buffer_ && screen_ && button == 1) {
+ if (buffer_ && screen_ && !bv_->the_locking_inset && (button == 1)) {
screen_->HideCursor();
screen_->ToggleSelection(bv_->text);
bv_->text->CursorHome(bv_);
if (button >= 2) return;
bv_->setState();
- owner_->getMiniBuffer()->Set(CurrentState(bv_));
+ owner_->showState();
// Did we hit an editable inset?
if (inset_hit != 0) {
LyXCursor cursor;
text->SetCursorFromCoordinates(bv_, cursor, x, y_tmp);
-#if 0 // Are you planning to use this Jürgen? (Lgb)
- bool move_cursor = ((cursor.par != text->cursor.par) ||
- (cursor.pos != text->cursor.pos()));
-#endif
+
if (cursor.pos() < cursor.par()->Last()
&& cursor.par()->GetChar(cursor.pos()) == LyXParagraph::META_INSET
&& cursor.par()->GetInset(cursor.pos())
int start_x, end_x;
if (is_rtl) {
- start_x = cursor.x() - tmpinset->width(bv_, font);
- end_x = cursor.x();
+ start_x = cursor.x() - tmpinset->width(bv_, font) + tmpinset->scroll();
+ end_x = cursor.x() + tmpinset->scroll();
} else {
- start_x = cursor.x();
- end_x = cursor.x() + tmpinset->width(bv_, font);
+ start_x = cursor.x() + tmpinset->scroll();
+ end_x = cursor.x() + tmpinset->width(bv_, font) + tmpinset->scroll();
}
if (x > start_x && x < end_x
&& y_tmp > cursor.y() - tmpinset->ascent(bv_, font)
&& y_tmp < cursor.y() + tmpinset->descent(bv_, font)) {
-#if 0
- if (move_cursor && (tmpinset != bv_->the_locking_inset))
-#endif
- text->SetCursor(bv_, cursor.par(),cursor.pos(),true);
+ text->SetCursor(bv_, cursor.par(),cursor.pos(),true);
x = x - start_x;
// The origin of an inset is on the baseline
y = y_tmp - (text->cursor.y());
int start_x, end_x;
if (!is_rtl) {
- start_x = cursor.x() - tmpinset->width(bv_, font);
- end_x = cursor.x();
+ start_x = cursor.x() - tmpinset->width(bv_, font) +
+ tmpinset->scroll();
+ end_x = cursor.x() + tmpinset->scroll();
} else {
- start_x = cursor.x();
- end_x = cursor.x() + tmpinset->width(bv_, font);
+ start_x = cursor.x() + tmpinset->scroll();
+ end_x = cursor.x() + tmpinset->width(bv_, font) +
+ tmpinset->scroll();
}
if (x > start_x && x < end_x
&& y_tmp > cursor.y() - tmpinset->ascent(bv_, font)
int x, y;
string fname = backstack.pop(&x, &y);
-
+
beforeChange();
- Buffer * b = bufferlist.exists(fname) ?
- bufferlist.getBuffer(fname) :
- bufferlist.loadLyXFile(fname); // don't ask, just load it
- buffer(b);
+
+ if( fname != buffer_->fileName() ) {
+ Buffer * b = bufferlist.exists(fname) ?
+ bufferlist.getBuffer(fname) :
+ bufferlist.loadLyXFile(fname); // don't ask, just load it
+ if( b != 0 ) buffer(b);
+ }
+
bv_->text->SetCursorFromCoordinates(bv_, x, y);
update(BufferView::SELECT|BufferView::FITCUR);
-}
+}
bool BufferView::Pimpl::NoSavedPositions()