summaryrefslogtreecommitdiffstats
path: root/MetersPanel.c
diff options
context:
space:
mode:
authorHisham Muhammad <hisham@gobolinux.org>2015-03-16 23:01:21 -0300
committerHisham Muhammad <hisham@gobolinux.org>2015-03-16 23:01:21 -0300
commit9ff5d2b243472ae73d10dafdd7c0e24dc5052f6d (patch)
tree87c7999202ec8bb4f57ad6e5a056738c731f73cd /MetersPanel.c
parent14a177800bfa41bc2b3bb07d45204cbe464cf1b3 (diff)
Fix saving of header states, motion in Setup screen.
Diffstat (limited to 'MetersPanel.c')
-rw-r--r--MetersPanel.c22
1 files changed, 15 insertions, 7 deletions
diff --git a/MetersPanel.c b/MetersPanel.c
index 5eaf4d92..a4fe7c44 100644
--- a/MetersPanel.c
+++ b/MetersPanel.c
@@ -40,16 +40,17 @@ static void MetersPanel_delete(Object* object) {
static inline bool moveToNeighbor(MetersPanel* this, MetersPanel* neighbor, int selected) {
Panel* super = (Panel*) this;
if (this->moving) {
- this->moving = false;
- ((ListItem*)Panel_getSelected(super))->moving = false;
if (neighbor) {
if (selected < Vector_size(this->meters)) {
+ ((ListItem*)Panel_getSelected(super))->moving = false;
+
Meter* meter = (Meter*) Vector_take(this->meters, selected);
Panel_remove(super, selected);
Vector_insert(neighbor->meters, selected, meter);
- Panel_insert(&(neighbor->super), selected, (Object*) Meter_toListItem(meter));
+ Panel_insert(&(neighbor->super), selected, (Object*) Meter_toListItem(meter, false));
Panel_setSelected(&(neighbor->super), selected);
+ this->moving = false;
neighbor->moving = true;
((ListItem*)Panel_getSelected((Panel*)neighbor))->moving = true;
return true;
@@ -84,7 +85,7 @@ static HandlerResult MetersPanel_eventHandler(Panel* super, int ch) {
int mode = meter->mode + 1;
if (mode == LAST_METERMODE) mode = 1;
Meter_setMode(meter, mode);
- Panel_set(super, selected, (Object*) Meter_toListItem(meter));
+ Panel_set(super, selected, (Object*) Meter_toListItem(meter, this->moving));
result = HANDLED;
break;
}
@@ -123,13 +124,20 @@ static HandlerResult MetersPanel_eventHandler(Panel* super, int ch) {
case KEY_RIGHT:
{
sideMove = moveToNeighbor(this, this->rightNeighbor, selected);
- // don't set HANDLED; let ScreenManager handle focus.
+ if (this->moving && !sideMove) {
+ // lock user here until it exits positioning-mode
+ result = HANDLED;
+ }
+ // if user is free, don't set HANDLED;
+ // let ScreenManager handle focus.
break;
}
case KEY_LEFT:
{
sideMove = moveToNeighbor(this, this->leftNeighbor, selected);
- // don't set HANDLED; let ScreenManager handle focus.
+ if (this->moving && !sideMove) {
+ result = HANDLED;
+ }
break;
}
case KEY_F(9):
@@ -175,7 +183,7 @@ MetersPanel* MetersPanel_new(Settings* settings, const char* header, Vector* met
Panel_setHeader(super, header);
for (int i = 0; i < Vector_size(meters); i++) {
Meter* meter = (Meter*) Vector_get(meters, i);
- Panel_add(super, (Object*) Meter_toListItem(meter));
+ Panel_add(super, (Object*) Meter_toListItem(meter, false));
}
return this;
}

© 2014-2024 Faster IT GmbH | imprint | privacy policy