summaryrefslogtreecommitdiffstats
path: root/src/gui_kde_wid.cc
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2004-12-29 20:58:21 +0000
committerBram Moolenaar <Bram@vim.org>2004-12-29 20:58:21 +0000
commit81695250ef1bbc02016078044ac268129a33f333 (patch)
treec31ec7182b5b06ffeb5a14b79701127eaa5c0dc8 /src/gui_kde_wid.cc
parent86b68359978c933419279e599d0a8cf536095d77 (diff)
updated for version 7.0026
Diffstat (limited to 'src/gui_kde_wid.cc')
-rw-r--r--src/gui_kde_wid.cc886
1 files changed, 554 insertions, 332 deletions
diff --git a/src/gui_kde_wid.cc b/src/gui_kde_wid.cc
index fefbe9a4b9..52d1c9eadc 100644
--- a/src/gui_kde_wid.cc
+++ b/src/gui_kde_wid.cc
@@ -69,84 +69,85 @@ struct special_key {//{{{
char_u code1;
} special_keys[] =
{
- { Qt::Key_Up, 'k', 'u' },
- { Qt::Key_Down, 'k', 'd' },
- { Qt::Key_Left, 'k', 'l' },
- { Qt::Key_Right, 'k', 'r' },
- { Qt::Key_F1, 'k', '1' },
- { Qt::Key_F2, 'k', '2' },
- { Qt::Key_F3, 'k', '3' },
- { Qt::Key_F4, 'k', '4' },
- { Qt::Key_F5, 'k', '5' },
- { Qt::Key_F6, 'k', '6' },
- { Qt::Key_F7, 'k', '7' },
- { Qt::Key_F8, 'k', '8' },
- { Qt::Key_F9, 'k', '9' },
- { Qt::Key_F10, 'k', ';' },
- { Qt::Key_F11, 'F', '1' },
- { Qt::Key_F12, 'F', '2' },
- { Qt::Key_F13, 'F', '3' },
- { Qt::Key_F14, 'F', '4' },
- { Qt::Key_F15, 'F', '5' },
- { Qt::Key_F16, 'F', '6' },
- { Qt::Key_F17, 'F', '7' },
- { Qt::Key_F18, 'F', '8' },
- { Qt::Key_F19, 'F', '9' },
- { Qt::Key_F20, 'F', 'A' },
- { Qt::Key_F21, 'F', 'B' },
- { Qt::Key_F22, 'F', 'C' },
- { Qt::Key_F23, 'F', 'D' },
- { Qt::Key_F24, 'F', 'E' },
- { Qt::Key_F25, 'F', 'F' },
- { Qt::Key_F26, 'F', 'G' },
- { Qt::Key_F27, 'F', 'H' },
- { Qt::Key_F28, 'F', 'I' },
- { Qt::Key_F29, 'F', 'J' },
- { Qt::Key_F30, 'F', 'K' },
- { Qt::Key_F31, 'F', 'L' },
- { Qt::Key_F32, 'F', 'M' },
- { Qt::Key_F33, 'F', 'N' },
- { Qt::Key_F34, 'F', 'O' },
- { Qt::Key_F35, 'F', 'P' },
- { Qt::Key_Help, '%', '1' },
- // { Qt::Key_Undo, '&', '8' }, <= hmmm ?
- { Qt::Key_BackSpace, 'k', 'b' },
- { Qt::Key_Insert, KS_EXTRA, KE_KINS },
- { Qt::Key_Delete, KS_EXTRA, KE_KDEL },
- { Qt::Key_Home, 'K', '1' },
- { Qt::Key_End, 'K', '4' },
- { Qt::Key_Prior, 'K', '3' },
- { Qt::Key_Next, 'K', '5' },
- { Qt::Key_Print, '%', '9' },
-
- { Qt::Key_Plus, 'K', '6'},
- { Qt::Key_Minus, 'K', '7'},
- { Qt::Key_Slash, 'K', '8'},
- { Qt::Key_multiply, 'K', '9'},
- { Qt::Key_Enter, 'K', 'A'},
- { Qt::Key_Period, 'K', 'B'},
-
- { Qt::Key_0, 'K', 'C'},
- { Qt::Key_1, 'K', 'D'},
- { Qt::Key_2, 'K', 'E'},
- { Qt::Key_3, 'K', 'F'},
- { Qt::Key_4, 'K', 'G'},
- { Qt::Key_5, 'K', 'H'},
- { Qt::Key_6, 'K', 'I'},
- { Qt::Key_7, 'K', 'J'},
- { Qt::Key_8, 'K', 'K'},
- { Qt::Key_9, 'K', 'L'},
+ {Qt::Key_Up, 'k', 'u'},
+ {Qt::Key_Down, 'k', 'd'},
+ {Qt::Key_Left, 'k', 'l'},
+ {Qt::Key_Right, 'k', 'r'},
+ {Qt::Key_F1, 'k', '1'},
+ {Qt::Key_F2, 'k', '2'},
+ {Qt::Key_F3, 'k', '3'},
+ {Qt::Key_F4, 'k', '4'},
+ {Qt::Key_F5, 'k', '5'},
+ {Qt::Key_F6, 'k', '6'},
+ {Qt::Key_F7, 'k', '7'},
+ {Qt::Key_F8, 'k', '8'},
+ {Qt::Key_F9, 'k', '9'},
+ {Qt::Key_F10, 'k', ';'},
+ {Qt::Key_F11, 'F', '1'},
+ {Qt::Key_F12, 'F', '2'},
+ {Qt::Key_F13, 'F', '3'},
+ {Qt::Key_F14, 'F', '4'},
+ {Qt::Key_F15, 'F', '5'},
+ {Qt::Key_F16, 'F', '6'},
+ {Qt::Key_F17, 'F', '7'},
+ {Qt::Key_F18, 'F', '8'},
+ {Qt::Key_F19, 'F', '9'},
+ {Qt::Key_F20, 'F', 'A'},
+ {Qt::Key_F21, 'F', 'B'},
+ {Qt::Key_F22, 'F', 'C'},
+ {Qt::Key_F23, 'F', 'D'},
+ {Qt::Key_F24, 'F', 'E'},
+ {Qt::Key_F25, 'F', 'F'},
+ {Qt::Key_F26, 'F', 'G'},
+ {Qt::Key_F27, 'F', 'H'},
+ {Qt::Key_F28, 'F', 'I'},
+ {Qt::Key_F29, 'F', 'J'},
+ {Qt::Key_F30, 'F', 'K'},
+ {Qt::Key_F31, 'F', 'L'},
+ {Qt::Key_F32, 'F', 'M'},
+ {Qt::Key_F33, 'F', 'N'},
+ {Qt::Key_F34, 'F', 'O'},
+ {Qt::Key_F35, 'F', 'P'},
+ {Qt::Key_Help, '%', '1'},
+ // { Qt::Key_Undo, '&', '8'}, <= hmmm ?
+ {Qt::Key_BackSpace, 'k', 'b'},
+ {Qt::Key_Insert, KS_EXTRA, KE_KINS },
+ {Qt::Key_Delete, KS_EXTRA, KE_KDEL },
+ {Qt::Key_Home, 'K', '1'},
+ {Qt::Key_End, 'K', '4'},
+ {Qt::Key_Prior, 'K', '3'},
+ {Qt::Key_Next, 'K', '5'},
+ {Qt::Key_Print, '%', '9'},
+
+ {Qt::Key_Plus, 'K', '6'},
+ {Qt::Key_Minus, 'K', '7'},
+ {Qt::Key_Slash, 'K', '8'},
+ {Qt::Key_multiply, 'K', '9'},
+ {Qt::Key_Enter, 'K', 'A'},
+ {Qt::Key_Period, 'K', 'B'},
+
+ {Qt::Key_0, 'K', 'C'},
+ {Qt::Key_1, 'K', 'D'},
+ {Qt::Key_2, 'K', 'E'},
+ {Qt::Key_3, 'K', 'F'},
+ {Qt::Key_4, 'K', 'G'},
+ {Qt::Key_5, 'K', 'H'},
+ {Qt::Key_6, 'K', 'I'},
+ {Qt::Key_7, 'K', 'J'},
+ {Qt::Key_8, 'K', 'K'},
+ {Qt::Key_9, 'K', 'L'},
+
/* End of list marker: */
- { 0, 0, 0 }
+ {0, 0, 0}
};//}}}
#ifdef FEAT_CLIENTSERVER
-typedef int (*QX11EventFilter) (XEvent*);
-extern QX11EventFilter qt_set_x11_event_filter (QX11EventFilter filter);
-static QX11EventFilter oldFilter = 0;
-static int kvim_x11_event_filter( XEvent* e);
+typedef int (*QX11EventFilter)(XEvent*);
+extern QX11EventFilter qt_set_x11_event_filter(QX11EventFilter filter);
+static QX11EventFilter oldFilter = 0;
+static int kvim_x11_event_filter(XEvent* e);
#endif
-void gui_keypress(QKeyEvent *e);
+void gui_keypress(QKeyEvent *e);
/*
* Return OK if the key with the termcap name "name" is supported.
@@ -164,26 +165,30 @@ gui_mch_haskey(char_u * name)//{{{
/*
* custom Frame for drawing ...
*/
-void VimWidget::paintEvent(QPaintEvent *e)//{{{
+ void
+VimWidget::paintEvent(QPaintEvent *e)//{{{
{
QRect r = e->rect();
gui_redraw(r.x(), r.y(), r.width(), r.height());
}//}}}
-void VimWidget::draw_string(int x, int y, QString s, int len, int flags)//{{{
+ void
+VimWidget::draw_string(int x, int y, QString s, int len, int flags)//{{{
{
gui.current_font->setBold(flags & DRAW_BOLD);
gui.current_font->setUnderline(flags & DRAW_UNDERL);
gui.current_font->setItalic(flags & DRAW_ITALIC);
- painter->setBackgroundMode(flags & DRAW_TRANSP ? Qt::TransparentMode : Qt::OpaqueMode);
+ painter->setBackgroundMode(flags & DRAW_TRANSP
+ ? Qt::TransparentMode : Qt::OpaqueMode);
painter->setFont(*(gui.current_font));
painter->drawText(x, y, s, len);
}//}}}
-void VimWidget::mousePressEvent(QMouseEvent *event)//{{{
+ void
+VimWidget::mousePressEvent(QMouseEvent *event)//{{{
{
- int button=0;
- int modifiers=0;
+ int button = 0;
+ int modifiers = 0;
ButtonState state = event->state();
ButtonState buttons = event->button();
@@ -201,18 +206,21 @@ void VimWidget::mousePressEvent(QMouseEvent *event)//{{{
modifiers |= MOUSE_CTRL;
if (state & QMouseEvent::AltButton)
modifiers |= MOUSE_ALT;
- gui_send_mouse_event(button,event->x(),event->y(),FALSE,modifiers);
+ gui_send_mouse_event(button, event->x(), event->y(), FALSE, modifiers);
#if QT_VERSION>=300
QByteArray params;
QDataStream stream(params, IO_WriteOnly);
- stream << kapp->dcopClient()->appId() << button << modifiers << gui.row << gui.col;
- kapp->dcopClient()->emitDCOPSignal("mousePEvent(QCString,int,int,int,int)", params);
+ stream << kapp->dcopClient()->appId() << button << modifiers
+ << gui.row << gui.col;
+ kapp->dcopClient()->emitDCOPSignal(
+ "mousePEvent(QCString, int, int, int, int)", params);
#endif
event->accept();
}//}}}
#if defined(FEAT_SESSION)
-void VimMainWindow::saveGlobalProperties (KConfig *conf)
+ void
+VimMainWindow::saveGlobalProperties(KConfig *conf)
{
//we write a mksession file to a file written in the user's ~/.kde/share/config/
//the name of the file in saved in 'conf'
@@ -227,7 +235,8 @@ void VimMainWindow::saveGlobalProperties (KConfig *conf)
#endif
}
-void VimMainWindow::readGlobalProperties (KConfig *conf)
+ void
+VimMainWindow::readGlobalProperties (KConfig *conf)
{
#if 0
QString filename = conf->readPathEntry("sessionfile");
@@ -239,194 +248,218 @@ void VimMainWindow::readGlobalProperties (KConfig *conf)
}
#endif
-void VimMainWindow::wheelEvent (QWheelEvent *event)//{{{
+ void
+VimMainWindow::wheelEvent (QWheelEvent *event)//{{{
{
ButtonState state = event->state();
- int button=0;
- int modifiers=0;
+ int button = 0;
+ int modifiers = 0;
- if (event->delta()>0)
- button|=MOUSE_4;
- else button|=MOUSE_5;
+ if (event->delta() > 0)
+ button |= MOUSE_4;
+ else button |= MOUSE_5;
if (state & ShiftButton)
- modifiers|=MOUSE_SHIFT;
+ modifiers |= MOUSE_SHIFT;
if (state & ControlButton)
- modifiers|=MOUSE_CTRL;
+ modifiers |= MOUSE_CTRL;
if (state & AltButton)
- modifiers|=MOUSE_ALT;
+ modifiers |= MOUSE_ALT;
- gui_send_mouse_event(button,event->x(),event->y(),FALSE,modifiers);
+ gui_send_mouse_event(button, event->x(), event->y(), FALSE, modifiers);
#if QT_VERSION>=300
QByteArray params;
QDataStream stream(params, IO_WriteOnly);
- stream << kapp->dcopClient()->appId() << button << modifiers << gui.row << gui.col;
- kapp->dcopClient()->emitDCOPSignal("mouseWhlEvent(QCString, int, int,int,int)", params);
+ stream << kapp->dcopClient()->appId() << button << modifiers
+ << gui.row << gui.col;
+ kapp->dcopClient()->emitDCOPSignal(
+ "mouseWhlEvent(QCString, int, int, int, int)", params);
#endif
event->accept();
}//}}}
-void VimWidget::mouseDoubleClickEvent(QMouseEvent *event)//{{{
+ void
+VimWidget::mouseDoubleClickEvent(QMouseEvent *event)//{{{
{
ButtonState state = event->state();
ButtonState buttons = event->button();
- int modifiers=0;
- int button=0;
+ int modifiers = 0;
+ int button = 0;
//Look at button states
if (buttons & LeftButton)
- button|=MOUSE_LEFT;
+ button |= MOUSE_LEFT;
if (buttons & RightButton)
- button|=MOUSE_RIGHT;
+ button |= MOUSE_RIGHT;
if (buttons & MidButton)
- button|=MOUSE_MIDDLE;
+ button |= MOUSE_MIDDLE;
//Look for keyboard modifiers
if (state & ShiftButton)
- modifiers|=MOUSE_SHIFT;
+ modifiers |= MOUSE_SHIFT;
if (state & ControlButton)
- modifiers|=MOUSE_CTRL;
+ modifiers |= MOUSE_CTRL;
if (state & AltButton)
- modifiers|=MOUSE_ALT;
+ modifiers |= MOUSE_ALT;
- gui_send_mouse_event(button,event->x(),event->y(),TRUE,modifiers);
+ gui_send_mouse_event(button, event->x(), event->y(), TRUE, modifiers);
#if QT_VERSION>=300
QByteArray params;
QDataStream stream(params, IO_WriteOnly);
- stream << kapp->dcopClient()->appId() << button << modifiers << gui.row << gui.col;
- kapp->dcopClient()->emitDCOPSignal("mouseDblClickEvent(QCString, int, int,int,int)", params);
+ stream << kapp->dcopClient()->appId() << button << modifiers
+ << gui.row << gui.col;
+ kapp->dcopClient()->emitDCOPSignal(
+ "mouseDblClickEvent(QCString, int, int, int, int)", params);
#endif
event->accept();
}//}}}
-void VimWidget::mouseMoveEvent(QMouseEvent *event){//{{{
+ void
+VimWidget::mouseMoveEvent(QMouseEvent *event)//{{{
+{
ButtonState state = event->state();
- int modifiers=0;
- int button=0;
+ int modifiers = 0;
+ int button = 0;
gui_mch_mousehide(FALSE);
//Look at button states
//warning: we use state here, this is important !
- if (state & QMouseEvent::LeftButton || state & QMouseEvent::RightButton || state & QMouseEvent::MidButton)
- button|=MOUSE_DRAG;
+ if (state & QMouseEvent::LeftButton
+ || state & QMouseEvent::RightButton
+ || state & QMouseEvent::MidButton)
+ button |= MOUSE_DRAG;
//Look for keyboard modifiers
if (state & ShiftButton)
- modifiers|=MOUSE_SHIFT;
+ modifiers |= MOUSE_SHIFT;
if (state & ControlButton)
- modifiers|=MOUSE_CTRL;
+ modifiers |= MOUSE_CTRL;
if (state & AltButton)
- modifiers|=MOUSE_ALT;
- if (button!=MOUSE_DRAG)
- gui_mouse_moved(event->x(),event->y());
+ modifiers |= MOUSE_ALT;
+ if (button != MOUSE_DRAG)
+ gui_mouse_moved(event->x(), event->y());
else
- gui_send_mouse_event(MOUSE_DRAG,event->x(),event->y(),FALSE,modifiers);
+ gui_send_mouse_event(MOUSE_DRAG, event->x(), event->y(),
+ FALSE, modifiers);
}//}}}
-void VimWidget::mouseReleaseEvent(QMouseEvent *event)//{{{
+ void
+VimWidget::mouseReleaseEvent(QMouseEvent *event)//{{{
{
ButtonState state = event->state();
- int modifiers=0;
+ int modifiers = 0;
//Look for keyboard modifiers
if (state & ShiftButton)
- modifiers|=MOUSE_SHIFT;
+ modifiers |= MOUSE_SHIFT;
if (state & ControlButton)
- modifiers|=MOUSE_CTRL;
+ modifiers |= MOUSE_CTRL;
if (state & AltButton)
- modifiers|=MOUSE_ALT;
+ modifiers |= MOUSE_ALT;
- gui_send_mouse_event(MOUSE_RELEASE,event->x(),event->y(),FALSE,modifiers);
+ gui_send_mouse_event(MOUSE_RELEASE, event->x(), event->y(),
+ FALSE, modifiers);
event->accept();
}//}}}
/*
* The main widget (everything but toolbar/menubar)
*/
- VimWidget::VimWidget( QWidget *parent, const char *name, WFlags f )//{{{
-:QWidget(parent, name, f)
- ,DCOPObject("KVim")
+VimWidget::VimWidget(QWidget *parent, const char *name, WFlags f)//{{{
+ :QWidget(parent, name, f)
+ , DCOPObject("KVim")
#ifdef FEAT_MZSCHEME
- ,mzscheme_timer_id(-1)
+ , mzscheme_timer_id(-1)
#endif
{
//to be able to show/hide the cursor when moving the mouse
setMouseTracking(true);
- painter=new QPainter(this);
+ painter = new QPainter(this);
setKeyCompression(true);
- setFocusPolicy( QWidget::StrongFocus );
+ setFocusPolicy(QWidget::StrongFocus);
setAcceptDrops(TRUE); // DND
blink_state = BLINK_NONE;
blink_on_time = 700;
blink_off_time = 400;
blink_wait_time = 250;
- connect( &blink_timer, SIGNAL( timeout() ), SLOT( blink_cursor() ));
- connect( &wait_timer, SIGNAL( timeout() ), SLOT ( wait_timeout() ));
+ connect( &blink_timer, SIGNAL(timeout()), SLOT(blink_cursor()));
+ connect( &wait_timer, SIGNAL(timeout()), SLOT(wait_timeout()));
+ setInputMethodEnabled(true);
}//}}}
-void VimWidget::execNormal(QString command)//{{{
+ void
+VimWidget::execNormal(QString command)//{{{
{
QString cmd("execute 'normal ");
- cmd+=command;
- cmd+="'";
+ cmd += command;
+ cmd += "'";
QCString unistring = vmw->codec->fromUnicode(cmd);
do_cmdline_cmd((char_u *)(const char*)unistring);
gui_update_screen();
}//}}}
-void VimWidget::execInsert(QString command)//{{{
+ void
+VimWidget::execInsert(QString command)//{{{
{
QString cmd("execute 'normal i");
- cmd+=command;
- cmd+="'";
+ cmd += command;
+ cmd += "'";
QCString unistring = vmw->codec->fromUnicode(cmd);
do_cmdline_cmd((char_u *)(const char*)unistring);
gui_update_screen();
}//}}}
-void VimWidget::execRaw(QString command)//{{{
+ void
+VimWidget::execRaw(QString command)//{{{
{
QString cmd("execute '");
- cmd+=command;
- cmd+="'";
+ cmd += command;
+ cmd += "'";
QCString unistring = vmw->codec->fromUnicode(cmd);
do_cmdline_cmd((char_u *)(const char*)unistring);
gui_update_screen();
}//}}}
-void VimWidget::execCmd(QString command)//{{{
+ void
+VimWidget::execCmd(QString command)//{{{
{
QCString unistring = vmw->codec->fromUnicode(command);
do_cmdline_cmd((char_u *)(const char*)unistring);
gui_update_screen();
}//}}}
-QString VimWidget::eval(QString expr)//{{{
+ QString
+VimWidget::eval(QString expr)//{{{
{
#ifdef FEAT_EVAL
QCString unistring = vmw->codec->fromUnicode(expr);
- QString val((const char *)eval_to_string((char_u *)(const char*)unistring,NULL));
+ QString val((const char *)eval_to_string(
+ (char_u *)(const char*)unistring, NULL));
return val;
#else
return QString::null;
#endif
}//}}}
-void VimWidget::wait(long wtime)//{{{
+ void
+VimWidget::wait(long wtime)//{{{
{
- if ( wait_timer.isActive() ) wait_timer.stop();
+ if (wait_timer.isActive())
+ wait_timer.stop();
wait_done = false;
wait_timer.start( wtime, true);
}//}}}
-void VimWidget::wait_timeout() //{{{
+ void
+VimWidget::wait_timeout() //{{{
{
wait_done = true;
}//}}}
-void VimWidget::dragEnterEvent (QDragEnterEvent *e)//{{{
+ void
+VimWidget::dragEnterEvent (QDragEnterEvent *e)//{{{
{
#if (defined(FEAT_WINDOWS) && defined(HAVE_DROP_FILE)) || defined(PROTO)
e->accept(QUriDrag::canDecode(e));
@@ -435,10 +468,11 @@ void VimWidget::dragEnterEvent (QDragEnterEvent *e)//{{{
#endif
}//}}}
-void VimWidget::dropEvent (QDropEvent *e) // {{{
+ void
+VimWidget::dropEvent(QDropEvent *e) // {{{
{
#if (defined(FEAT_WINDOWS) && defined(HAVE_DROP_FILE)) || defined(PROTO)
- QStrList urls;
+ QStrList urls;
char_u **fnames;
int redo_dirs = FALSE;
@@ -452,19 +486,19 @@ void VimWidget::dropEvent (QDropEvent *e) // {{{
if (QUriDrag::decode(e, urls))
{
n = urls.count();
- fnames = (char_u **)lalloc((n+1) * sizeof(char_u *), TRUE);
+ fnames = (char_u **)lalloc((n+1) * sizeof(char_u *), TRUE);
nfiles = 0;
#if QT_VERSION>=300
QPtrListIterator<char> it(urls);
- for (; it.current(); ++it )
+ for (; it.current(); ++it)
{
KURL u(*it);
#else
- for (i=0;i<urls.count();++i)
+ for (i = 0; i < urls.count(); ++i)
{
KURL u(urls.at(i));
#endif
- if ( !u.isLocalFile() )
+ if (!u.isLocalFile())
url = TRUE;
else
{
@@ -511,6 +545,7 @@ void VimWidget::dropEvent (QDropEvent *e) // {{{
{
char_u dirname[MAXPATHL];
char_u *s;
+
if (mch_dirname(dirname, MAXPATHL) == OK)
for (i = 0; i < nfiles; ++i)
if (fnames[i] != NULL)
@@ -544,27 +579,35 @@ void VimWidget::dropEvent (QDropEvent *e) // {{{
#endif
} // }}}
-void VimWidget::keyPressEvent( QKeyEvent *e ) // {{{
+ void
+VimWidget::keyPressEvent(QKeyEvent *e) // {{{
{
gui_keypress(e);
} // }}}
-void gui_keypress(QKeyEvent *e) { // {{{
- int key = (int)e->key();
- int modifiers = 0,i;
- uchar string[256],string2[256];
- uchar *s,*d;
+ void
+gui_keypress(QKeyEvent *e) // {{{
+{
+ int key = (int)e->key();
+ int modifiers = 0, i;
+ uchar string[256], string2[256];
+ uchar *s, *d;
Qt::ButtonState state = e->state();
QCString unistring = vmw->codec->fromUnicode(e->text());
- if (unistring.length()>0)
- strncpy((char*)string, (const char*)unistring,unistring.length());
+ if (unistring.length() > 0)
+ strncpy((char*)string, (const char*)unistring, unistring.length());
string[unistring.length()] = 0;
- int len=unistring.length();
+ int len = unistring.length();
// ignore certain keys
- if (key == Qt::Key_Shift || key == Qt::Key_Alt || key == Qt::Key_Control || key == Qt::Key_Meta
- || key == Qt::Key_CapsLock || key == Qt::Key_NumLock || key == Qt::Key_ScrollLock )
+ if (key == Qt::Key_Shift
+ || key == Qt::Key_Alt
+ || key == Qt::Key_Control
+ || key == Qt::Key_Meta
+ || key == Qt::Key_CapsLock
+ || key == Qt::Key_NumLock
+ || key == Qt::Key_ScrollLock)
{
e->ignore();
return;
@@ -595,12 +638,11 @@ void gui_keypress(QKeyEvent *e) { // {{{
// change shift-tab (backtab) into S_TAB
- if ( key == Qt::Key_BackTab && state & Qt::ShiftButton)
+ if (key == Qt::Key_BackTab && state & Qt::ShiftButton)
key = Qt::Key_Tab;
// Change C-@ and C-2 in NUL ? Gtk does this
- if ( (key == Qt::Key_2 || key == Qt::Key_At)
- && state & Qt::ControlButton )
+ if ((key == Qt::Key_2 || key == Qt::Key_At) && state & Qt::ControlButton)
{
string[0] = NUL;
len = 1;
@@ -642,13 +684,14 @@ void gui_keypress(QKeyEvent *e) { // {{{
/* Check for special keys, making sure BS and DEL are recognised. */
if (len == 0 || key == Qt::Key_BackSpace || key == Qt::Key_Delete)
{
- while (special_keys[i].qtkey != 0 && special_keys[i].qtkey != key ) i++;
+ while (special_keys[i].qtkey != 0 && special_keys[i].qtkey != key)
+ i++;
if (special_keys[i].qtkey != 0)
{
- string[0] = CSI;
- string[1] = special_keys[i].code0;
- string[2] = special_keys[i].code1;
- len = -3;
+ string[0] = CSI;
+ string[1] = special_keys[i].code0;
+ string[2] = special_keys[i].code1;
+ len = -3;
}
/*
for (i = 0; special_keys[i].qtkey != 0 ; i++)
@@ -674,15 +717,20 @@ void gui_keypress(QKeyEvent *e) { // {{{
/* Special keys (and a few others) may have modifiers */
- if (len == -3 || key == Qt::Key_Space || key == Qt::Key_Tab ||
- key == Qt::Key_Return || key == Qt::Key_Enter ||
- key == Qt::Key_Escape)
+ if (len == -3
+ || key == Qt::Key_Space
+ || key == Qt::Key_Tab
+ || key == Qt::Key_Return
+ || key == Qt::Key_Enter
+ || key == Qt::Key_Escape)
{
-
modifiers = 0;
- if (state & Qt::ShiftButton) modifiers |= MOD_MASK_SHIFT;
- if (state & Qt::ControlButton) modifiers |= MOD_MASK_CTRL;
- if (state & Qt::AltButton) modifiers |= MOD_MASK_ALT;
+ if (state & Qt::ShiftButton)
+ modifiers |= MOD_MASK_SHIFT;
+ if (state & Qt::ControlButton)
+ modifiers |= MOD_MASK_CTRL;
+ if (state & Qt::AltButton)
+ modifiers |= MOD_MASK_ALT;
/*
* For some keys a shift modifier is translated into another key
@@ -695,7 +743,8 @@ void gui_keypress(QKeyEvent *e) { // {{{
key = string[0];
key = simplify_key(key, &modifiers);
- if (key == CSI) key=K_CSI;
+ if (key == CSI)
+ key = K_CSI;
if (IS_SPECIAL(key))
{
@@ -710,8 +759,7 @@ void gui_keypress(QKeyEvent *e) { // {{{
len = 1;
}
-
- if (modifiers!=0)
+ if (modifiers != 0)
{
uchar string2[10];
string2[0] = CSI;
@@ -723,7 +771,7 @@ void gui_keypress(QKeyEvent *e) { // {{{
} /* special keys */
if (len == 1 && ((string[0] == Ctrl_C && ctrl_c_interrupts)
- || (string[0] == intr_char && intr_char != Ctrl_C)))
+ || (string[0] == intr_char && intr_char != Ctrl_C)))
{
trash_input_buf();
got_int = TRUE;
@@ -748,13 +796,15 @@ void gui_keypress(QKeyEvent *e) { // {{{
QByteArray params;
QDataStream stream(params, IO_WriteOnly);
stream << kapp->dcopClient()->appId() << unistring << gui.row << gui.col;
- kapp->dcopClient()->emitDCOPSignal("keyboardEvent(QCString, QCString,int,int)", params);
+ kapp->dcopClient()->emitDCOPSignal(
+ "keyboardEvent(QCString, QCString, int, int)", params);
#endif
e->ignore();
} // }}}
#ifdef FEAT_CLIENTSERVER
-void VimWidget::serverActivate(WId id) //{{{
+ void
+VimWidget::serverActivate(WId id) //{{{
{
if (serverName == NULL && serverDelayedStartName != NULL)
{
@@ -767,53 +817,175 @@ void VimWidget::serverActivate(WId id) //{{{
#endif
#ifdef FEAT_XIM
-void VimWidget::imStartEvent(QIMEvent *e)
+
+static int preedit_buf_len = 0;
+static int im_preedit_cursor = 0;
+static int im_preedit_trailing = 0;
+
+ static void
+im_delete_preedit(void)
{
+ char_u bskey[] = {CSI, 'k', 'b'};
+ char_u delkey[] = {CSI, 'k', 'D'};
+
+ if (State & NORMAL)
+ {
+ im_preedit_cursor = 0;
+ return;
+ }
+ for (; im_preedit_cursor > 0; --im_preedit_cursor)
+ add_to_input_buf(bskey, (int)sizeof(bskey));
+
+ for (; im_preedit_trailing > 0; --im_preedit_trailing)
+ add_to_input_buf(delkey, (int)sizeof(delkey));
+}
+
+ void
+im_set_position(int row, int col)
+{
+ vmw->w->setMicroFocusHint(
+ TEXT_X(gui.col),
+ TEXT_Y(gui.row), 0, 0, TRUE, &vmw->w->font());
+}
+
+ int
+im_is_preediting()
+{
+ return (preedit_start_col != MAXCOL);
+}
+
+ int
+im_get_feedback_attr(int col)
+{
+ if (draw_feedback != NULL && col < preedit_buf_len)
+ {
+ if (draw_feedback[col] & XIMReverse)
+ return HL_INVERSE;
+ else if (draw_feedback[col] & XIMUnderline)
+ return HL_UNDERLINE;
+ else
+ return hl_attr(HLF_V);
+ }
+
+ return -1;
+}
+
+ void
+VimWidget::imStartEvent(QIMEvent *e)
+{
+ if (State & CMDLINE)
+ preedit_start_col = cmdline_getvcol_cursor();
+ else if (curwin != NULL)
+ getvcol(curwin, &curwin->w_cursor, &preedit_start_col, NULL, NULL);
+ xic = (XIC)!NULL;
e->accept();
}
-void VimWidget::imEndEvent(QIMEvent *e)
+ void
+VimWidget::imEndEvent(QIMEvent *e)
{
uchar string[256];
+ im_delete_preedit();
+
QCString unistring = vmw->codec->fromUnicode(e->text());
- if (unistring.length()>0)
- strncpy((char*)string, (const char*)unistring,unistring.length());
+ if (unistring.length() > 0)
+ strncpy((char*)string, (const char*)unistring, unistring.length());
string[unistring.length()] = 0;
- int len=unistring.length();
-
- add_to_input_buf(string, len);
+ int len = unistring.length();
+
+ add_to_input_buf_csi(string, len);
+ im_preedit_cursor = 0;
+ im_preedit_trailing = 0;
+ preedit_start_col = MAXCOL;
+ preedit_buf_len = 0;
+ if (draw_feedback)
+ {
+ free(draw_feedback);
+ draw_feedback = NULL;
+ }
+ xic = 0;
e->accept();
}
-void VimWidget::imComposeEvent(QIMEvent *e)
+ void
+VimWidget::imComposeEvent(QIMEvent *e)
{
- //i should do something here, displaying the text somewhere ... (status area ?)
+ uchar string[256];
+ char_u backkey[] = {CSI, 'k', 'l'};
+
+ im_delete_preedit();
+
+ if (State & NORMAL)
+ {
+ im_preedit_cursor = 0;
+ return;
+ }
+
+ QCString unistring = vmw->codec->fromUnicode(e->text());
+ if (unistring.length() > 0)
+ strncpy((char*)string, (const char*)unistring,unistring.length());
+ string[unistring.length()] = 0;
+ int len = unistring.length();
+ add_to_input_buf_csi(string, len);
+
+ preedit_buf_len = e->text().length();
+ if (draw_feedback == NULL)
+ draw_feedback = (char *)alloc(preedit_buf_len);
+ else
+ draw_feedback = (char *)realloc(draw_feedback, preedit_buf_len);
+ preedit_end_col = preedit_start_col;
+
+ char_u *p = string;
+ for (int n = 0; n < preedit_buf_len; n++)
+ {
+ if (n < e->cursorPos() || n >= e->cursorPos() + e->selectionLength())
+ draw_feedback[n] = XIMUnderline;
+ else
+ draw_feedback[n] = XIMReverse;
+ preedit_end_col += (*mb_ptr2cells)(p);
+ p += (*mb_ptr2len_check)(p);
+ }
+ im_preedit_cursor = e->cursorPos();
+ im_preedit_trailing = preedit_buf_len - im_preedit_cursor;
+
+# ifdef FEAT_RIGHTLEFT
+ if ((State & CMDLINE) == 0 && curwin != NULL && curwin->w_p_rl)
+ backkey[2] = 'r';
+# endif
+ for (int n = 0; n < im_preedit_trailing; n++)
+ add_to_input_buf(backkey, (int)sizeof(backkey));
+
e->accept();
}
#endif
-void VimMainWindow::lock()
+ void
+VimMainWindow::lock()
{
- locked=true;
+ locked = true;
}
-void VimMainWindow::unlock()
+ void
+VimMainWindow::unlock()
{
- locked=false;
+ locked = false;
}
-bool VimMainWindow::isLocked()
+ bool
+VimMainWindow::isLocked()
{
return locked;
}
// ->resize VimWidget if not locked
//
-void VimMainWindow::resizeEvent ( QResizeEvent *e ) //{{{
+ void
+VimMainWindow::resizeEvent(QResizeEvent *e) //{{{
{
- if ( vmw->isLocked() ) return;
+ if (vmw->isLocked())
+ return;
//remove toolbar and menubar height
int height = e->size().height();
int width = e->size().width();
@@ -825,21 +997,23 @@ void VimMainWindow::resizeEvent ( QResizeEvent *e ) //{{{
)
height -= vmw->menuBar()->height();
#ifdef FEAT_TOOLBAR
- if (vmw->toolBar()->isVisible() && vmw->toolBar()->isEnabled() &&
- (vmw->toolBar()->barPos()==KToolBar::Top ||
- vmw->toolBar()->barPos()==KToolBar::Bottom))
+ if (vmw->toolBar()->isVisible() && vmw->toolBar()->isEnabled()
+ && (vmw->toolBar()->barPos() == KToolBar::Top
+ || vmw->toolBar()->barPos() == KToolBar::Bottom))
height -= vmw->toolBar()->height();
- if (vmw->toolBar()->isVisible() && vmw->toolBar()->isEnabled() &&
- (vmw->toolBar()->barPos()==KToolBar::Left ||
- vmw->toolBar()->barPos()==KToolBar::Right))
+ if (vmw->toolBar()->isVisible() && vmw->toolBar()->isEnabled()
+ && (vmw->toolBar()->barPos() == KToolBar::Left
+ || vmw->toolBar()->barPos() == KToolBar::Right))
width -= vmw->toolBar()->width();
#endif
- height = ( ((int)(height/gui.char_height))*gui.char_height );
- if (!vmw->isLocked()) gui_resize_shell(width,height);
+ height = ((int)(height/gui.char_height))*gui.char_height;
+ if (!vmw->isLocked())
+ gui_resize_shell(width, height);
}//}}}
-void VimWidget::focusInEvent( QFocusEvent * fe ) // {{{
+ void
+VimWidget::focusInEvent(QFocusEvent *fe) // {{{
{
gui_focus_change(true);
@@ -847,7 +1021,8 @@ void VimWidget::focusInEvent( QFocusEvent * fe ) // {{{
gui_mch_start_blink();
} // }}}
-void VimWidget::focusOutEvent( QFocusEvent * fe )//{{{
+ void
+VimWidget::focusOutEvent(QFocusEvent *fe)//{{{
{
gui_focus_change(false);
@@ -855,16 +1030,19 @@ void VimWidget::focusOutEvent( QFocusEvent * fe )//{{{
gui_mch_stop_blink();
}//}}}
-void VimWidget::set_blink_time( long wait, long on, long off)//{{{
+ void
+VimWidget::set_blink_time(long wait, long on, long off)//{{{
{
blink_wait_time = wait;
blink_on_time = on;
blink_off_time = off;
}//}}}
-void VimWidget::start_cursor_blinking()//{{{
+ void
+VimWidget::start_cursor_blinking()//{{{
{
- if (blink_timer.isActive()) blink_timer.stop();
+ if (blink_timer.isActive())
+ blink_timer.stop();
/* Only switch blinking on if none of the times is zero */
if (blink_wait_time && blink_on_time && blink_off_time && gui.in_focus)
@@ -876,7 +1054,8 @@ void VimWidget::start_cursor_blinking()//{{{
}
}//}}}
-void VimWidget::blink_cursor()//{{{
+ void
+VimWidget::blink_cursor()//{{{
{
if (blink_state == BLINK_ON)
{
@@ -894,9 +1073,11 @@ void VimWidget::blink_cursor()//{{{
}
}//}}}
-void VimWidget::stop_cursor_blinking()//{{{
+ void
+VimWidget::stop_cursor_blinking()//{{{
{
- if (blink_timer.isActive()) blink_timer.stop();
+ if (blink_timer.isActive())
+ blink_timer.stop();
if (blink_state == BLINK_OFF)
gui_update_cursor(TRUE, FALSE);
@@ -905,33 +1086,37 @@ void VimWidget::stop_cursor_blinking()//{{{
}//}}}
#ifdef FEAT_MZSCHEME
-void VimWidget::timerEvent( QTimerEvent * evnt)//{{{
+ void
+VimWidget::timerEvent(QTimerEvent * evnt)//{{{
{
if (evnt->timerId() == mzscheme_timer_id)
timer_proc();
}//}}}
-void VimWidget::enable_mzscheme_threads()//{{{
+ void
+VimWidget::enable_mzscheme_threads()//{{{
{
mzscheme_timer_id = startTimer(p_mzq);
}//}}}
-void VimWidget::disable_mzscheme_threads()//{{{
+ void
+VimWidget::disable_mzscheme_threads()//{{{
{
killTimer(mzscheme_timer_id);
}//}}}
#endif
-void VimWidget::flash()//{{{
+ void
+VimWidget::flash()//{{{
{
QPainter p(this);
p.setRasterOp(Qt::XorROP);
- p.fillRect(geometry(),QColor(0xFF,0xFF,0xFF));
+ p.fillRect(geometry(), QColor(0xFF, 0xFF, 0xFF));
p.flush();
//FIXME: Make this a little smarter. Maybe add a timer or something
usleep(19000);
- p.fillRect(geometry(),QColor(0xFF,0xFF,0xFF));
+ p.fillRect(geometry(), QColor(0xFF, 0xFF, 0xFF));
p.flush();
p.end();
}//}}}
@@ -940,13 +1125,13 @@ void VimWidget::flash()//{{{
/*
* The main Window
*/
- VimMainWindow::VimMainWindow ( const char *name , WFlags f)//{{{
-:KMainWindow(0L, name,f)
+VimMainWindow::VimMainWindow(const char *name , WFlags f)//{{{
+ :KMainWindow(0L, name, f)
{
#ifdef FEAT_CLIENTSERVER
- oldFilter = qt_set_x11_event_filter( kvim_x11_event_filter );
+ oldFilter = qt_set_x11_event_filter(kvim_x11_event_filter);
#endif
- if (echo_wid_arg== 1)
+ if (echo_wid_arg == 1)
{
fprintf(stderr, "WID: %ld\n", (long)winId());
fflush(stderr);
@@ -956,14 +1141,15 @@ void VimWidget::flash()//{{{
gui.w = w;
setFocusProxy(w);
w->setFocus();
- have_tearoff=0;
+ have_tearoff = 0;
- finddlg=new KEdFind (this,0,false);
- repldlg=new KEdReplace (this,0,false);
- QObject::connect( finddlg, SIGNAL(search()), this, SLOT(slotSearch()) );
- QObject::connect( repldlg, SIGNAL(find()), this, SLOT(slotFind()) );
- QObject::connect( repldlg, SIGNAL(replace()), this, SLOT(slotReplace()) );
- QObject::connect( repldlg, SIGNAL(replaceAll()), this, SLOT(slotReplaceAll()) );
+ finddlg = new KEdFind(this, 0, false);
+ repldlg = new KEdReplace(this, 0, false);
+ QObject::connect(finddlg, SIGNAL(search()), this, SLOT(slotSearch()));
+ QObject::connect(repldlg, SIGNAL(find()), this, SLOT(slotFind()));
+ QObject::connect(repldlg, SIGNAL(replace()), this, SLOT(slotReplace()));
+ QObject::connect(repldlg, SIGNAL(replaceAll()), this,
+ SLOT(slotReplaceAll()));
#ifdef FEAT_TOOLBAR
connect(toolBar(), SIGNAL(clicked(int)), this, SLOT(menu_activated(int)));
@@ -971,51 +1157,59 @@ void VimWidget::flash()//{{{
#ifdef FEAT_CLIENTSERVER
w->serverActivate(winId());
- if (serverName!=NULL)
- kapp->dcopClient()->registerAs(QCString((const char*)serverName),false);
- else if (serverDelayedStartName!=NULL)
- kapp->dcopClient()->registerAs(QCString((const char*)serverDelayedStartName),false);
- else if (argServerName!=NULL)
- kapp->dcopClient()->registerAs(argServerName->utf8(),false);
+ if (serverName != NULL)
+ kapp->dcopClient()->registerAs(QCString((const char*)serverName),
+ false);
+ else if (serverDelayedStartName != NULL)
+ kapp->dcopClient()->registerAs(
+ QCString((const char*)serverDelayedStartName), false);
+ else if (argServerName != NULL)
+ kapp->dcopClient()->registerAs(argServerName->utf8(), false);
#else
- if (argServerName!=NULL)
- kapp->dcopClient()->registerAs(argServerName->utf8(),false);
+ if (argServerName !=