diff --git a/src/86box.c b/src/86box.c
index 87dbfc0b1..0b5a26131 100644
--- a/src/86box.c
+++ b/src/86box.c
@@ -236,6 +236,7 @@ char monitor_edid_path[1024] = { 0 }; /* (C) Path to
double video_gl_input_scale = 1.0; /* (C) OpenGL 3.x input scale */
int video_gl_input_scale_mode = FULLSCR_SCALE_FULL; /* (C) OpenGL 3.x input stretch mode */
+int color_scheme = 0; /* (C) Color scheme of UI (Windows-only) */
// Accelerator key array
struct accelKey acc_keys[NUM_ACCELS];
diff --git a/src/cdrom/CMakeLists.txt b/src/cdrom/CMakeLists.txt
index 4d5f947ca..6208111de 100644
--- a/src/cdrom/CMakeLists.txt
+++ b/src/cdrom/CMakeLists.txt
@@ -28,6 +28,9 @@ add_library(cdrom OBJECT
if(NOT WIN32)
target_include_directories(86Box PRIVATE PkgConfig::SNDFILE)
endif()
+if(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
+ target_include_directories(cdrom PRIVATE /usr/local/include)
+endif()
target_link_libraries(86Box PkgConfig::SNDFILE)
if(CDROM_MITSUMI)
diff --git a/src/cdrom/cdrom.c b/src/cdrom/cdrom.c
index 1eee1ac94..98f408d64 100644
--- a/src/cdrom/cdrom.c
+++ b/src/cdrom/cdrom.c
@@ -344,7 +344,7 @@ cdrom_is_sector_good(cdrom_t *dev, const uint8_t *b, const uint8_t mode2, const
{
int ret = 1;
- if (!mode2 || (form == 1)) {
+ if ((dev->cd_status != CD_STATUS_DVD) && (!mode2 || (form == 1))) {
if (mode2 && (form == 1)) {
const uint32_t crc = cdrom_crc32(0xffffffff, &(b[16]), 2056) ^ 0xffffffff;
@@ -2976,9 +2976,12 @@ cdrom_update_status(cdrom_t *dev)
dev->seek_pos = 0;
dev->cd_buflen = 0;
- if (dev->ops->is_dvd(dev->local))
- dev->cd_status = CD_STATUS_DVD;
- else
+ if (dev->ops->is_dvd(dev->local)) {
+ if (cdrom_is_dvd(dev->type))
+ dev->cd_status = CD_STATUS_DVD;
+ else
+ dev->cd_status = CD_STATUS_DVD_REJECTED;
+ } else
dev->cd_status = dev->ops->has_audio(dev->local) ? CD_STATUS_STOPPED :
CD_STATUS_DATA_ONLY;
diff --git a/src/config.c b/src/config.c
index a3c2dc0ec..737e7313b 100644
--- a/src/config.c
+++ b/src/config.c
@@ -128,6 +128,7 @@ load_global(void)
confirm_reset = ini_section_get_int(cat, "confirm_reset", 1);
confirm_exit = ini_section_get_int(cat, "confirm_exit", 1);
confirm_save = ini_section_get_int(cat, "confirm_save", 1);
+ color_scheme = ini_section_get_int(cat, "color_scheme", 0);
inhibit_multimedia_keys = ini_section_get_int(cat, "inhibit_multimedia_keys", 0);
@@ -2222,6 +2223,11 @@ save_global(void)
ini_section_set_string(cat, "language", buffer);
}
+ if (color_scheme)
+ ini_section_set_int(cat, "color_scheme", color_scheme);
+ else
+ ini_section_delete_var(cat, "color_scheme");
+
if (open_dir_usr_path)
ini_section_set_int(cat, "open_dir_usr_path", open_dir_usr_path);
else
diff --git a/src/device/hasp.c b/src/device/hasp.c
index 12dc6f2d1..07e9ac636 100644
--- a/src/device/hasp.c
+++ b/src/device/hasp.c
@@ -341,7 +341,6 @@ const lpt_device_t lpt_hasp_savquest_device = {
.close = hasp_close,
.write_data = hasp_write_data,
.write_ctrl = NULL,
- .autofeed = NULL,
.strobe = NULL,
.read_status = hasp_read_status,
.read_ctrl = NULL,
diff --git a/src/device/isamem.c b/src/device/isamem.c
index 1e2e92470..f89512779 100644
--- a/src/device/isamem.c
+++ b/src/device/isamem.c
@@ -2100,7 +2100,7 @@ static const device_config_t mplus2_config[] = {
// clang-format off
{
.name = "size",
- .description = "Memory Size",
+ .description = "Memory size",
.type = CONFIG_SPINNER,
.default_string = "",
.default_int = 64,
diff --git a/src/device/lpt.c b/src/device/lpt.c
index 1466ea021..29689d2de 100644
--- a/src/device/lpt.c
+++ b/src/device/lpt.c
@@ -222,15 +222,6 @@ lpt_ecp_update_irq(lpt_t *dev)
picintclevel(1 << dev->irq, &dev->irq_state);
}
-static void
-lpt_autofeed(lpt_t *dev, const uint8_t val)
-{
- if (dev->dt && dev->dt->autofeed && dev->dt->priv)
- dev->dt->autofeed(val, dev->dt->priv);
-
- dev->autofeed = val;
-}
-
static void
lpt_strobe(lpt_t *dev, const uint8_t val)
{
@@ -258,8 +249,6 @@ lpt_fifo_out_callback(void *priv)
else
ret = dma_channel_read(dev->dma);
- lpt_log("DMA %02X: %08X\n", dev->dma, ret);
-
if (ret != DMA_NODATA) {
fifo_write_evt_tagged(0x01, (uint8_t) (ret & 0xff), dev->fifo);
@@ -299,7 +288,6 @@ lpt_fifo_out_callback(void *priv)
dev->dma_stat = 0x04;
dev->state = LPT_STATE_IDLE;
lpt_ecp_update_irq(dev);
- lpt_autofeed(dev, 0);
} else {
dev->state = LPT_STATE_READ_DMA;
@@ -312,8 +300,6 @@ lpt_fifo_out_callback(void *priv)
} else if (!fifo_get_empty(dev->fifo))
timer_advance_u64(&dev->fifo_out_timer,
(uint64_t) ((1000000.0 / 2500000.0) * (double) TIMER_USEC));
- else
- lpt_autofeed(dev, 0);
break;
}
}
@@ -354,13 +340,11 @@ lpt_write(const uint16_t port, const uint8_t val, void *priv)
break;
case 0x0002:
- if (dev->dt && dev->dt->write_ctrl && dev->dt->priv) {
- if (dev->ecp && ((dev->ecr & 0xe0) >= 0x20))
- dev->dt->write_ctrl((val & 0xfc) | dev->autofeed | dev->strobe, dev->dt->priv);
- else
- dev->dt->write_ctrl(val, dev->dt->priv);
- }
+ if (dev->dt && dev->dt->write_ctrl && dev->dt->priv)
+ dev->dt->write_ctrl(val, dev->dt->priv);
dev->ctrl = val;
+ dev->strobe = val & 0x01;
+ dev->autofeed = val & 0x02;
dev->enable_irq = val & 0x10;
if (!(val & 0x10) && (dev->irq != 0xff))
picintc(1 << dev->irq);
@@ -430,11 +414,6 @@ lpt_write(const uint16_t port, const uint8_t val, void *priv)
break;
case 0x0402: case 0x0406:
- if (!(val & 0x0c))
- lpt_autofeed(dev, 0x00);
- else
- lpt_autofeed(dev, 0x02);
-
if ((dev->ecr & 0x04) && !(val & 0x04)) {
dev->dma_stat = 0x00;
fifo_reset(dev->fifo);
diff --git a/src/disk/hdc_ide_rz1000.c b/src/disk/hdc_ide_rz1000.c
index 8e664dd92..6b7aa68e8 100644
--- a/src/disk/hdc_ide_rz1000.c
+++ b/src/disk/hdc_ide_rz1000.c
@@ -208,6 +208,15 @@ rz1000_reset(void *priv)
dev->regs[0x0a] = 0x01; /* IDE controller */
dev->regs[0x0b] = 0x01; /* Mass storage controller */
+ dev->regs[0x10] = 0xf1;
+ dev->regs[0x11] = 0x01;
+ dev->regs[0x14] = 0xf5;
+ dev->regs[0x15] = 0x03;
+ dev->regs[0x18] = 0x71;
+ dev->regs[0x19] = 0x01;
+ dev->regs[0x1c] = 0x75;
+ dev->regs[0x1d] = 0x03;
+
dev->irq_mode[0] = dev->irq_mode[1] = 0;
dev->irq_pin = PCI_INTA;
dev->irq_line = 14;
diff --git a/src/include/86box/86box.h b/src/include/86box/86box.h
index 08def802b..ce39652bc 100644
--- a/src/include/86box/86box.h
+++ b/src/include/86box/86box.h
@@ -206,6 +206,8 @@ extern int portable_mode; /* we are running in portable mode
extern int monitor_edid; /* (C) Which EDID to use. 0=default, 1=custom. */
extern char monitor_edid_path[1024]; /* (C) Path to custom EDID */
+extern int color_scheme; /* (C) Color scheme of UI (Windows-only) */
+
#ifndef USE_NEW_DYNAREC
extern FILE *stdlog; /* file to log output to */
#endif
diff --git a/src/include/86box/lpt.h b/src/include/86box/lpt.h
index 037c31a44..61c95094f 100644
--- a/src/include/86box/lpt.h
+++ b/src/include/86box/lpt.h
@@ -25,7 +25,6 @@ typedef struct lpt_device_s {
void (*close)(void *priv);
void (*write_data)(uint8_t val, void *priv);
void (*write_ctrl)(uint8_t val, void *priv);
- void (*autofeed)(uint8_t val,void *priv);
void (*strobe)(uint8_t old, uint8_t val,void *priv);
uint8_t (*read_status)(void *priv);
uint8_t (*read_ctrl)(void *priv);
diff --git a/src/machine/m_tandy.c b/src/machine/m_tandy.c
index 1c7061d8a..899e819f7 100644
--- a/src/machine/m_tandy.c
+++ b/src/machine/m_tandy.c
@@ -149,11 +149,11 @@ static const scancode scancode_tandy[512] = {
{ .mk = { 0x51, 0 }, .brk = { 0xd1, 0 } }, /* 051 */
{ .mk = { 0x52, 0 }, .brk = { 0xd2, 0 } }, /* 052 */
{ .mk = { 0x56, 0 }, .brk = { 0xd6, 0 } }, /* 053 */
- { .mk = { 0 }, .brk = { 0 } }, /* 054 */
+ { .mk = { 0x54, 0 }, .brk = { 0xd4, 0 } }, /* 054 */
{ .mk = { 0 }, .brk = { 0 } }, /* 055 */
{ .mk = { 0 }, .brk = { 0 } }, /* 056 */
- { .mk = { 0 }, .brk = { 0 } }, /* 057 */
- { .mk = { 0 }, .brk = { 0 } }, /* 058 */
+ { .mk = { 0x59, 0 }, .brk = { 0xd9, 0 } }, /* 057 */
+ { .mk = { 0x5a, 0 }, .brk = { 0xda, 0 } }, /* 058 */
{ .mk = { 0 }, .brk = { 0 } }, /* 059 */
{ .mk = { 0 }, .brk = { 0 } }, /* 05a */
{ .mk = { 0 }, .brk = { 0 } }, /* 05b */
@@ -392,7 +392,7 @@ static const scancode scancode_tandy[512] = {
{ .mk = { 0 }, .brk = { 0 } }, /* 144 */
{ .mk = { 0 }, .brk = { 0 } }, /* 145 */
{ .mk = { 0x46, 0 }, .brk = { 0xc6, 0 } }, /* 146 */
- { .mk = { 0x47, 0 }, .brk = { 0xc7, 0 } }, /* 147 */
+ { .mk = { 0x58, 0 }, .brk = { 0xd8, 0 } }, /* 147 */
{ .mk = { 0x29, 0 }, .brk = { 0xa9, 0 } }, /* 148 */
{ .mk = { 0x49, 0 }, .brk = { 0xc9, 0 } }, /* 149 */
{ .mk = { 0 }, .brk = { 0 } }, /* 14a */
@@ -403,7 +403,7 @@ static const scancode scancode_tandy[512] = {
{ .mk = { 0x4f, 0 }, .brk = { 0xcf, 0 } }, /* 14f */
{ .mk = { 0x4a, 0 }, .brk = { 0xca, 0 } }, /* 150 */
{ .mk = { 0x51, 0 }, .brk = { 0xd1, 0 } }, /* 151 */
- { .mk = { 0x52, 0 }, .brk = { 0xd2, 0 } }, /* 152 */
+ { .mk = { 0x55, 0 }, .brk = { 0xd5, 0 } }, /* 152 */
{ .mk = { 0x53, 0 }, .brk = { 0xd3, 0 } }, /* 153 */
{ .mk = { 0 }, .brk = { 0 } }, /* 154 */
{ .mk = { 0 }, .brk = { 0 } }, /* 155 */
diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c
index aacc69d59..6fc09e548 100644
--- a/src/machine/machine_table.c
+++ b/src/machine/machine_table.c
@@ -11390,7 +11390,7 @@ const machine_t machines[] = {
.default_jumpered_ecp_dma = 3,
.kbc_device = &kbc_at_device,
.kbc_params = KBC_VEN_PHOENIX | 0x00012900,
- .kbc_p1 = 0x00000cf0,
+ .kbc_p1 = 0x00001010,
.gpio = 0xffffffff,
.gpio_acpi = 0xffffffff,
.device = &batman_device,
@@ -11976,7 +11976,7 @@ const machine_t machines[] = {
.default_jumpered_ecp_dma = 3,
.kbc_device = &kbc_at_device,
.kbc_params = KBC_VEN_PHOENIX | 0x00012900,
- .kbc_p1 = 0x00000cf0,
+ .kbc_p1 = 0x00001010,
.gpio = 0xffffffff,
.gpio_acpi = 0xffffffff,
.device = &plato_device,
diff --git a/src/network/CMakeLists.txt b/src/network/CMakeLists.txt
index 82d332e20..3f7ba427c 100644
--- a/src/network/CMakeLists.txt
+++ b/src/network/CMakeLists.txt
@@ -71,6 +71,9 @@ if(NETSWITCH)
endif()
if (UNIX)
+ if(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
+ set_source_files_properties(net_slirp.c PROPERTIES COMPILE_FLAGS "-I/usr/local/include")
+ endif()
find_path(HAS_VDE "libvdeplug.h" PATHS ${VDE_INCLUDE_DIR} "/usr/include /usr/local/include" "/opt/homebrew/include" )
if(HAS_VDE)
find_library(VDE_LIB vdeplug)
diff --git a/src/network/net_plip.c b/src/network/net_plip.c
index c45ad5527..5eacc5536 100644
--- a/src/network/net_plip.c
+++ b/src/network/net_plip.c
@@ -494,7 +494,6 @@ const lpt_device_t lpt_plip_device = {
.close = plip_close,
.write_data = plip_write_data,
.write_ctrl = plip_write_ctrl,
- .autofeed = NULL,
.strobe = NULL,
.read_status = plip_read_status,
.read_ctrl = NULL,
diff --git a/src/printer/CMakeLists.txt b/src/printer/CMakeLists.txt
index 071bf7113..0efb2aec2 100644
--- a/src/printer/CMakeLists.txt
+++ b/src/printer/CMakeLists.txt
@@ -37,6 +37,10 @@ endif()
find_package(PkgConfig REQUIRED)
pkg_check_modules(FREETYPE REQUIRED IMPORTED_TARGET freetype2)
target_link_libraries(86Box PkgConfig::FREETYPE)
+if(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
+ target_include_directories(print PRIVATE /usr/local/include)
+ target_include_directories(print PRIVATE /usr/local/include/freetype2)
+endif()
if(STATIC_BUILD)
# if(QT)
# Qt provides its own version of harfbuzz which leads to duplicated symbols.
diff --git a/src/printer/prt_escp.c b/src/printer/prt_escp.c
index 0806b0dad..6af374fba 100644
--- a/src/printer/prt_escp.c
+++ b/src/printer/prt_escp.c
@@ -520,7 +520,7 @@ update_font(escp_t *dev)
} else
switch (dev->lq_typeface) {
case TYPEFACE_ROMAN:
- fn = FONT_FILE_ROMAN;
+ fn = (dev->font_style & STYLE_PROP) ? FONT_FILE_ROMAN : FONT_FILE_COURIER;
break;
case TYPEFACE_SANSSERIF:
fn = FONT_FILE_SANSSERIF;
@@ -890,7 +890,7 @@ process_char(escp_t *dev, uint8_t ch)
break;
case 0x21: /* master select (ESC !) */
- dev->cpi = dev->esc_parms[0] & 0x01 ? 12.0 : 10.0;
+ dev->cpi = (dev->esc_parms[0]) & 0x01 ? 12.0 : 10.0;
/* Reset first seven bits. */
dev->font_style &= 0xFF80;
@@ -1045,7 +1045,7 @@ process_char(escp_t *dev, uint8_t ch)
update_font(dev);
break;
- case 0x47: /* select dobule-strike printing (ESC G) */
+ case 0x47: /* select double-strike printing (ESC G) */
dev->font_style |= STYLE_DOUBLESTRIKE;
break;
@@ -1098,7 +1098,7 @@ process_char(escp_t *dev, uint8_t ch)
break;
case 0x52: /* select an intl character set (ESC R) */
- if (dev->esc_parms[0] <= 13 || dev->esc_parms[0] == 64) {
+ if ((dev->esc_parms[0] <= 13) || (dev->esc_parms[0] == 64)) {
if (dev->esc_parms[0] == 64)
dev->esc_parms[0] = 14;
@@ -1118,9 +1118,9 @@ process_char(escp_t *dev, uint8_t ch)
break;
case 0x53: /* select superscript/subscript printing (ESC S) */
- if (dev->esc_parms[0] == 0 || dev->esc_parms[0] == '0')
+ if ((dev->esc_parms[0] == 0) || (dev->esc_parms[0] == '0'))
dev->font_style |= STYLE_SUBSCRIPT;
- if (dev->esc_parms[0] == 1 || dev->esc_parms[1] == '1')
+ if ((dev->esc_parms[0] == 1) || (dev->esc_parms[1] == '1'))
dev->font_style |= STYLE_SUPERSCRIPT;
update_font(dev);
break;
@@ -1137,9 +1137,9 @@ process_char(escp_t *dev, uint8_t ch)
case 0x57: /* turn double-width printing on/off (ESC W) */
if (!dev->multipoint_mode) {
dev->hmi = -1;
- if (dev->esc_parms[0] == 0 || dev->esc_parms[0] == '0')
+ if ((dev->esc_parms[0] == 0) || (dev->esc_parms[0] == '0'))
dev->font_style &= ~STYLE_DOUBLEWIDTH;
- if (dev->esc_parms[0] == 1 || dev->esc_parms[0] == '1')
+ if ((dev->esc_parms[0] == 1) || (dev->esc_parms[0] == '1'))
dev->font_style |= STYLE_DOUBLEWIDTH;
update_font(dev);
}
@@ -1216,9 +1216,9 @@ process_char(escp_t *dev, uint8_t ch)
break;
case 0x6b: /* select typeface (ESC k) */
- if (dev->esc_parms[0] <= 11 || dev->esc_parms[0] == 30 || dev->esc_parms[0] == 31) {
+ if ((dev->esc_parms[0] <= 11) || (dev->esc_parms[0] == 30) ||
+ (dev->esc_parms[0] == 31))
dev->lq_typeface = dev->esc_parms[0];
- }
update_font(dev);
break;
@@ -1229,9 +1229,9 @@ process_char(escp_t *dev, uint8_t ch)
break;
case 0x70: /* Turn proportional mode on/off (ESC p) */
- if (dev->esc_parms[0] == 0 || dev->esc_parms[0] == '0')
+ if ((dev->esc_parms[0] == 0) || (dev->esc_parms[0] == '0'))
dev->font_style &= ~STYLE_PROP;
- if (dev->esc_parms[0] == 1 || dev->esc_parms[0] == '1') {
+ if ((dev->esc_parms[0] == 1) || (dev->esc_parms[0] == '1')) {
dev->font_style |= STYLE_PROP;
dev->print_quality = QUALITY_LQ;
}
@@ -1264,20 +1264,20 @@ process_char(escp_t *dev, uint8_t ch)
case 0x77: /* turn double-height printing on/off (ESC w) */
if (!dev->multipoint_mode) {
- if (dev->esc_parms[0] == 0 || dev->esc_parms[0] == '0')
+ if ((dev->esc_parms[0] == 0) || (dev->esc_parms[0] == '0'))
dev->font_style &= ~STYLE_DOUBLEHEIGHT;
- if (dev->esc_parms[0] == 1 || dev->esc_parms[0] == '1')
+ if ((dev->esc_parms[0] == 1) || (dev->esc_parms[0] == '1'))
dev->font_style |= STYLE_DOUBLEHEIGHT;
update_font(dev);
}
break;
case 0x78: /* select LQ or draft (ESC x) */
- if (dev->esc_parms[0] == 0 || dev->esc_parms[0] == '0') {
+ if ((dev->esc_parms[0] == 0) || (dev->esc_parms[0] == '0')) {
dev->print_quality = QUALITY_DRAFT;
dev->font_style |= STYLE_CONDENSED;
}
- if (dev->esc_parms[0] == 1 || dev->esc_parms[0] == '1') {
+ if ((dev->esc_parms[0] == 1) || (dev->esc_parms[0] == '1')) {
dev->print_quality = QUALITY_LQ;
dev->font_style &= ~STYLE_CONDENSED;
}
@@ -1884,17 +1884,6 @@ write_data(uint8_t val, void *priv)
dev->data = val;
}
-static void
-autofeed(uint8_t val, void *priv)
-{
- escp_t *dev = (escp_t *) priv;
-
- if (dev == NULL)
- return;
-
- dev->autofeed = ((val & 0x02) > 0);
-}
-
static void
strobe(uint8_t old, uint8_t val, void *priv)
{
@@ -2147,7 +2136,6 @@ const lpt_device_t lpt_prt_escp_device = {
.close = escp_close,
.write_data = write_data,
.write_ctrl = write_ctrl,
- .autofeed = autofeed,
.strobe = strobe,
.read_status = read_status,
.read_ctrl = read_ctrl,
diff --git a/src/printer/prt_ps.c b/src/printer/prt_ps.c
index c7183ec3f..c07ad475a 100644
--- a/src/printer/prt_ps.c
+++ b/src/printer/prt_ps.c
@@ -322,17 +322,6 @@ process_data(ps_t *dev)
dev->buffer[dev->buffer_pos] = 0;
}
-static void
-ps_autofeed(uint8_t val, void *priv)
-{
- ps_t *dev = (ps_t *) priv;
-
- if (dev == NULL)
- return;
-
- dev->autofeed = val & 0x02 ? true : false;
-}
-
static void
ps_strobe(uint8_t old, uint8_t val, void *priv)
{
@@ -533,7 +522,6 @@ const lpt_device_t lpt_prt_ps_device = {
.close = ps_close,
.write_data = ps_write_data,
.write_ctrl = ps_write_ctrl,
- .autofeed = ps_autofeed,
.strobe = ps_strobe,
.read_status = ps_read_status,
.read_ctrl = NULL,
@@ -551,7 +539,6 @@ const lpt_device_t lpt_prt_pcl_device = {
.close = ps_close,
.write_data = ps_write_data,
.write_ctrl = ps_write_ctrl,
- .autofeed = ps_autofeed,
.strobe = ps_strobe,
.read_status = ps_read_status,
.read_ctrl = NULL,
diff --git a/src/printer/prt_text.c b/src/printer/prt_text.c
index a9808845f..eb951de08 100644
--- a/src/printer/prt_text.c
+++ b/src/printer/prt_text.c
@@ -369,18 +369,6 @@ write_data(uint8_t val, void *priv)
dev->data = val;
}
-static void
-autofeed(uint8_t val, void *priv)
-{
- prnt_t *dev = (prnt_t *) priv;
-
- if (dev == NULL)
- return;
-
- /* set autofeed value */
- dev->autofeed = val & 0x02 ? 1 : 0;
-}
-
static void
strobe(uint8_t old, uint8_t val, void *priv)
{
@@ -418,7 +406,7 @@ write_ctrl(uint8_t val, void *priv)
return;
/* set autofeed value */
- dev->autofeed = val & 0x02 ? 1 : 0;
+ dev->autofeed = (val & 0x02) ? 1 : 0;
if (val & 0x08) { /* SELECT */
/* select printer */
@@ -562,7 +550,6 @@ const lpt_device_t lpt_prt_text_device = {
.close = prnt_close,
.write_data = write_data,
.write_ctrl = write_ctrl,
- .autofeed = autofeed,
.strobe = strobe,
.read_status = read_status,
.read_ctrl = NULL,
diff --git a/src/qt/languages/86box.pot b/src/qt/languages/86box.pot
index 4fc54d4a7..a65578eae 100644
--- a/src/qt/languages/86box.pot
+++ b/src/qt/languages/86box.pot
@@ -2972,3 +2972,15 @@ msgstr ""
msgid "OpenGL input stretch mode"
msgstr ""
+
+msgid "Color scheme"
+msgstr ""
+
+msgid "System"
+msgstr ""
+
+msgid "Light"
+msgstr ""
+
+msgid "Dark"
+msgstr ""
diff --git a/src/qt/languages/cs-CZ.po b/src/qt/languages/cs-CZ.po
index 21f55dfd6..ae265593c 100644
--- a/src/qt/languages/cs-CZ.po
+++ b/src/qt/languages/cs-CZ.po
@@ -2972,3 +2972,12 @@ msgstr "Vstupní měřítko OpenGL"
msgid "OpenGL input stretch mode"
msgstr "režim roztažení vstupu OpenGL"
+
+msgid "Color scheme"
+msgstr "Barevné schéma"
+
+msgid "Light"
+msgstr "Světlo"
+
+msgid "Dark"
+msgstr "Tmavá"
diff --git a/src/qt/languages/de-DE.po b/src/qt/languages/de-DE.po
index c2e47f777..4385811c0 100644
--- a/src/qt/languages/de-DE.po
+++ b/src/qt/languages/de-DE.po
@@ -2972,3 +2972,12 @@ msgstr "Eingabeskala von OpenGL"
msgid "OpenGL input stretch mode"
msgstr "Eingabestreckungsmodus von OpenGL"
+
+msgid "Color scheme"
+msgstr "Farbschema"
+
+msgid "Light"
+msgstr "Licht"
+
+msgid "Dark"
+msgstr "Dunkel"
diff --git a/src/qt/languages/es-ES.po b/src/qt/languages/es-ES.po
index d15f98e76..b3d8835cf 100644
--- a/src/qt/languages/es-ES.po
+++ b/src/qt/languages/es-ES.po
@@ -2972,3 +2972,12 @@ msgstr "Escala de entrada de OpenGL"
msgid "OpenGL input stretch mode"
msgstr "Modo de estiramiento de entrada de OpenGL"
+
+msgid "Color scheme"
+msgstr "Esquema de colores"
+
+msgid "Light"
+msgstr "Luz"
+
+msgid "Dark"
+msgstr "Oscuro"
diff --git a/src/qt/languages/fi-FI.po b/src/qt/languages/fi-FI.po
index ef9f90f48..475d94b7b 100644
--- a/src/qt/languages/fi-FI.po
+++ b/src/qt/languages/fi-FI.po
@@ -2972,3 +2972,12 @@ msgstr "OpenGL:n syöttöasteikko"
msgid "OpenGL input stretch mode"
msgstr "OpenGL:n syötteen venytystila"
+
+msgid "Color scheme"
+msgstr "Värimaailma"
+
+msgid "Light"
+msgstr "Valo"
+
+msgid "Dark"
+msgstr "Tumma"
diff --git a/src/qt/languages/fr-FR.po b/src/qt/languages/fr-FR.po
index 983994783..3f28b4af8 100644
--- a/src/qt/languages/fr-FR.po
+++ b/src/qt/languages/fr-FR.po
@@ -2972,3 +2972,12 @@ msgstr "Échelle d'entrée d'OpenGL"
msgid "OpenGL input stretch mode"
msgstr "Mode d'étirement des données d'entrée d'OpenGL"
+
+msgid "Color scheme"
+msgstr "Palette de couleurs"
+
+msgid "Light"
+msgstr "Lumière"
+
+msgid "Dark"
+msgstr "Sombre"
diff --git a/src/qt/languages/hr-HR.po b/src/qt/languages/hr-HR.po
index 9b901c03e..4996db404 100644
--- a/src/qt/languages/hr-HR.po
+++ b/src/qt/languages/hr-HR.po
@@ -2972,3 +2972,12 @@ msgstr "Ulazna skala OpenGL-a"
msgid "OpenGL input stretch mode"
msgstr "Način rastezanja ulaza u OpenGL-u"
+
+msgid "Color scheme"
+msgstr "Shema boja"
+
+msgid "Light"
+msgstr "Svjetlo"
+
+msgid "Dark"
+msgstr "Tamno"
diff --git a/src/qt/languages/it-IT.po b/src/qt/languages/it-IT.po
index 5fad20cb9..9ad2559ee 100644
--- a/src/qt/languages/it-IT.po
+++ b/src/qt/languages/it-IT.po
@@ -2972,3 +2972,12 @@ msgstr "Scala di input di OpenGL"
msgid "OpenGL input stretch mode"
msgstr "Modalità di allungamento dell'input di OpenGL"
+
+msgid "Color scheme"
+msgstr "Combinazione di colori"
+
+msgid "Light"
+msgstr "Luce"
+
+msgid "Dark"
+msgstr "Scuro"
diff --git a/src/qt/languages/ja-JP.po b/src/qt/languages/ja-JP.po
index 49f1d7cf2..be01430f9 100644
--- a/src/qt/languages/ja-JP.po
+++ b/src/qt/languages/ja-JP.po
@@ -2593,7 +2593,7 @@ msgid "Generic Text Printer"
msgstr "汎用テキスト・プリンタ"
msgid "Generic ESC/P 2 Dot-Matrix Printer"
-msgstr "汎用ESC/Pドットマトリクスプリンタ"
+msgstr "汎用ESC/P 2ドットマトリクスプリンタ"
msgid "Generic PostScript Printer"
msgstr "汎用ポストスクリプトプリンタ"
@@ -2695,7 +2695,7 @@ msgid "Unable to find Dot-Matrix fonts"
msgstr "ドットマトリクスフォントが見つかりません"
msgid "TrueType fonts in the \"roms/printer/fonts\" directory are required for the emulation of the Generic ESC/P 2 Dot-Matrix Printer."
-msgstr "汎用ESC/Pドットマトリクスプリンタのエミュレーションには、roms/printer/fontsディレクトリ内のTrueTypeフォントが必要です。"
+msgstr "汎用ESC/P 2ドットマトリクスプリンタのエミュレーションには、roms/printer/fontsディレクトリ内のTrueTypeフォントが必要です。"
msgid "Inhibit multimedia keys"
msgstr "マルチメディアキーを無効にする"
@@ -2972,3 +2972,12 @@ msgstr "OpenGLの入力スケール"
msgid "OpenGL input stretch mode"
msgstr "OpenGLの入力ストレッチモード"
+
+msgid "Color scheme"
+msgstr "配色"
+
+msgid "Light"
+msgstr "光"
+
+msgid "Dark"
+msgstr "暗闇"
diff --git a/src/qt/languages/ko-KR.po b/src/qt/languages/ko-KR.po
index 63c9d8a94..14da0ec8b 100644
--- a/src/qt/languages/ko-KR.po
+++ b/src/qt/languages/ko-KR.po
@@ -2972,3 +2972,12 @@ msgstr "OpenGL 입력 스케일"
msgid "OpenGL input stretch mode"
msgstr "OpenGL 입력 스트레치 모드"
+
+msgid "Color scheme"
+msgstr "색상 구성"
+
+msgid "Light"
+msgstr "빛"
+
+msgid "Dark"
+msgstr "어둠"
diff --git a/src/qt/languages/nb-NO.po b/src/qt/languages/nb-NO.po
index 0568aa565..8d9f97521 100644
--- a/src/qt/languages/nb-NO.po
+++ b/src/qt/languages/nb-NO.po
@@ -2972,3 +2972,12 @@ msgstr "Inngangsskala for OpenGL"
msgid "OpenGL input stretch mode"
msgstr "Inngangsstrekkmodus for OpenGL"
+
+msgid "Color scheme"
+msgstr "Fargevalg"
+
+msgid "Light"
+msgstr "Lys"
+
+msgid "Dark"
+msgstr "Mørk"
diff --git a/src/qt/languages/nl-NL.po b/src/qt/languages/nl-NL.po
index 9183ece94..d28a72651 100644
--- a/src/qt/languages/nl-NL.po
+++ b/src/qt/languages/nl-NL.po
@@ -2972,3 +2972,12 @@ msgstr "Invoerschaal van OpenGL"
msgid "OpenGL input stretch mode"
msgstr "Input stretch-modus van OpenGL"
+
+msgid "Color scheme"
+msgstr "Kleurenschema"
+
+msgid "Light"
+msgstr "Licht"
+
+msgid "Dark"
+msgstr "Donker"
diff --git a/src/qt/languages/pl-PL.po b/src/qt/languages/pl-PL.po
index 2baa525e4..2a0cde697 100644
--- a/src/qt/languages/pl-PL.po
+++ b/src/qt/languages/pl-PL.po
@@ -2972,3 +2972,12 @@ msgstr "Skala wejściowa OpenGL"
msgid "OpenGL input stretch mode"
msgstr "Tryb rozciągania wejściowego OpenGL"
+
+msgid "Color scheme"
+msgstr "Schemat kolorów"
+
+msgid "Light"
+msgstr "Światło"
+
+msgid "Dark"
+msgstr "Ciemny"
diff --git a/src/qt/languages/pt-BR.po b/src/qt/languages/pt-BR.po
index 6cee38ff5..63a17871b 100644
--- a/src/qt/languages/pt-BR.po
+++ b/src/qt/languages/pt-BR.po
@@ -2972,3 +2972,12 @@ msgstr "Escala de entrada do OpenGL"
msgid "OpenGL input stretch mode"
msgstr "Modo de expansão de entrada do OpenGL"
+
+msgid "Color scheme"
+msgstr "Esquema de cores"
+
+msgid "Light"
+msgstr "Claro"
+
+msgid "Dark"
+msgstr "Escuro"
diff --git a/src/qt/languages/pt-PT.po b/src/qt/languages/pt-PT.po
index 3e16ac722..4c7866f41 100644
--- a/src/qt/languages/pt-PT.po
+++ b/src/qt/languages/pt-PT.po
@@ -2972,3 +2972,12 @@ msgstr "Escala de entrada do OpenGL"
msgid "OpenGL input stretch mode"
msgstr "Modo de expansão de entrada do OpenGL"
+
+msgid "Color scheme"
+msgstr "Esquema de cores"
+
+msgid "Light"
+msgstr "Claro"
+
+msgid "Dark"
+msgstr "Escuro"
diff --git a/src/qt/languages/ru-RU.po b/src/qt/languages/ru-RU.po
index f26353b6a..904757d74 100644
--- a/src/qt/languages/ru-RU.po
+++ b/src/qt/languages/ru-RU.po
@@ -2972,3 +2972,12 @@ msgstr "Масштаб ввода OpenGL"
msgid "OpenGL input stretch mode"
msgstr "Режим растяжения ввода OpenGL"
+
+msgid "Color scheme"
+msgstr "Цветовая схема"
+
+msgid "Light"
+msgstr "Светлая"
+
+msgid "Dark"
+msgstr "Тёмная"
diff --git a/src/qt/languages/sk-SK.po b/src/qt/languages/sk-SK.po
index 5f079509f..3a5e3b863 100644
--- a/src/qt/languages/sk-SK.po
+++ b/src/qt/languages/sk-SK.po
@@ -2972,3 +2972,12 @@ msgstr "Vstupná stupnica OpenGL"
msgid "OpenGL input stretch mode"
msgstr "Režim rozťahovania vstupu OpenGL"
+
+msgid "Color scheme"
+msgstr "Farebná schéma"
+
+msgid "Light"
+msgstr "Svetlo"
+
+msgid "Dark"
+msgstr "Tmavá"
diff --git a/src/qt/languages/sl-SI.po b/src/qt/languages/sl-SI.po
index 18437c5b2..c23024a33 100644
--- a/src/qt/languages/sl-SI.po
+++ b/src/qt/languages/sl-SI.po
@@ -2972,3 +2972,12 @@ msgstr "Vhodna lestvica OpenGL"
msgid "OpenGL input stretch mode"
msgstr "Način raztezanja vhoda OpenGL"
+
+msgid "Color scheme"
+msgstr "Barvna shema"
+
+msgid "Light"
+msgstr "Svetloba"
+
+msgid "Dark"
+msgstr "Temno"
diff --git a/src/qt/languages/sv-SE.po b/src/qt/languages/sv-SE.po
index 180eecf64..58ead9405 100644
--- a/src/qt/languages/sv-SE.po
+++ b/src/qt/languages/sv-SE.po
@@ -2972,3 +2972,12 @@ msgstr "Inmatningsskala för OpenGL"
msgid "OpenGL input stretch mode"
msgstr "Inmatningssträckningsläge för OpenGL"
+
+msgid "Color scheme"
+msgstr "Färgschema"
+
+msgid "Light"
+msgstr "Ljus"
+
+msgid "Dark"
+msgstr "Mörk"
diff --git a/src/qt/languages/tr-TR.po b/src/qt/languages/tr-TR.po
index 53b15d1c7..538cc7af6 100644
--- a/src/qt/languages/tr-TR.po
+++ b/src/qt/languages/tr-TR.po
@@ -2972,3 +2972,12 @@ msgstr "OpenGL'nin giriş ölçeği"
msgid "OpenGL input stretch mode"
msgstr "OpenGL'nin giriş germe modu"
+
+msgid "Color scheme"
+msgstr "Renk şeması"
+
+msgid "Light"
+msgstr "Işık"
+
+msgid "Dark"
+msgstr "Karanlık"
diff --git a/src/qt/languages/uk-UA.po b/src/qt/languages/uk-UA.po
index 093f507b2..c079fc141 100644
--- a/src/qt/languages/uk-UA.po
+++ b/src/qt/languages/uk-UA.po
@@ -2972,3 +2972,12 @@ msgstr "Шкала введення OpenGL"
msgid "OpenGL input stretch mode"
msgstr "Режим розтягування вхідних даних OpenGL"
+
+msgid "Color scheme"
+msgstr "Колірна гамма"
+
+msgid "Light"
+msgstr "Світло"
+
+msgid "Dark"
+msgstr "Темний"
diff --git a/src/qt/languages/vi-VN.po b/src/qt/languages/vi-VN.po
index 9d967145e..0190aee4c 100644
--- a/src/qt/languages/vi-VN.po
+++ b/src/qt/languages/vi-VN.po
@@ -2972,3 +2972,12 @@ msgstr "Độ phân giải đầu vào của OpenGL"
msgid "OpenGL input stretch mode"
msgstr "Chế độ kéo giãn đầu vào của OpenGL"
+
+msgid "Color scheme"
+msgstr "Bảng màu"
+
+msgid "Light"
+msgstr "Ánh sáng"
+
+msgid "Dark"
+msgstr "Tối"
diff --git a/src/qt/languages/zh-CN.po b/src/qt/languages/zh-CN.po
index 4cfee3fff..a265bfdc1 100644
--- a/src/qt/languages/zh-CN.po
+++ b/src/qt/languages/zh-CN.po
@@ -2972,3 +2972,12 @@ msgstr "OpenGL的输入比例"
msgid "OpenGL input stretch mode"
msgstr "OpenGL的输入拉伸模式"
+
+msgid "Color scheme"
+msgstr "配色方案"
+
+msgid "Light"
+msgstr "光"
+
+msgid "Dark"
+msgstr "黑暗"
diff --git a/src/qt/languages/zh-TW.po b/src/qt/languages/zh-TW.po
index 39bbe7f5b..21a984ebd 100644
--- a/src/qt/languages/zh-TW.po
+++ b/src/qt/languages/zh-TW.po
@@ -2972,3 +2972,12 @@ msgstr "OpenGL 的輸入比例"
msgid "OpenGL input stretch mode"
msgstr "OpenGL 的輸入拉伸模式"
+
+msgid "Color scheme"
+msgstr "配色方案"
+
+msgid "Light"
+msgstr "光"
+
+msgid "Dark"
+msgstr "黑暗"
diff --git a/src/qt/qt_main.cpp b/src/qt/qt_main.cpp
index 6a2ba1a3a..664b495bd 100644
--- a/src/qt/qt_main.cpp
+++ b/src/qt/qt_main.cpp
@@ -515,10 +515,15 @@ main_thread_fn()
static std::thread *main_thread;
+#ifdef Q_OS_WINDOWS
+WindowsDarkModeFilter* vmm_dark_mode_filter = nullptr;
+#endif
+
int
main(int argc, char *argv[])
{
#ifdef Q_OS_WINDOWS
+ bool wasDarkTheme = false;
/* Check if Windows supports UTF-8 */
if (GetACP() == CP_UTF8)
acp_utf8 = 1;
@@ -554,6 +559,7 @@ main(int argc, char *argv[])
f.open(QFile::ReadOnly | QFile::Text);
QTextStream ts(&f);
qApp->setStyleSheet(ts.readAll());
+ wasDarkTheme = true;
}
QPalette palette(qApp->palette());
palette.setColor(QPalette::Link, Qt::white);
@@ -585,6 +591,16 @@ main(int argc, char *argv[])
return 0;
}
+#ifdef Q_OS_WINDOWS
+ if (util::isWindowsLightTheme() && wasDarkTheme) {
+ qApp->setStyleSheet("");
+ QPalette palette(qApp->palette());
+ palette.setColor(QPalette::Link, Qt::blue);
+ palette.setColor(QPalette::LinkVisited, Qt::magenta);
+ qApp->setPalette(palette);
+ }
+#endif
+
if (!start_vmm)
#ifdef Q_OS_MACOS
qt_set_sequence_auto_mnemonic(false);
@@ -645,6 +661,8 @@ main(int argc, char *argv[])
const auto vmm_main_window = new VMManagerMainWindow();
#ifdef Q_OS_WINDOWS
darkModeFilter.get()->setWindow(vmm_main_window);
+ // HACK
+ vmm_dark_mode_filter = darkModeFilter.get();
#endif
vmm_main_window->show();
});
@@ -831,6 +849,7 @@ main(int argc, char *argv[])
});
QObject::connect(main_window, &MainWindow::vmmRunningStateChanged, &manager_socket, &VMManagerClientSocket::clientRunningStateChanged);
QObject::connect(main_window, &MainWindow::vmmConfigurationChanged, &manager_socket, &VMManagerClientSocket::configurationChanged);
+ QObject::connect(main_window, &MainWindow::vmmGlobalConfigurationChanged, &manager_socket, &VMManagerClientSocket::globalConfigurationChanged);
main_window->installEventFilter(&manager_socket);
manager_socket.sendWinIdMessage(main_window->winId());
@@ -864,6 +883,10 @@ main(int argc, char *argv[])
/* Initialize the rendering window, or fullscreen. */
QTimer::singleShot(0, &app, [] {
+#ifdef Q_OS_WINDOWS
+ extern bool NewDarkMode;
+ NewDarkMode = util::isWindowsLightTheme();
+#endif
pc_reset_hard_init();
/* Set the PAUSE mode depending on the renderer. */
diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp
index 789ce0894..9ae180d1f 100644
--- a/src/qt/qt_mainwindow.cpp
+++ b/src/qt/qt_mainwindow.cpp
@@ -2140,6 +2140,9 @@ MainWindow::on_actionHiDPI_scaling_triggered()
void
MainWindow::on_actionHide_status_bar_triggered()
{
+ auto w = ui->stackedWidget->width() * (!dpi_scale ? util::screenOfWidget(this)->devicePixelRatio() : 1.);
+ auto h = ui->stackedWidget->height() * (!dpi_scale ? util::screenOfWidget(this)->devicePixelRatio() : 1.);
+
hide_status_bar ^= 1;
ui->actionHide_status_bar->setChecked(hide_status_bar);
statusBar()->setVisible(!hide_status_bar);
@@ -2151,7 +2154,7 @@ MainWindow::on_actionHide_status_bar_triggered()
} else {
int vid_resize_orig = vid_resize;
vid_resize = 0;
- emit resizeContents(monitors[0].mon_scrnsz_x, monitors[0].mon_scrnsz_y);
+ emit resizeContents(vid_resize_orig ? w : monitors[0].mon_scrnsz_x, vid_resize_orig ? h : monitors[0].mon_scrnsz_y);
vid_resize = vid_resize_orig;
if (vid_resize == 1)
setFixedSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX);
@@ -2161,6 +2164,9 @@ MainWindow::on_actionHide_status_bar_triggered()
void
MainWindow::on_actionHide_tool_bar_triggered()
{
+ auto w = ui->stackedWidget->width() * (!dpi_scale ? util::screenOfWidget(this)->devicePixelRatio() : 1.);
+ auto h = ui->stackedWidget->height() * (!dpi_scale ? util::screenOfWidget(this)->devicePixelRatio() : 1.);
+
hide_tool_bar ^= 1;
ui->actionHide_tool_bar->setChecked(hide_tool_bar);
ui->toolBar->setVisible(!hide_tool_bar);
@@ -2169,7 +2175,7 @@ MainWindow::on_actionHide_tool_bar_triggered()
} else {
int vid_resize_orig = vid_resize;
vid_resize = 0;
- emit resizeContents(monitors[0].mon_scrnsz_x, monitors[0].mon_scrnsz_y);
+ emit resizeContents(vid_resize_orig ? w : monitors[0].mon_scrnsz_x, vid_resize_orig ? h : monitors[0].mon_scrnsz_y);
vid_resize = vid_resize_orig;
if (vid_resize == 1)
setFixedSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX);
@@ -2244,7 +2250,9 @@ void
MainWindow::on_actionPreferences_triggered()
{
ProgSettings progsettings(this);
- progsettings.exec();
+ if (progsettings.exec() == QDialog::Accepted) {
+ emit vmmGlobalConfigurationChanged();
+ }
}
void
diff --git a/src/qt/qt_mainwindow.hpp b/src/qt/qt_mainwindow.hpp
index 22dec71f8..6a255ac85 100644
--- a/src/qt/qt_mainwindow.hpp
+++ b/src/qt/qt_mainwindow.hpp
@@ -68,6 +68,7 @@ signals:
void vmmRunningStateChanged(VMManagerProtocol::RunningState state);
void vmmConfigurationChanged();
+ void vmmGlobalConfigurationChanged();
public slots:
void showSettings();
void hardReset();
diff --git a/src/qt/qt_mainwindow.ui b/src/qt/qt_mainwindow.ui
index 9c719cba6..78cb2df98 100644
--- a/src/qt/qt_mainwindow.ui
+++ b/src/qt/qt_mainwindow.ui
@@ -942,7 +942,7 @@
true
- &Square pixels (keep ratio)
+ &Square pixels (Keep ratio)
diff --git a/src/qt/qt_progsettings.cpp b/src/qt/qt_progsettings.cpp
index c2fa75dff..7efeba377 100644
--- a/src/qt/qt_progsettings.cpp
+++ b/src/qt/qt_progsettings.cpp
@@ -96,8 +96,13 @@ ProgSettings::ProgSettings(QWidget *parent)
ui->checkBoxConfirmSave->setChecked(confirm_save);
ui->checkBoxConfirmHardReset->setChecked(confirm_reset);
+ ui->radioButtonSystem->setChecked(color_scheme == 0);
+ ui->radioButtonLight->setChecked(color_scheme == 1);
+ ui->radioButtonDark->setChecked(color_scheme == 2);
+
#ifndef Q_OS_WINDOWS
ui->checkBoxMultimediaKeys->setHidden(true);
+ ui->groupBox->setHidden(true);
#endif
}
@@ -111,6 +116,13 @@ ProgSettings::accept()
confirm_reset = ui->checkBoxConfirmHardReset->isChecked() ? 1 : 0;
inhibit_multimedia_keys = ui->checkBoxMultimediaKeys->isChecked() ? 1 : 0;
+ color_scheme = (ui->radioButtonSystem->isChecked()) ? 0 : (ui->radioButtonLight->isChecked() ? 1 : 2);
+
+#ifdef Q_OS_WINDOWS
+ extern void selectDarkMode();
+ selectDarkMode();
+#endif
+
loadTranslators(QCoreApplication::instance());
reloadStrings();
update_mouse_msg();
@@ -126,6 +138,7 @@ ProgSettings::accept()
connect(main_window, &MainWindow::updateStatusBarTip, main_window->status.get(), &MachineStatus::updateTip);
connect(main_window, &MainWindow::statusBarMessage, main_window->status.get(), &MachineStatus::message, Qt::QueuedConnection);
mouse_sensitivity = mouseSensitivity;
+ config_save_global();
QDialog::accept();
}
diff --git a/src/qt/qt_progsettings.ui b/src/qt/qt_progsettings.ui
index abaee5019..ca33726b1 100644
--- a/src/qt/qt_progsettings.ui
+++ b/src/qt/qt_progsettings.ui
@@ -7,7 +7,7 @@
0
0
458
- 391
+ 508
@@ -27,7 +27,7 @@
- QLayout::SetFixedSize
+ QLayout::SizeConstraint::SetFixedSize
-
@@ -36,6 +36,40 @@
+ -
+
+
+ Qt::Orientation::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+ -
+
+
+ Inhibit multimedia keys
+
+
+
+ -
+
+
+ Mouse sensitivity:
+
+
+
+ -
+
+
+ Default
+
+
+
-
@@ -48,30 +82,10 @@
- -
-
-
- Qt::Horizontal
-
-
-
- 40
- 20
-
-
-
-
- -
-
+
-
+
- Default
-
-
-
- -
-
-
- Mouse sensitivity:
+ Ask for confirmation before saving settings
@@ -93,27 +107,7 @@
100
- Qt::Horizontal
-
-
-
- -
-
-
- Qt::Horizontal
-
-
-
- 40
- 20
-
-
-
-
- -
-
-
- Default
+ Qt::Orientation::Horizontal
@@ -127,19 +121,25 @@
- -
-
+
-
+
- Inhibit multimedia keys
+ Default
- -
-
-
- Ask for confirmation before saving settings
+
-
+
+
+ Qt::Orientation::Horizontal
-
+
+
+ 40
+ 20
+
+
+
-
@@ -148,6 +148,16 @@
+ -
+
+
+ Qt::Orientation::Horizontal
+
+
+ QDialogButtonBox::StandardButton::Cancel|QDialogButtonBox::StandardButton::Ok
+
+
+
-
@@ -155,14 +165,34 @@
- -
-
-
- Qt::Horizontal
-
-
- QDialogButtonBox::Cancel|QDialogButtonBox::Ok
+
-
+
+
+ Color scheme
+
+
-
+
+
+ System
+
+
+
+ -
+
+
+ Light
+
+
+
+ -
+
+
+ Dark
+
+
+
+
diff --git a/src/qt/qt_specifydimensions.cpp b/src/qt/qt_specifydimensions.cpp
index 4999c6a83..0b88e9b57 100644
--- a/src/qt/qt_specifydimensions.cpp
+++ b/src/qt/qt_specifydimensions.cpp
@@ -118,5 +118,7 @@ SpecifyDimensions::on_SpecifyDimensions_accepted()
+ main_window->menuBar()->height()
+ (main_window->statusBar()->height() * !hide_status_bar)
+ (main_window->ui->toolBar->height() * !hide_tool_bar));
+ window_w = ui->spinBoxWidth->value();
+ window_h = ui->spinBoxHeight->value();
}
}
diff --git a/src/qt/qt_util.cpp b/src/qt/qt_util.cpp
index 201b61b3f..a95226247 100644
--- a/src/qt/qt_util.cpp
+++ b/src/qt/qt_util.cpp
@@ -66,6 +66,10 @@ screenOfWidget(QWidget *widget)
bool
isWindowsLightTheme(void) {
+ if (color_scheme != 0) {
+ return (color_scheme == 1);
+ }
+
// based on https://stackoverflow.com/questions/51334674/how-to-detect-windows-10-light-dark-mode-in-win32-application
// The value is expected to be a REG_DWORD, which is a signed 32-bit little-endian
diff --git a/src/qt/qt_vmmanager_clientsocket.cpp b/src/qt/qt_vmmanager_clientsocket.cpp
index ffe4fb5f7..7f1587cb4 100644
--- a/src/qt/qt_vmmanager_clientsocket.cpp
+++ b/src/qt/qt_vmmanager_clientsocket.cpp
@@ -23,6 +23,7 @@
extern "C" {
#include "86box/plat.h"
+#include "86box/config.h"
}
VMManagerClientSocket::VMManagerClientSocket(QObject* obj) : server_connected(false)
@@ -183,6 +184,15 @@ VMManagerClientSocket::jsonReceived(const QJsonObject &json)
case VMManagerProtocol::ManagerMessage::RequestStatus:
qDebug("Status request command received from manager");
break;
+ case VMManagerProtocol::ManagerMessage::GlobalConfigurationChanged:
+ {
+ config_load_global();
+#ifdef Q_OS_WINDOWS
+ void selectDarkMode();
+ selectDarkMode();
+#endif
+ break;
+ }
default:
qDebug("Unknown client message type received:");
qDebug() << json;
@@ -248,6 +258,12 @@ VMManagerClientSocket::clientRunningStateChanged(VMManagerProtocol::RunningState
sendMessageWithObject(VMManagerProtocol::ClientMessage::RunningStateChanged, extra_object);
}
+void
+VMManagerClientSocket::globalConfigurationChanged() const
+{
+ sendMessage(VMManagerProtocol::ClientMessage::GlobalConfigurationChanged);
+}
+
void
VMManagerClientSocket::configurationChanged() const
{
diff --git a/src/qt/qt_vmmanager_clientsocket.hpp b/src/qt/qt_vmmanager_clientsocket.hpp
index 50657a27b..1848749a3 100644
--- a/src/qt/qt_vmmanager_clientsocket.hpp
+++ b/src/qt/qt_vmmanager_clientsocket.hpp
@@ -45,6 +45,7 @@ signals:
public slots:
void clientRunningStateChanged(VMManagerProtocol::RunningState state) const;
void configurationChanged() const;
+ void globalConfigurationChanged() const;
private:
QString server_name;
diff --git a/src/qt/qt_vmmanager_details.cpp b/src/qt/qt_vmmanager_details.cpp
index 65608cf0a..873da9083 100644
--- a/src/qt/qt_vmmanager_details.cpp
+++ b/src/qt/qt_vmmanager_details.cpp
@@ -248,52 +248,52 @@ VMManagerDetails::updateConfig(VMManagerSystem *passed_sysconfig) {
// System
systemSection->clear();
- systemSection->addSection("Machine", passed_sysconfig->getDisplayValue(Display::Name::Machine));
- systemSection->addSection("CPU", passed_sysconfig->getDisplayValue(Display::Name::CPU));
- systemSection->addSection("Memory", passed_sysconfig->getDisplayValue(Display::Name::Memory));
+ systemSection->addSection("Machine", passed_sysconfig->getDisplayValue(VMManager::Display::Name::Machine));
+ systemSection->addSection("CPU", passed_sysconfig->getDisplayValue(VMManager::Display::Name::CPU));
+ systemSection->addSection("Memory", passed_sysconfig->getDisplayValue(VMManager::Display::Name::Memory));
// Video
videoSection->clear();
- videoSection->addSection("Video", passed_sysconfig->getDisplayValue(Display::Name::Video));
- if(!passed_sysconfig->getDisplayValue(Display::Name::Voodoo).isEmpty()) {
- videoSection->addSection("Voodoo", passed_sysconfig->getDisplayValue(Display::Name::Voodoo));
+ videoSection->addSection("Video", passed_sysconfig->getDisplayValue(VMManager::Display::Name::Video));
+ if(!passed_sysconfig->getDisplayValue(VMManager::Display::Name::Voodoo).isEmpty()) {
+ videoSection->addSection("Voodoo", passed_sysconfig->getDisplayValue(VMManager::Display::Name::Voodoo));
}
// Disks
storageSection->clear();
- storageSection->addSection("Disks", passed_sysconfig->getDisplayValue(Display::Name::Disks));
- storageSection->addSection("Floppy", passed_sysconfig->getDisplayValue(Display::Name::Floppy));
- storageSection->addSection("CD-ROM", passed_sysconfig->getDisplayValue(Display::Name::CD));
- storageSection->addSection("Removable disks", passed_sysconfig->getDisplayValue(Display::Name::RDisk));
- storageSection->addSection("MO", passed_sysconfig->getDisplayValue(Display::Name::MO));
- storageSection->addSection("SCSI", passed_sysconfig->getDisplayValue(Display::Name::SCSIController));
- storageSection->addSection("Controllers", passed_sysconfig->getDisplayValue(Display::Name::StorageController));
+ storageSection->addSection("Disks", passed_sysconfig->getDisplayValue(VMManager::Display::Name::Disks));
+ storageSection->addSection("Floppy", passed_sysconfig->getDisplayValue(VMManager::Display::Name::Floppy));
+ storageSection->addSection("CD-ROM", passed_sysconfig->getDisplayValue(VMManager::Display::Name::CD));
+ storageSection->addSection("Removable disks", passed_sysconfig->getDisplayValue(VMManager::Display::Name::RDisk));
+ storageSection->addSection("MO", passed_sysconfig->getDisplayValue(VMManager::Display::Name::MO));
+ storageSection->addSection("SCSI", passed_sysconfig->getDisplayValue(VMManager::Display::Name::SCSIController));
+ storageSection->addSection("Controllers", passed_sysconfig->getDisplayValue(VMManager::Display::Name::StorageController));
// Audio
audioSection->clear();
- audioSection->addSection("Audio", passed_sysconfig->getDisplayValue(Display::Name::Audio));
- audioSection->addSection("MIDI Out", passed_sysconfig->getDisplayValue(Display::Name::MidiOut));
+ audioSection->addSection("Audio", passed_sysconfig->getDisplayValue(VMManager::Display::Name::Audio));
+ audioSection->addSection("MIDI Out", passed_sysconfig->getDisplayValue(VMManager::Display::Name::MidiOut));
// Network
networkSection->clear();
- networkSection->addSection("NIC", passed_sysconfig->getDisplayValue(Display::Name::NIC));
+ networkSection->addSection("NIC", passed_sysconfig->getDisplayValue(VMManager::Display::Name::NIC));
// Input
inputSection->clear();
- inputSection->addSection("Keyboard", passed_sysconfig->getDisplayValue(Display::Name::Keyboard));
- inputSection->addSection("Mouse", passed_sysconfig->getDisplayValue(Display::Name::Mouse));
- inputSection->addSection("Joystick", passed_sysconfig->getDisplayValue(Display::Name::Joystick));
+ inputSection->addSection("Keyboard", passed_sysconfig->getDisplayValue(VMManager::Display::Name::Keyboard));
+ inputSection->addSection("Mouse", passed_sysconfig->getDisplayValue(VMManager::Display::Name::Mouse));
+ inputSection->addSection("Joystick", passed_sysconfig->getDisplayValue(VMManager::Display::Name::Joystick));
// Ports
portsSection->clear();
- portsSection->addSection("Serial ports", passed_sysconfig->getDisplayValue(Display::Name::Serial));
- portsSection->addSection("Parallel ports", passed_sysconfig->getDisplayValue(Display::Name::Parallel));
+ portsSection->addSection("Serial ports", passed_sysconfig->getDisplayValue(VMManager::Display::Name::Serial));
+ portsSection->addSection("Parallel ports", passed_sysconfig->getDisplayValue(VMManager::Display::Name::Parallel));
// Other devices
otherSection->clear();
- otherSection->addSection("ISA RTC", passed_sysconfig->getDisplayValue(Display::Name::IsaRtc));
- otherSection->addSection("ISA RAM", passed_sysconfig->getDisplayValue(Display::Name::IsaMem));
- otherSection->addSection("ISA ROM", passed_sysconfig->getDisplayValue(Display::Name::IsaRom));
+ otherSection->addSection("ISA RTC", passed_sysconfig->getDisplayValue(VMManager::Display::Name::IsaRtc));
+ otherSection->addSection("ISA RAM", passed_sysconfig->getDisplayValue(VMManager::Display::Name::IsaMem));
+ otherSection->addSection("ISA ROM", passed_sysconfig->getDisplayValue(VMManager::Display::Name::IsaRom));
systemSection->setSections();
videoSection->setSections();
diff --git a/src/qt/qt_vmmanager_detailsection.cpp b/src/qt/qt_vmmanager_detailsection.cpp
index ab9a4b5ff..afb71a5f0 100644
--- a/src/qt/qt_vmmanager_detailsection.cpp
+++ b/src/qt/qt_vmmanager_detailsection.cpp
@@ -145,7 +145,7 @@ VMManagerDetailSection::setSectionName(const QString &name)
}
void
-VMManagerDetailSection::addSection(const QString &name, const QString &value, Display::Name displayField)
+VMManagerDetailSection::addSection(const QString &name, const QString &value, VMManager::Display::Name displayField)
{
const auto new_section = DetailSection { name, value};
sections.push_back(new_section);
diff --git a/src/qt/qt_vmmanager_main.cpp b/src/qt/qt_vmmanager_main.cpp
index cfded658e..e53e2e407 100644
--- a/src/qt/qt_vmmanager_main.cpp
+++ b/src/qt/qt_vmmanager_main.cpp
@@ -31,10 +31,13 @@
#include
#include "qt_vmmanager_main.hpp"
+#include "qt_vmmanager_mainwindow.hpp"
#include "ui_qt_vmmanager_main.h"
#include "qt_vmmanager_model.hpp"
#include "qt_vmmanager_addmachine.hpp"
+extern VMManagerMainWindow* vmm_main_window;
+
// https://stackoverflow.com/a/36460740
bool copyPath(QString sourceDir, QString destinationDir, bool overWriteDirectory)
{
@@ -348,6 +351,10 @@ illegal_chars:
}
});
+ connect(vm_model, &VMManagerModel::globalConfigurationChanged, this, [this] () {
+ vmm_main_window->updateSettings();
+ });
+
// Initial default details view
vm_details = new VMManagerDetails(ui->detailsArea);
ui->detailsArea->layout()->addWidget(vm_details);
@@ -400,6 +407,12 @@ VMManagerMain::~VMManagerMain() {
delete vm_model;
}
+void
+VMManagerMain::updateGlobalSettings()
+{
+ vmm_main_window->updateSettings();
+}
+
void
VMManagerMain::currentSelectionChanged(const QModelIndex ¤t,
const QModelIndex &previous)
@@ -768,6 +781,10 @@ VMManagerMain::onPreferencesUpdated()
if (oldRegexSearch != regexSearch) {
ui->searchBar->clear();
}
+
+ if (vm_model) {
+ vm_model->sendGlobalConfigurationChanged();
+ }
}
void
diff --git a/src/qt/qt_vmmanager_main.hpp b/src/qt/qt_vmmanager_main.hpp
index be43da705..070f30398 100644
--- a/src/qt/qt_vmmanager_main.hpp
+++ b/src/qt/qt_vmmanager_main.hpp
@@ -70,6 +70,7 @@ public slots:
void shutdownForceButtonPressed() const;
void searchSystems(const QString &text) const;
void newMachineWizard();
+ void updateGlobalSettings();
void deleteSystem(VMManagerSystem *sysconfig);
void addNewSystem(const QString &name, const QString &dir, const QString &displayName = QString(), const QString &configFile = {});
#if __GNUC__ >= 11
diff --git a/src/qt/qt_vmmanager_mainwindow.cpp b/src/qt/qt_vmmanager_mainwindow.cpp
index 6ee8979cd..55e980ec9 100644
--- a/src/qt/qt_vmmanager_mainwindow.cpp
+++ b/src/qt/qt_vmmanager_mainwindow.cpp
@@ -18,6 +18,7 @@
#include "qt_vmmanager_mainwindow.hpp"
#include "qt_vmmanager_main.hpp"
#include "qt_vmmanager_preferences.hpp"
+#include "qt_vmmanager_windarkmodefilter.hpp"
#include "ui_qt_vmmanager_mainwindow.h"
#if EMU_BUILD_NUM != 0
# include "qt_updatecheckdialog.hpp"
@@ -30,7 +31,16 @@
#include
#include
#include
-#include
+#include
+
+extern "C"
+{
+extern void config_load_global();
+extern void config_save_global();
+}
+
+VMManagerMainWindow* vmm_main_window = nullptr;
+extern WindowsDarkModeFilter* vmm_dark_mode_filter;
VMManagerMainWindow::
VMManagerMainWindow(QWidget *parent)
@@ -41,6 +51,8 @@ VMManagerMainWindow(QWidget *parent)
{
ui->setupUi(this);
+ vmm_main_window = this;
+
// Connect signals from the VMManagerMain widget
connect(vmm, &VMManagerMain::selectionChanged, this, &VMManagerMainWindow::vmmSelectionChanged);
@@ -118,6 +130,7 @@ VMManagerMainWindow(QWidget *parent)
connect(this, &VMManagerMainWindow::languageUpdated, vmm, &VMManagerMain::onLanguageUpdated);
#ifdef Q_OS_WINDOWS
connect(this, &VMManagerMainWindow::darkModeUpdated, vmm, &VMManagerMain::onDarkModeUpdated);
+ connect(this, &VMManagerMainWindow::preferencesUpdated, [this] () { vmm_dark_mode_filter->reselectDarkMode(); });
#endif
{
@@ -187,6 +200,14 @@ VMManagerMainWindow::preferencesTriggered()
}
}
+void
+VMManagerMainWindow::updateSettings()
+{
+ config_load_global();
+ emit preferencesUpdated();
+ updateLanguage();
+}
+
void
VMManagerMainWindow::saveSettings() const
{
diff --git a/src/qt/qt_vmmanager_mainwindow.hpp b/src/qt/qt_vmmanager_mainwindow.hpp
index bde74765c..be02c3095 100644
--- a/src/qt/qt_vmmanager_mainwindow.hpp
+++ b/src/qt/qt_vmmanager_mainwindow.hpp
@@ -34,6 +34,7 @@ class VMManagerMainWindow final : public QMainWindow
public:
explicit VMManagerMainWindow(QWidget *parent = nullptr);
~VMManagerMainWindow() override;
+ void updateSettings();
signals:
void preferencesUpdated();
void languageUpdated();
diff --git a/src/qt/qt_vmmanager_model.cpp b/src/qt/qt_vmmanager_model.cpp
index 40baac90a..6e74da82c 100644
--- a/src/qt/qt_vmmanager_model.cpp
+++ b/src/qt/qt_vmmanager_model.cpp
@@ -23,6 +23,7 @@ VMManagerModel::VMManagerModel() {
for ( const auto& each_config : machines_vec) {
machines.append(each_config);
connect(each_config, &VMManagerSystem::itemDataChanged, this, &VMManagerModel::modelDataChanged);
+ connect(each_config, &VMManagerSystem::globalConfigurationChanged, this, &VMManagerModel::globalConfigurationChanged);
}
}
@@ -138,6 +139,7 @@ VMManagerModel::addConfigToModel(VMManagerSystem *system_config)
beginInsertRows(QModelIndex(), this->rowCount(QModelIndex()), this->rowCount(QModelIndex()));
machines.append(system_config);
connect(system_config, &VMManagerSystem::itemDataChanged, this, &VMManagerModel::modelDataChanged);
+ connect(system_config, &VMManagerSystem::globalConfigurationChanged, this, &VMManagerModel::globalConfigurationChanged);
endInsertRows();
}
@@ -177,6 +179,16 @@ VMManagerModel::getProcessStats()
return stats;
}
+void
+VMManagerModel::sendGlobalConfigurationChanged()
+{
+ for (auto& system: machines) {
+ if (system->getProcessStatus() != VMManagerSystem::ProcessStatus::Stopped) {
+ system->sendGlobalConfigurationChanged();
+ }
+ }
+}
+
int
VMManagerModel::getActiveMachineCount()
{
diff --git a/src/qt/qt_vmmanager_model.hpp b/src/qt/qt_vmmanager_model.hpp
index 159dad9f2..af72f3bc9 100644
--- a/src/qt/qt_vmmanager_model.hpp
+++ b/src/qt/qt_vmmanager_model.hpp
@@ -60,8 +60,10 @@ public:
QMap getProcessStats();
int getActiveMachineCount();
void refreshConfigs();
+ void sendGlobalConfigurationChanged();
signals:
void systemDataChanged();
+ void globalConfigurationChanged();
private:
QVector machines;
diff --git a/src/qt/qt_vmmanager_preferences.cpp b/src/qt/qt_vmmanager_preferences.cpp
index 49b7b4a1f..b709b0b13 100644
--- a/src/qt/qt_vmmanager_preferences.cpp
+++ b/src/qt/qt_vmmanager_preferences.cpp
@@ -24,6 +24,11 @@
#include "qt_vmmanager_config.hpp"
#include "ui_qt_vmmanager_preferences.h"
+#ifdef Q_OS_WINDOWS
+#include "qt_vmmanager_windarkmodefilter.hpp"
+extern WindowsDarkModeFilter* vmm_dark_mode_filter;
+#endif
+
extern "C" {
#include <86box/86box.h>
#include <86box/config.h>
@@ -66,7 +71,13 @@ VMManagerPreferences(QWidget *parent) : ui(new Ui::VMManagerPreferences)
const auto useRegexSearch = config->getStringValue("regex_search").toInt();
ui->regexSearchCheckBox->setChecked(useRegexSearch);
+ ui->radioButtonSystem->setChecked(color_scheme == 0);
+ ui->radioButtonLight->setChecked(color_scheme == 1);
+ ui->radioButtonDark->setChecked(color_scheme == 2);
+#ifndef Q_OS_WINDOWS
+ ui->groupBoxColorScheme->setHidden(true);
+#endif
}
VMManagerPreferences::~
@@ -95,6 +106,7 @@ VMManagerPreferences::accept()
strncpy(vmm_path_cfg, QDir::cleanPath(ui->systemDirectory->text()).toUtf8().constData(), sizeof(vmm_path_cfg) - 1);
lang_id = ui->comboBoxLanguage->currentData().toInt();
+ color_scheme = (ui->radioButtonSystem->isChecked()) ? 0 : (ui->radioButtonLight->isChecked() ? 1 : 2);
config_save_global();
#if EMU_BUILD_NUM != 0
diff --git a/src/qt/qt_vmmanager_preferences.ui b/src/qt/qt_vmmanager_preferences.ui
index 37caaae56..ab96109e6 100644
--- a/src/qt/qt_vmmanager_preferences.ui
+++ b/src/qt/qt_vmmanager_preferences.ui
@@ -7,13 +7,16 @@
0
0
400
- 300
+ 475
Preferences
+
+ QLayout::SizeConstraint::SetFixedSize
+
-
@@ -103,10 +106,40 @@
+ -
+
+
+ Color scheme
+
+
+
-
+
+
+ System
+
+
+
+ -
+
+
+ Light
+
+
+
+ -
+
+
+ Dark
+
+
+
+
+
+
-
- Qt::Vertical
+ Qt::Orientation::Vertical
@@ -119,10 +152,10 @@
-
- Qt::Horizontal
+ Qt::Orientation::Horizontal
- QDialogButtonBox::Cancel|QDialogButtonBox::Ok
+ QDialogButtonBox::StandardButton::Cancel|QDialogButtonBox::StandardButton::Ok
diff --git a/src/qt/qt_vmmanager_protocol.cpp b/src/qt/qt_vmmanager_protocol.cpp
index bc1805411..d113ba203 100644
--- a/src/qt/qt_vmmanager_protocol.cpp
+++ b/src/qt/qt_vmmanager_protocol.cpp
@@ -95,6 +95,8 @@ VMManagerProtocol::getClientMessageType(const QJsonObject &json_document)
return VMManagerProtocol::ClientMessage::ConfigurationChanged;
} else if (message_type == "WinIdMessage") {
return VMManagerProtocol::ClientMessage::WinIdMessage;
+ } else if (message_type == "GlobalConfigurationChanged") {
+ return VMManagerProtocol::ClientMessage::GlobalConfigurationChanged;
}
return VMManagerProtocol::ClientMessage::UnknownMessage;
}
@@ -119,6 +121,8 @@ VMManagerProtocol::getManagerMessageType(const QJsonObject &json_document)
return VMManagerProtocol::ManagerMessage::RequestShutdown;
} if (message_type == "ForceShutdown") {
return VMManagerProtocol::ManagerMessage::ForceShutdown;
+ } if (message_type == "GlobalConfigurationChanged") {
+ return VMManagerProtocol::ManagerMessage::GlobalConfigurationChanged;
}
return VMManagerProtocol::ManagerMessage::UnknownMessage;
}
diff --git a/src/qt/qt_vmmanager_protocol.hpp b/src/qt/qt_vmmanager_protocol.hpp
index 90f7e4eeb..99c88d808 100644
--- a/src/qt/qt_vmmanager_protocol.hpp
+++ b/src/qt/qt_vmmanager_protocol.hpp
@@ -43,6 +43,7 @@ public:
ResetVM,
RequestShutdown,
ForceShutdown,
+ GlobalConfigurationChanged,
UnknownMessage,
};
@@ -56,6 +57,7 @@ public:
RunningStateChanged,
ConfigurationChanged,
WinIdMessage,
+ GlobalConfigurationChanged,
UnknownMessage,
};
Q_ENUM(ClientMessage);
diff --git a/src/qt/qt_vmmanager_serversocket.cpp b/src/qt/qt_vmmanager_serversocket.cpp
index 1364ff794..edd1e6c02 100644
--- a/src/qt/qt_vmmanager_serversocket.cpp
+++ b/src/qt/qt_vmmanager_serversocket.cpp
@@ -189,6 +189,10 @@ VMManagerServerSocket::jsonReceived(const QJsonObject &json)
qDebug("Configuration change received from client");
emit configurationChanged();
break;
+ case VMManagerProtocol::ClientMessage::GlobalConfigurationChanged:
+ qDebug("Global configuration change received from client");
+ emit globalConfigurationChanged();
+ break;
default:
qDebug("Unknown client message type received:");
qDebug() << json;
diff --git a/src/qt/qt_vmmanager_serversocket.hpp b/src/qt/qt_vmmanager_serversocket.hpp
index 30ad02b2c..ff1950771 100644
--- a/src/qt/qt_vmmanager_serversocket.hpp
+++ b/src/qt/qt_vmmanager_serversocket.hpp
@@ -76,6 +76,7 @@ signals:
void windowStatusChanged(int status);
void runningStatusChanged(VMManagerProtocol::RunningState state);
void configurationChanged();
+ void globalConfigurationChanged();
void winIdReceived(WId id);
diff --git a/src/qt/qt_vmmanager_system.cpp b/src/qt/qt_vmmanager_system.cpp
index 00b699163..8079f1ba0 100644
--- a/src/qt/qt_vmmanager_system.cpp
+++ b/src/qt/qt_vmmanager_system.cpp
@@ -557,7 +557,7 @@ VMManagerSystem::setupVars() {
}
}
}
- display_table[Display::Name::Machine] = machine_name;
+ display_table[VMManager::Display::Name::Machine] = machine_name;
// CPU: Combine name with speed and FPU
QString cpu_name = "Unknown";
@@ -592,34 +592,34 @@ VMManagerSystem::setupVars() {
// int speed_display = machine_config["cpu_speed"].toInt() / 1000000;
// cpu_name.append(QString::number(speed_display).prepend(" / "));
// cpu_name.append(QCoreApplication::translate("", "MHz").prepend(' '));
- display_table[Display::Name::CPU] = cpu_name;
+ display_table[VMManager::Display::Name::CPU] = cpu_name;
// Memory
int divisor = (ram_granularity < 1024) ? 1 : 1024;
QString display_unit = (divisor == 1) ? "KB" : "MB";
auto mem_display = QString::number(machine_config["mem_size"].toInt() / divisor);
mem_display.append(QCoreApplication::translate("", display_unit.toUtf8().constData()).prepend(' '));
- display_table[Display::Name::Memory] = mem_display;
+ display_table[VMManager::Display::Name::Memory] = mem_display;
// Video card
int video_int = video_get_video_from_internal_name(video_config["gfxcard"].toUtf8().data());
const device_t* video_dev = video_card_getdevice(video_int);
- display_table[Display::Name::Video] = DeviceConfig::DeviceName(video_dev, video_get_internal_name(video_int), 1);
+ display_table[VMManager::Display::Name::Video] = DeviceConfig::DeviceName(video_dev, video_get_internal_name(video_int), 1);
// Secondary video
if (video_config.contains("gfxcard_2")) {
int video2_int = video_get_video_from_internal_name(video_config["gfxcard_2"].toUtf8().data());
const device_t* video2_dev = video_card_getdevice(video2_int);
- display_table[Display::Name::Video].append(DeviceConfig::DeviceName(video2_dev, video_get_internal_name(video2_int), 1).prepend(VMManagerDetailSection::sectionSeparator));
+ display_table[VMManager::Display::Name::Video].append(DeviceConfig::DeviceName(video2_dev, video_get_internal_name(video2_int), 1).prepend(VMManagerDetailSection::sectionSeparator));
}
// Add-on video that's not Voodoo
if (video_config.contains("8514a") && (video_config["8514a"].toInt() != 0))
- display_table[Display::Name::Video].append(tr("IBM 8514/A Graphics").prepend(VMManagerDetailSection::sectionSeparator));
+ display_table[VMManager::Display::Name::Video].append(tr("IBM 8514/A Graphics").prepend(VMManagerDetailSection::sectionSeparator));
if (video_config.contains("xga") && (video_config["xga"].toInt() != 0))
- display_table[Display::Name::Video].append(tr("XGA Graphics").prepend(VMManagerDetailSection::sectionSeparator));
+ display_table[VMManager::Display::Name::Video].append(tr("XGA Graphics").prepend(VMManagerDetailSection::sectionSeparator));
if (video_config.contains("da2") && (video_config["da2"].toInt() != 0))
- display_table[Display::Name::Video].append(tr("IBM PS/55 Display Adapter Graphics").prepend(VMManagerDetailSection::sectionSeparator));
+ display_table[VMManager::Display::Name::Video].append(tr("IBM PS/55 Display Adapter Graphics").prepend(VMManagerDetailSection::sectionSeparator));
// Voodoo
QString voodoo_name = "";
@@ -641,7 +641,7 @@ VMManagerSystem::setupVars() {
break;
}
}
- display_table[Display::Name::Voodoo] = voodoo_name;
+ display_table[VMManager::Display::Name::Voodoo] = voodoo_name;
// Drives
// First the number of disks
@@ -666,7 +666,7 @@ VMManagerSystem::setupVars() {
if (disks.count()) {
disks_display.append(" / ").append(bus_types.keys().join(", ").toUpper());
}
-// display_table[Display::Name::Disks] = disks_display;
+// display_table[VMManager::Display::Name::Disks] = disks_display;
// Drives
QString new_disk_display;
@@ -699,7 +699,7 @@ VMManagerSystem::setupVars() {
if(new_disk_display.isEmpty()) {
new_disk_display = tr("No disks");
}
- display_table[Display::Name::Disks] = new_disk_display;
+ display_table[VMManager::Display::Name::Disks] = new_disk_display;
// Floppy & CD-ROM
QStringList floppyDevices;
@@ -748,8 +748,8 @@ VMManagerSystem::setupVars() {
}
}
- display_table[Display::Name::Floppy] = floppyDevices.join(VMManagerDetailSection::sectionSeparator);
- display_table[Display::Name::CD] = cdromDevices.join(VMManagerDetailSection::sectionSeparator);
+ display_table[VMManager::Display::Name::Floppy] = floppyDevices.join(VMManagerDetailSection::sectionSeparator);
+ display_table[VMManager::Display::Name::CD] = cdromDevices.join(VMManagerDetailSection::sectionSeparator);
// Removable disks & MO
QStringList rdiskDevices;
@@ -786,8 +786,8 @@ VMManagerSystem::setupVars() {
}
}
- display_table[Display::Name::RDisk] = rdiskDevices.join(VMManagerDetailSection::sectionSeparator);
- display_table[Display::Name::MO] = moDevices.join(VMManagerDetailSection::sectionSeparator);
+ display_table[VMManager::Display::Name::RDisk] = rdiskDevices.join(VMManagerDetailSection::sectionSeparator);
+ display_table[VMManager::Display::Name::MO] = moDevices.join(VMManagerDetailSection::sectionSeparator);
// SCSI controllers
@@ -805,7 +805,7 @@ VMManagerSystem::setupVars() {
}
}
}
- display_table[Display::Name::SCSIController] = scsiControllers.join(VMManagerDetailSection::sectionSeparator);
+ display_table[VMManager::Display::Name::SCSIController] = scsiControllers.join(VMManagerDetailSection::sectionSeparator);
// Hard and floppy disk controllers
QStringList storageControllers;
@@ -864,7 +864,7 @@ VMManagerSystem::setupVars() {
if (storage_config.contains(ide_qua_internal_name) && (storage_config[ide_qua_internal_name].toInt() != 0))
storageControllers.append(DeviceConfig::DeviceName(hdc_get_device(hdc_get_from_internal_name(ide_qua_internal_name.toUtf8().data())), ide_qua_internal_name.toUtf8().constData(), 1));
- display_table[Display::Name::StorageController] = storageControllers.join(VMManagerDetailSection::sectionSeparator);
+ display_table[VMManager::Display::Name::StorageController] = storageControllers.join(VMManagerDetailSection::sectionSeparator);
// Audio
QStringList sndCards;
@@ -889,7 +889,7 @@ VMManagerSystem::setupVars() {
if(sndCards.isEmpty()) {
sndCards.append(tr("None"));
}
- display_table[Display::Name::Audio] = sndCards.join(VMManagerDetailSection::sectionSeparator);
+ display_table[VMManager::Display::Name::Audio] = sndCards.join(VMManagerDetailSection::sectionSeparator);
// MIDI
QString midiOutDev;
@@ -901,7 +901,7 @@ VMManagerSystem::setupVars() {
midiOutDev = midiDevName;
}
}
- display_table[Display::Name::MidiOut] = midiOutDev;
+ display_table[VMManager::Display::Name::MidiOut] = midiOutDev;
// midi_device = mt32 (output)
// mpu401_standalone = 1
@@ -940,21 +940,21 @@ VMManagerSystem::setupVars() {
if(nicList.isEmpty()) {
nicList.append(tr("None"));
}
- display_table[Display::Name::NIC] = nicList.join(VMManagerDetailSection::sectionSeparator);
+ display_table[VMManager::Display::Name::NIC] = nicList.join(VMManagerDetailSection::sectionSeparator);
// Input (Keyboard)
if (input_config.contains("keyboard_type")) {
auto keyboard_internal_name = input_config["keyboard_type"];
auto keyboard_dev = keyboard_get_from_internal_name(keyboard_internal_name.toUtf8().data());
auto keyboard_dev_name = DeviceConfig::DeviceName(keyboard_get_device(keyboard_dev), keyboard_get_internal_name(keyboard_dev), 0);
- display_table[Display::Name::Keyboard] = keyboard_dev_name;
+ display_table[VMManager::Display::Name::Keyboard] = keyboard_dev_name;
}
// Input (Mouse)
auto mouse_internal_name = input_config["mouse_type"];
auto mouse_dev = mouse_get_from_internal_name(mouse_internal_name.toUtf8().data());
auto mouse_dev_name = DeviceConfig::DeviceName(mouse_get_device(mouse_dev), mouse_get_internal_name(mouse_dev), 0);
- display_table[Display::Name::Mouse] = mouse_dev_name;
+ display_table[VMManager::Display::Name::Mouse] = mouse_dev_name;
// Input (joystick)
QString joystickDevice;
@@ -965,7 +965,7 @@ VMManagerSystem::setupVars() {
joystickDevice = joystickName;
}
}
- display_table[Display::Name::Joystick] = joystickDevice;
+ display_table[VMManager::Display::Name::Joystick] = joystickDevice;
// # Ports
// Serial
@@ -1026,8 +1026,8 @@ VMManagerSystem::setupVars() {
if (portIndex == PARALLEL_MAX)
break;
}
- display_table[Display::Name::Serial] = (serialFinal.empty() ? tr("None") : serialFinal.join(", "));
- display_table[Display::Name::Parallel] = (lptFinal.empty() ? tr("None") : lptFinal.join((hasLptDevices ? VMManagerDetailSection::sectionSeparator : ", ")));
+ display_table[VMManager::Display::Name::Serial] = (serialFinal.empty() ? tr("None") : serialFinal.join(", "));
+ display_table[VMManager::Display::Name::Parallel] = (lptFinal.empty() ? tr("None") : lptFinal.join((hasLptDevices ? VMManagerDetailSection::sectionSeparator : ", ")));
// ISA RTC
QString isartc_dev_name = "";
@@ -1036,7 +1036,7 @@ VMManagerSystem::setupVars() {
auto isartc_dev = isartc_get_from_internal_name(isartc_internal_name.toUtf8().data());
isartc_dev_name = DeviceConfig::DeviceName(isartc_get_device(isartc_dev), isartc_get_internal_name(isartc_dev), 0);
}
- display_table[Display::Name::IsaRtc] = isartc_dev_name;
+ display_table[VMManager::Display::Name::IsaRtc] = isartc_dev_name;
// ISA RAM
QStringList IsaMemCards;
@@ -1053,7 +1053,7 @@ VMManagerSystem::setupVars() {
}
}
}
- display_table[Display::Name::IsaMem] = IsaMemCards.join(VMManagerDetailSection::sectionSeparator);
+ display_table[VMManager::Display::Name::IsaMem] = IsaMemCards.join(VMManagerDetailSection::sectionSeparator);
// ISA ROM
QStringList IsaRomCards;
@@ -1070,7 +1070,7 @@ VMManagerSystem::setupVars() {
}
}
}
- display_table[Display::Name::IsaRom] = IsaRomCards.join(VMManagerDetailSection::sectionSeparator);
+ display_table[VMManager::Display::Name::IsaRom] = IsaRomCards.join(VMManagerDetailSection::sectionSeparator);
}
bool
@@ -1081,6 +1081,7 @@ VMManagerSystem::startServer() {
connect(socket_server, &VMManagerServerSocket::windowStatusChanged, this, &VMManagerSystem::windowStatusChangeReceived);
connect(socket_server, &VMManagerServerSocket::runningStatusChanged, this, &VMManagerSystem::runningStatusChangeReceived);
connect(socket_server, &VMManagerServerSocket::configurationChanged, this, &VMManagerSystem::configurationChangeReceived);
+ connect(socket_server, &VMManagerServerSocket::globalConfigurationChanged, this, &VMManagerSystem::globalConfigurationChanged);
connect(socket_server, &VMManagerServerSocket::winIdReceived, this, [this] (WId id) { this->id = id; });
return true;
} else {
@@ -1119,11 +1120,17 @@ VMManagerSystem::windowStatusChangeReceived(int status)
processStatusChanged();
}
QString
-VMManagerSystem::getDisplayValue(Display::Name key)
+VMManagerSystem::getDisplayValue(VMManager::Display::Name key)
{
return (display_table.contains(key)) ? display_table[key] : "";
}
+void
+VMManagerSystem::sendGlobalConfigurationChanged()
+{
+ socket_server->serverSendMessage(VMManagerProtocol::ManagerMessage::GlobalConfigurationChanged);
+}
+
void
VMManagerSystem::shutdownRequestButtonPressed()
{
diff --git a/src/qt/qt_vmmanager_system.hpp b/src/qt/qt_vmmanager_system.hpp
index 5914e46cb..e40e2d4e1 100644
--- a/src/qt/qt_vmmanager_system.hpp
+++ b/src/qt/qt_vmmanager_system.hpp
@@ -129,6 +129,7 @@ public slots:
void shutdownForceButtonPressed();
void cadButtonPressed();
void reloadConfig();
+ void sendGlobalConfigurationChanged();
public:
QDateTime timestamp();
void setIcon(const QString &newIcon);
@@ -157,6 +158,7 @@ signals:
void itemDataChanged();
void clientProcessStatusChanged();
void configurationChanged(const QString &uuid);
+ void globalConfigurationChanged();
private:
void loadSettings();
diff --git a/src/qt/qt_vmmanager_windarkmodefilter.cpp b/src/qt/qt_vmmanager_windarkmodefilter.cpp
index 195419ad9..c95bc0c0f 100644
--- a/src/qt/qt_vmmanager_windarkmodefilter.cpp
+++ b/src/qt/qt_vmmanager_windarkmodefilter.cpp
@@ -38,6 +38,48 @@
static bool NewDarkMode = FALSE;
+void
+WindowsDarkModeFilter::reselectDarkMode()
+{
+ bool OldDarkMode = NewDarkMode;
+
+ if (!util::isWindowsLightTheme()) {
+ QFile f(":qdarkstyle/dark/darkstyle.qss");
+
+ if (!f.exists())
+ printf("Unable to set stylesheet, file not found\n");
+ else {
+ f.open(QFile::ReadOnly | QFile::Text);
+ QTextStream ts(&f);
+ qApp->setStyleSheet(ts.readAll());
+ }
+ QPalette palette(qApp->palette());
+ palette.setColor(QPalette::Link, Qt::white);
+ palette.setColor(QPalette::LinkVisited, Qt::lightGray);
+ qApp->setPalette(palette);
+ window->resize(window->size());
+
+ NewDarkMode = TRUE;
+ } else {
+ qApp->setStyleSheet("");
+ QPalette palette(qApp->palette());
+ palette.setColor(QPalette::Link, Qt::blue);
+ palette.setColor(QPalette::LinkVisited, Qt::magenta);
+ qApp->setPalette(palette);
+ window->resize(window->size());
+ NewDarkMode = FALSE;
+ }
+ window->updateDarkMode();
+
+ if (NewDarkMode != OldDarkMode) QTimer::singleShot(1000, [this] () {
+ BOOL DarkMode = NewDarkMode;
+ DwmSetWindowAttribute((HWND) window->winId(),
+ DWMWA_USE_IMMERSIVE_DARK_MODE,
+ (LPCVOID) &DarkMode,
+ sizeof(DarkMode));
+ });
+}
+
void
WindowsDarkModeFilter::setWindow(VMManagerMainWindow *window)
{
@@ -52,45 +94,9 @@ WindowsDarkModeFilter::nativeEventFilter(const QByteArray &eventType, void *mess
if ((msg != nullptr) && (msg->message == WM_SETTINGCHANGE)) {
if ((((void *) msg->lParam) != nullptr) &&
- (wcscmp(L"ImmersiveColorSet", (wchar_t*)msg->lParam) == 0)) {
-
- bool OldDarkMode = NewDarkMode;
-
- if (!util::isWindowsLightTheme()) {
- QFile f(":qdarkstyle/dark/darkstyle.qss");
-
- if (!f.exists())
- printf("Unable to set stylesheet, file not found\n");
- else {
- f.open(QFile::ReadOnly | QFile::Text);
- QTextStream ts(&f);
- qApp->setStyleSheet(ts.readAll());
- }
- QPalette palette(qApp->palette());
- palette.setColor(QPalette::Link, Qt::white);
- palette.setColor(QPalette::LinkVisited, Qt::lightGray);
- qApp->setPalette(palette);
- window->resize(window->size());
-
- NewDarkMode = TRUE;
- } else {
- qApp->setStyleSheet("");
- QPalette palette(qApp->palette());
- palette.setColor(QPalette::Link, Qt::blue);
- palette.setColor(QPalette::LinkVisited, Qt::magenta);
- qApp->setPalette(palette);
- window->resize(window->size());
- NewDarkMode = FALSE;
- }
- window->updateDarkMode();
-
- if (NewDarkMode != OldDarkMode) QTimer::singleShot(1000, [this] () {
- BOOL DarkMode = NewDarkMode;
- DwmSetWindowAttribute((HWND) window->winId(),
- DWMWA_USE_IMMERSIVE_DARK_MODE,
- (LPCVOID) &DarkMode,
- sizeof(DarkMode));
- });
+ (wcscmp(L"ImmersiveColorSet", (wchar_t*)msg->lParam) == 0) &&
+ color_scheme == 0) {
+ reselectDarkMode();
}
}
}
diff --git a/src/qt/qt_vmmanager_windarkmodefilter.hpp b/src/qt/qt_vmmanager_windarkmodefilter.hpp
index 4f6b28a6e..e89b22acd 100644
--- a/src/qt/qt_vmmanager_windarkmodefilter.hpp
+++ b/src/qt/qt_vmmanager_windarkmodefilter.hpp
@@ -39,6 +39,7 @@ public:
WindowsDarkModeFilter() = default;
void setWindow(VMManagerMainWindow *window);
bool nativeEventFilter(const QByteArray &eventType, void *message, result_t *result) override;
+ void reselectDarkMode();
private:
VMManagerMainWindow *window;
diff --git a/src/qt/qt_winrawinputfilter.cpp b/src/qt/qt_winrawinputfilter.cpp
index 9b7adce1d..9029f4fcd 100644
--- a/src/qt/qt_winrawinputfilter.cpp
+++ b/src/qt/qt_winrawinputfilter.cpp
@@ -74,7 +74,9 @@ extern void win_keyboard_handle(uint32_t scancode, int up, int e0, int e1);
#include "qt_util.hpp"
#include "ui_qt_mainwindow.h"
-static bool NewDarkMode = FALSE;
+bool NewDarkMode = FALSE;
+
+extern MainWindow* main_window;
struct
{
@@ -307,6 +309,56 @@ device_change(WPARAM wParam, LPARAM lParam)
}
}
+void
+selectDarkMode()
+{
+ bool OldDarkMode = NewDarkMode;
+
+ if (!util::isWindowsLightTheme()) {
+ QFile f(":qdarkstyle/dark/darkstyle.qss");
+
+ if (!f.exists())
+ printf("Unable to set stylesheet, file not found\n");
+ else {
+ f.open(QFile::ReadOnly | QFile::Text);
+ QTextStream ts(&f);
+ qApp->setStyleSheet(ts.readAll());
+ }
+ QPalette palette(qApp->palette());
+ palette.setColor(QPalette::Link, Qt::white);
+ palette.setColor(QPalette::LinkVisited, Qt::lightGray);
+ qApp->setPalette(palette);
+ NewDarkMode = TRUE;
+ } else {
+ qApp->setStyleSheet("");
+ QPalette palette(qApp->palette());
+ palette.setColor(QPalette::Link, Qt::blue);
+ palette.setColor(QPalette::LinkVisited, Qt::magenta);
+ qApp->setPalette(palette);
+ NewDarkMode = FALSE;
+ }
+
+ if (NewDarkMode != OldDarkMode)
+ QTimer::singleShot(1000, []() {
+ BOOL DarkMode = NewDarkMode;
+ DwmSetWindowAttribute((HWND) main_window->winId(),
+ DWMWA_USE_IMMERSIVE_DARK_MODE,
+ (LPCVOID) &DarkMode,
+ sizeof(DarkMode));
+
+ main_window->resizeContents(monitors[0].mon_scrnsz_x,
+ monitors[0].mon_scrnsz_y);
+
+ for (int i = 1; i < MONITORS_NUM; i++) {
+ auto mon = &(monitors[i]);
+
+ if ((main_window->renderers[i] != nullptr) && !main_window->renderers[i]->isHidden())
+ main_window->resizeContentsMonitor(mon->mon_scrnsz_x,
+ mon->mon_scrnsz_y, i);
+ }
+ });
+}
+
bool
WindowsRawInputFilter::nativeEventFilter(const QByteArray &eventType, void *message, result_t *result)
{
@@ -328,7 +380,8 @@ WindowsRawInputFilter::nativeEventFilter(const QByteArray &eventType, void *mess
return true;
case WM_SETTINGCHANGE:
if ((((void *) msg->lParam) != nullptr) &&
- (wcscmp(L"ImmersiveColorSet", (wchar_t*)msg->lParam) == 0)) {
+ (wcscmp(L"ImmersiveColorSet", (wchar_t*)msg->lParam) == 0) &&
+ color_scheme == 0) {
bool OldDarkMode = NewDarkMode;
#if 0
diff --git a/src/sio/sio_um8669f.c b/src/sio/sio_um8669f.c
index f0460ada9..96c37573d 100644
--- a/src/sio/sio_um8669f.c
+++ b/src/sio/sio_um8669f.c
@@ -209,6 +209,9 @@ um8669f_pnp_config_changed(uint8_t ld, isapnp_device_config_t *config, void *pri
if (config->activate && (config->io[0].base != ISAPNP_IO_DISABLED)) {
um8669f_log("UM8669F: LPT enabled at port %04X IRQ %d\n", config->io[0].base, config->irq[0].irq);
lpt_port_setup(dev->lpt, config->io[0].base);
+
+ lpt_port_irq(dev->lpt, config->irq[0].irq);
+ lpt_port_dma(dev->lpt, (config->dma[0].dma == ISAPNP_DMA_DISABLED) ? -1 : config->dma[0].dma);
} else {
um8669f_log("UM8669F: LPT disabled\n");
}
diff --git a/src/sound/snd_lpt_dac.c b/src/sound/snd_lpt_dac.c
index 99cf66916..33b197230 100644
--- a/src/sound/snd_lpt_dac.c
+++ b/src/sound/snd_lpt_dac.c
@@ -124,7 +124,6 @@ const lpt_device_t lpt_dac_device = {
.close = dac_close,
.write_data = dac_write_data,
.write_ctrl = dac_write_ctrl,
- .autofeed = NULL,
.strobe = dac_strobe,
.read_status = dac_read_status,
.read_ctrl = NULL,
@@ -141,7 +140,6 @@ const lpt_device_t lpt_dac_stereo_device = {
.close = dac_close,
.write_data = dac_write_data,
.write_ctrl = dac_write_ctrl,
- .autofeed = NULL,
.strobe = dac_strobe,
.read_status = dac_read_status,
.read_ctrl = NULL,
diff --git a/src/sound/snd_lpt_dss.c b/src/sound/snd_lpt_dss.c
index 206f44ec8..5ea0048f4 100644
--- a/src/sound/snd_lpt_dss.c
+++ b/src/sound/snd_lpt_dss.c
@@ -139,7 +139,6 @@ const lpt_device_t dss_device = {
.init = dss_init,
.close = dss_close,
.write_data = dss_write_data,
- .autofeed = NULL,
.strobe = NULL,
.write_ctrl = dss_write_ctrl,
.read_status = dss_read_status,
diff --git a/src/unix/unix_serial_passthrough.c b/src/unix/unix_serial_passthrough.c
index 873c706b9..f6f953eee 100644
--- a/src/unix/unix_serial_passthrough.c
+++ b/src/unix/unix_serial_passthrough.c
@@ -57,8 +57,13 @@ plat_serpt_read(void *priv, uint8_t *data)
fd_set rdfds;
switch (dev->mode) {
+ case SERPT_MODE_HOSTSER: {
+ if (read(dev->master_fd, data, 1) > 0) {
+ return 1;
+ }
+ return 0;
+ }
case SERPT_MODE_VCON:
- case SERPT_MODE_HOSTSER:
FD_ZERO(&rdfds);
FD_SET(dev->master_fd, &rdfds);
tv.tv_sec = 0;
diff --git a/src/video/CMakeLists.txt b/src/video/CMakeLists.txt
index f34455136..6301956c5 100644
--- a/src/video/CMakeLists.txt
+++ b/src/video/CMakeLists.txt
@@ -143,6 +143,10 @@ add_library(vid OBJECT
)
+if(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
+ target_include_directories(vid PRIVATE /usr/local/include)
+endif()
+
if(G100)
target_compile_definitions(vid PRIVATE USE_G100)
endif()