Process focus events
Should help prevent accidents in other windows.
This commit is contained in:
2
LICENSE
2
LICENSE
@@ -1,4 +1,4 @@
|
|||||||
Copyright (c) 2016 - 2020, Přemysl Eric Janouch <p@janouch.name>
|
Copyright (c) 2016 - 2021, Přemysl Eric Janouch <p@janouch.name>
|
||||||
|
|
||||||
Permission to use, copy, modify, and/or distribute this software for any
|
Permission to use, copy, modify, and/or distribute this software for any
|
||||||
purpose with or without fee is hereby granted.
|
purpose with or without fee is hereby granted.
|
||||||
|
|||||||
6
NEWS
6
NEWS
@@ -1,3 +1,9 @@
|
|||||||
|
1.1.0 (20xx-xx-xx)
|
||||||
|
|
||||||
|
* Now requesting and processing terminal de/focus events,
|
||||||
|
using a new "defocused" attribute for selected rows
|
||||||
|
|
||||||
|
|
||||||
1.0.0 (2020-11-05)
|
1.0.0 (2020-11-05)
|
||||||
|
|
||||||
* Coming with a real manual page instead of a help2man-generated stub
|
* Coming with a real manual page instead of a help2man-generated stub
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ colors = {
|
|||||||
|
|
||||||
selection = "231 202"
|
selection = "231 202"
|
||||||
multiselect = "231 88"
|
multiselect = "231 88"
|
||||||
|
defocused = "231 250"
|
||||||
directory = "16 231 bold"
|
directory = "16 231 bold"
|
||||||
|
|
||||||
incoming = "28"
|
incoming = "28"
|
||||||
|
|||||||
20
nncmpp.c
20
nncmpp.c
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* nncmpp -- the MPD client you never knew you needed
|
* nncmpp -- the MPD client you never knew you needed
|
||||||
*
|
*
|
||||||
* Copyright (c) 2016 - 2020, Přemysl Eric Janouch <p@janouch.name>
|
* Copyright (c) 2016 - 2021, Přemysl Eric Janouch <p@janouch.name>
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and/or distribute this software for any
|
* Permission to use, copy, modify, and/or distribute this software for any
|
||||||
* purpose with or without fee is hereby granted.
|
* purpose with or without fee is hereby granted.
|
||||||
@@ -39,6 +39,8 @@
|
|||||||
* Can't use A_REVERSE because bold'd be bright.
|
* Can't use A_REVERSE because bold'd be bright.
|
||||||
* Unfortunately ran out of B&W attributes. */ \
|
* Unfortunately ran out of B&W attributes. */ \
|
||||||
XX( MULTISELECT, multiselect, -1, 6, 0 ) \
|
XX( MULTISELECT, multiselect, -1, 6, 0 ) \
|
||||||
|
/* This ought to be indicative enough. */ \
|
||||||
|
XX( DEFOCUSED, defocused, -1, -1, A_UNDERLINE ) \
|
||||||
XX( SCROLLBAR, scrollbar, -1, -1, 0 ) \
|
XX( SCROLLBAR, scrollbar, -1, -1, 0 ) \
|
||||||
/* These are for debugging only */ \
|
/* These are for debugging only */ \
|
||||||
XX( WARNING, warning, 3, -1, 0 ) \
|
XX( WARNING, warning, 3, -1, 0 ) \
|
||||||
@@ -682,6 +684,7 @@ static struct app_context
|
|||||||
struct poller_timer tk_timer; ///< termo timeout timer
|
struct poller_timer tk_timer; ///< termo timeout timer
|
||||||
bool locale_is_utf8; ///< The locale is Unicode
|
bool locale_is_utf8; ///< The locale is Unicode
|
||||||
bool use_partial_boxes; ///< Use Unicode box drawing chars
|
bool use_partial_boxes; ///< Use Unicode box drawing chars
|
||||||
|
bool focused; ///< Whether the terminal has focus
|
||||||
|
|
||||||
struct attrs attrs[ATTRIBUTE_COUNT];
|
struct attrs attrs[ATTRIBUTE_COUNT];
|
||||||
}
|
}
|
||||||
@@ -910,6 +913,9 @@ app_init_context (void)
|
|||||||
// TODO: make this configurable
|
// TODO: make this configurable
|
||||||
g.use_partial_boxes = g.locale_is_utf8;
|
g.use_partial_boxes = g.locale_is_utf8;
|
||||||
|
|
||||||
|
// Presumably, although not necessarily; unsure if queryable at all
|
||||||
|
g.focused = true;
|
||||||
|
|
||||||
app_init_attributes ();
|
app_init_attributes ();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1338,11 +1344,13 @@ app_draw_view (void)
|
|||||||
|
|
||||||
bool override_colors = true;
|
bool override_colors = true;
|
||||||
if (item_index == tab->item_selected)
|
if (item_index == tab->item_selected)
|
||||||
row_attrs = APP_ATTR (SELECTION);
|
row_attrs = g.focused
|
||||||
|
? APP_ATTR (SELECTION) : APP_ATTR (DEFOCUSED);
|
||||||
else if (tab->item_mark > -1 &&
|
else if (tab->item_mark > -1 &&
|
||||||
((item_index >= tab->item_mark && item_index <= tab->item_selected)
|
((item_index >= tab->item_mark && item_index <= tab->item_selected)
|
||||||
|| (item_index >= tab->item_selected && item_index <= tab->item_mark)))
|
|| (item_index >= tab->item_selected && item_index <= tab->item_mark)))
|
||||||
row_attrs = APP_ATTR (MULTISELECT);
|
row_attrs = g.focused
|
||||||
|
? APP_ATTR (MULTISELECT) : APP_ATTR (DEFOCUSED);
|
||||||
else
|
else
|
||||||
override_colors = false;
|
override_colors = false;
|
||||||
|
|
||||||
@@ -2223,6 +2231,12 @@ app_init_bindings (const char *keymap,
|
|||||||
static bool
|
static bool
|
||||||
app_process_termo_event (termo_key_t *event)
|
app_process_termo_event (termo_key_t *event)
|
||||||
{
|
{
|
||||||
|
if (event->type == TERMO_TYPE_FOCUS)
|
||||||
|
{
|
||||||
|
g.focused = !!event->code.focused;
|
||||||
|
app_invalidate ();
|
||||||
|
}
|
||||||
|
|
||||||
struct binding dummy = { *event, 0, 0 }, *binding;
|
struct binding dummy = { *event, 0, 0 }, *binding;
|
||||||
if (g.editor.line)
|
if (g.editor.line)
|
||||||
{
|
{
|
||||||
|
|||||||
2
termo
2
termo
Submodule termo updated: f7912a8ce7...94a77a10d8
Reference in New Issue
Block a user