Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
adam.huang
htop
Commits
b0036369
Commit
b0036369
authored
Aug 19, 2015
by
Hisham Muhammad
Browse files
Support for NCurses 6.0 and mouse wheel
parent
3e93f9b8
Changes
5
Hide whitespace changes
Inline
Side-by-side
CRT.c
View file @
b0036369
...
...
@@ -29,6 +29,9 @@ in the source distribution for its full text.
#define Cyan COLOR_CYAN
#define White COLOR_WHITE
#define KEY_WHEELUP KEY_F(20)
#define KEY_WHEELDOWN KEY_F(21)
//#link curses
/*{
...
...
@@ -515,6 +518,8 @@ int CRT_cursorX = 0;
int
CRT_scrollHAmount
=
5
;
int
CRT_scrollWheelVAmount
=
10
;
char
*
CRT_termType
;
// TODO move color scheme to Settings, perhaps?
...
...
@@ -550,6 +555,7 @@ void CRT_init(int delay, int colorScheme) {
nonl
();
intrflush
(
stdscr
,
false
);
keypad
(
stdscr
,
true
);
mouseinterval
(
0
);
curs_set
(
0
);
if
(
has_colors
())
{
start_color
();
...
...
@@ -598,7 +604,11 @@ void CRT_init(int delay, int colorScheme) {
CRT_treeStr
=
CRT_utf8
?
CRT_treeStrUtf8
:
CRT_treeStrAscii
;
mousemask
(
BUTTON1_CLICKED
,
NULL
);
#if NCURSES_MOUSE_VERSION > 1
mousemask
(
BUTTON1_RELEASED
|
BUTTON4_PRESSED
|
BUTTON5_PRESSED
,
NULL
);
#else
mousemask
(
BUTTON1_RELEASED
,
NULL
);
#endif
}
void
CRT_done
()
{
...
...
CRT.h
View file @
b0036369
...
...
@@ -20,6 +20,9 @@ in the source distribution for its full text.
#define Cyan COLOR_CYAN
#define White COLOR_WHITE
#define KEY_WHEELUP KEY_F(20)
#define KEY_WHEELDOWN KEY_F(21)
//#link curses
#include <stdbool.h>
...
...
@@ -130,6 +133,8 @@ extern int CRT_cursorX;
extern
int
CRT_scrollHAmount
;
extern
int
CRT_scrollWheelVAmount
;
char
*
CRT_termType
;
// TODO move color scheme to Settings, perhaps?
...
...
Panel.c
View file @
b0036369
...
...
@@ -412,6 +412,21 @@ bool Panel_onKey(Panel* this, int key) {
this
->
scrollV
+=
(
this
->
h
-
1
);
this
->
needsRedraw
=
true
;
break
;
case
KEY_WHEELUP
:
this
->
selected
-=
CRT_scrollWheelVAmount
;
this
->
scrollV
-=
CRT_scrollWheelVAmount
;
this
->
needsRedraw
=
true
;
break
;
case
KEY_WHEELDOWN
:
{
this
->
selected
+=
CRT_scrollWheelVAmount
;
this
->
scrollV
+=
CRT_scrollWheelVAmount
;
if
(
this
->
scrollV
>
Vector_size
(
this
->
items
)
-
this
->
h
)
{
this
->
scrollV
=
Vector_size
(
this
->
items
)
-
this
->
h
;
}
this
->
needsRedraw
=
true
;
break
;
}
case
KEY_HOME
:
this
->
selected
=
0
;
break
;
...
...
ScreenManager.c
View file @
b0036369
...
...
@@ -9,6 +9,7 @@ in the source distribution for its full text.
#include "ProcessList.h"
#include "Object.h"
#include "CRT.h"
#include <assert.h>
#include <time.h>
...
...
@@ -196,26 +197,34 @@ void ScreenManager_run(ScreenManager* this, Panel** lastFocus, int* lastKey) {
MEVENT
mevent
;
int
ok
=
getmouse
(
&
mevent
);
if
(
ok
==
OK
)
{
if
(
mevent
.
y
==
LINES
-
1
)
{
ch
=
FunctionBar_synthesizeEvent
(
panelFocus
->
currentBar
,
mevent
.
x
);
}
else
{
for
(
int
i
=
0
;
i
<
this
->
panelCount
;
i
++
)
{
Panel
*
panel
=
(
Panel
*
)
Vector_get
(
this
->
panels
,
i
);
if
(
mevent
.
x
>=
panel
->
x
&&
mevent
.
x
<=
panel
->
x
+
panel
->
w
)
{
if
(
mevent
.
y
==
panel
->
y
)
{
ch
=
EVENT_HEADER_CLICK
(
mevent
.
x
-
panel
->
x
);
break
;
}
else
if
(
mevent
.
y
>
panel
->
y
&&
mevent
.
y
<=
panel
->
y
+
panel
->
h
)
{
if
(
panel
==
panelFocus
||
this
->
allowFocusChange
)
{
focus
=
i
;
panelFocus
=
setCurrentPanel
(
panel
);
Panel_setSelected
(
panel
,
mevent
.
y
-
panel
->
y
+
panel
->
scrollV
-
1
);
if
(
mevent
.
bstate
&
BUTTON1_RELEASED
)
{
if
(
mevent
.
y
==
LINES
-
1
)
{
ch
=
FunctionBar_synthesizeEvent
(
panelFocus
->
currentBar
,
mevent
.
x
);
}
else
{
for
(
int
i
=
0
;
i
<
this
->
panelCount
;
i
++
)
{
Panel
*
panel
=
(
Panel
*
)
Vector_get
(
this
->
panels
,
i
);
if
(
mevent
.
x
>=
panel
->
x
&&
mevent
.
x
<=
panel
->
x
+
panel
->
w
)
{
if
(
mevent
.
y
==
panel
->
y
)
{
ch
=
EVENT_HEADER_CLICK
(
mevent
.
x
-
panel
->
x
);
break
;
}
else
if
(
mevent
.
y
>
panel
->
y
&&
mevent
.
y
<=
panel
->
y
+
panel
->
h
)
{
if
(
panel
==
panelFocus
||
this
->
allowFocusChange
)
{
focus
=
i
;
panelFocus
=
setCurrentPanel
(
panel
);
Panel_setSelected
(
panel
,
mevent
.
y
-
panel
->
y
+
panel
->
scrollV
-
1
);
}
ch
=
KEY_MOUSE
;
break
;
}
ch
=
KEY_MOUSE
;
break
;
}
}
}
#if NCURSES_MOUSE_VERSION > 1
}
else
if
(
mevent
.
bstate
&
BUTTON4_PRESSED
)
{
ch
=
KEY_WHEELUP
;
}
else
if
(
mevent
.
bstate
&
BUTTON5_PRESSED
)
{
ch
=
KEY_WHEELDOWN
;
#endif
}
}
}
...
...
configure.ac
View file @
b0036369
...
...
@@ -143,9 +143,11 @@ fi
AC_ARG_ENABLE(unicode, [AC_HELP_STRING([--enable-unicode], [enable Unicode support])], ,enable_unicode="yes")
if test "x$enable_unicode" = xyes; then
AC_CHECK_LIB([ncursesw], [refresh], [], [
missing_libraries="$missing_libraries libncursesw"
AC_MSG_ERROR([You may want to use --disable-unicode or install libncursesw.])
AC_CHECK_LIB([ncursesw6], [refresh], [], [
AC_CHECK_LIB([ncursesw], [refresh], [], [
missing_libraries="$missing_libraries libncursesw"
AC_MSG_ERROR([You may want to use --disable-unicode or install libncursesw.])
])
])
AC_CHECK_HEADERS([ncursesw/curses.h],[:],
[AC_CHECK_HEADERS([ncurses/ncurses.h],[:],
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment