From 0de1a8ec301ea06cf0ea883fcaa0083143c3fe5e Mon Sep 17 00:00:00 2001 From: StapleButter Date: Sun, 17 Sep 2017 23:25:32 +0200 Subject: [PATCH] [melonDS] uiControlSetFocus --- common/control.c | 5 +++++ ui.h | 2 ++ ui_unix.h | 7 +++++++ ui_windows.h | 7 +++++++ unix/window.c | 1 + windows/box.cpp | 1 + windows/form.cpp | 1 + windows/grid.cpp | 1 + windows/group.cpp | 1 + windows/tab.cpp | 1 + windows/window.cpp | 1 + 11 files changed, 28 insertions(+) diff --git a/common/control.c b/common/control.c index 98cb94aa..83254ef2 100644 --- a/common/control.c +++ b/common/control.c @@ -57,6 +57,11 @@ void uiControlDisable(uiControl *c) (*(c->Disable))(c); } +void uiControlSetFocus(uiControl *c) +{ + (*(c->SetFocus))(c); +} + #define uiprivControlSignature 0x7569436F uiControl *uiAllocControl(size_t size, uint32_t OSsig, uint32_t typesig, const char *typenamestr) diff --git a/ui.h b/ui.h index b5fb9a27..f5965648 100644 --- a/ui.h +++ b/ui.h @@ -91,6 +91,7 @@ struct uiControl { int (*Enabled)(uiControl *); void (*Enable)(uiControl *); void (*Disable)(uiControl *); + void (*SetFocus)(uiControl *); }; // TOOD add argument names to all arguments #define uiControl(this) ((uiControl *) (this)) @@ -105,6 +106,7 @@ _UI_EXTERN void uiControlHide(uiControl *); _UI_EXTERN int uiControlEnabled(uiControl *); _UI_EXTERN void uiControlEnable(uiControl *); _UI_EXTERN void uiControlDisable(uiControl *); +_UI_EXTERN void uiControlSetFocus(uiControl *); _UI_EXTERN uiControl *uiAllocControl(size_t n, uint32_t OSsig, uint32_t typesig, const char *typenamestr); _UI_EXTERN void uiFreeControl(uiControl *); diff --git a/ui_unix.h b/ui_unix.h index ed019260..44ba9ef5 100644 --- a/ui_unix.h +++ b/ui_unix.h @@ -83,6 +83,11 @@ _UI_EXTERN void uiUnixControlSetContainer(uiUnixControl *, GtkContainer *, gbool { \ gtk_widget_set_sensitive(type(c)->widget, FALSE); \ } +#define uiUnixControlDefaultSetFocus(type) \ + static void type ## SetFocus(uiControl *c) \ + { \ + gtk_widget_grab_focus(type(c)->widget); \ + } // TODO this whole addedBefore stuff is a MASSIVE HACK. #define uiUnixControlDefaultSetContainer(type) \ static void type ## SetContainer(uiUnixControl *c, GtkContainer *container, gboolean remove) \ @@ -110,6 +115,7 @@ _UI_EXTERN void uiUnixControlSetContainer(uiUnixControl *, GtkContainer *, gbool uiUnixControlDefaultEnabled(type) \ uiUnixControlDefaultEnable(type) \ uiUnixControlDefaultDisable(type) \ + uiUnixControlDefaultSetFocus(type) \ uiUnixControlDefaultSetContainer(type) #define uiUnixControlAllDefaults(type) \ @@ -130,6 +136,7 @@ _UI_EXTERN void uiUnixControlSetContainer(uiUnixControl *, GtkContainer *, gbool uiControl(var)->Enabled = type ## Enabled; \ uiControl(var)->Enable = type ## Enable; \ uiControl(var)->Disable = type ## Disable; \ + uiControl(var)->SetFocus = type ## SetFocus; \ uiUnixControl(var)->SetContainer = type ## SetContainer; // TODO document _UI_EXTERN uiUnixControl *uiUnixAllocControl(size_t n, uint32_t typesig, const char *typenamestr); diff --git a/ui_windows.h b/ui_windows.h index 69dda366..3917c970 100644 --- a/ui_windows.h +++ b/ui_windows.h @@ -102,6 +102,11 @@ _UI_EXTERN void uiWindowsControlChildVisibilityChanged(uiWindowsControl *); uiWindowsControl(c)->enabled = 0; \ uiWindowsControlSyncEnableState(uiWindowsControl(c), uiControlEnabledToUser(c)); \ } +#define uiWindowsControlDefaultSetFocus(type) \ + static void type ## SetFocus(uiControl *c) \ + { \ + SetFocus(type(c)->hwnd); \ + } #define uiWindowsControlDefaultSyncEnableState(type) \ static void type ## SyncEnableState(uiWindowsControl *c, int enabled) \ { \ @@ -152,6 +157,7 @@ _UI_EXTERN void uiWindowsControlChildVisibilityChanged(uiWindowsControl *); uiWindowsControlDefaultEnabled(type) \ uiWindowsControlDefaultEnable(type) \ uiWindowsControlDefaultDisable(type) \ + uiWindowsControlDefaultSetFocus(type) \ uiWindowsControlDefaultSyncEnableState(type) \ uiWindowsControlDefaultSetParentHWND(type) \ uiWindowsControlDefaultMinimumSizeChanged(type) \ @@ -177,6 +183,7 @@ _UI_EXTERN void uiWindowsControlChildVisibilityChanged(uiWindowsControl *); uiControl(var)->Enabled = type ## Enabled; \ uiControl(var)->Enable = type ## Enable; \ uiControl(var)->Disable = type ## Disable; \ + uiControl(var)->SetFocus = type ## SetFocus; \ uiWindowsControl(var)->SyncEnableState = type ## SyncEnableState; \ uiWindowsControl(var)->SetParentHWND = type ## SetParentHWND; \ uiWindowsControl(var)->MinimumSize = type ## MinimumSize; \ diff --git a/unix/window.c b/unix/window.c index c5ba2038..a4b469d4 100644 --- a/unix/window.c +++ b/unix/window.c @@ -112,6 +112,7 @@ uiUnixControlDefaultHide(uiWindow) uiUnixControlDefaultEnabled(uiWindow) uiUnixControlDefaultEnable(uiWindow) uiUnixControlDefaultDisable(uiWindow) +uiUnixControlDefaultSetFocus(uiWindow) // TODO? uiUnixControlDefaultSetContainer(uiWindow) diff --git a/windows/box.cpp b/windows/box.cpp index 9567954b..c3069895 100644 --- a/windows/box.cpp +++ b/windows/box.cpp @@ -143,6 +143,7 @@ uiWindowsControlDefaultHide(uiBox) uiWindowsControlDefaultEnabled(uiBox) uiWindowsControlDefaultEnable(uiBox) uiWindowsControlDefaultDisable(uiBox) +uiWindowsControlDefaultSetFocus(uiBox) static void uiBoxSyncEnableState(uiWindowsControl *c, int enabled) { diff --git a/windows/form.cpp b/windows/form.cpp index ed194671..6cd2923b 100644 --- a/windows/form.cpp +++ b/windows/form.cpp @@ -147,6 +147,7 @@ uiWindowsControlDefaultHide(uiForm) uiWindowsControlDefaultEnabled(uiForm) uiWindowsControlDefaultEnable(uiForm) uiWindowsControlDefaultDisable(uiForm) +uiWindowsControlDefaultSetFocus(uiForm) static void uiFormSyncEnableState(uiWindowsControl *c, int enabled) { diff --git a/windows/grid.cpp b/windows/grid.cpp index cac87aff..a412a950 100644 --- a/windows/grid.cpp +++ b/windows/grid.cpp @@ -436,6 +436,7 @@ uiWindowsControlDefaultHide(uiGrid) uiWindowsControlDefaultEnabled(uiGrid) uiWindowsControlDefaultEnable(uiGrid) uiWindowsControlDefaultDisable(uiGrid) +uiWindowsControlDefaultSetFocus(uiGrid) static void uiGridSyncEnableState(uiWindowsControl *c, int enabled) { diff --git a/windows/group.cpp b/windows/group.cpp index 1a2cc6ed..d40c78bc 100644 --- a/windows/group.cpp +++ b/windows/group.cpp @@ -75,6 +75,7 @@ uiWindowsControlDefaultHide(uiGroup) uiWindowsControlDefaultEnabled(uiGroup) uiWindowsControlDefaultEnable(uiGroup) uiWindowsControlDefaultDisable(uiGroup) +uiWindowsControlDefaultSetFocus(uiGroup) static void uiGroupSyncEnableState(uiWindowsControl *c, int enabled) { diff --git a/windows/tab.cpp b/windows/tab.cpp index e7239585..03017a2c 100644 --- a/windows/tab.cpp +++ b/windows/tab.cpp @@ -112,6 +112,7 @@ uiWindowsControlDefaultHide(uiTab) uiWindowsControlDefaultEnabled(uiTab) uiWindowsControlDefaultEnable(uiTab) uiWindowsControlDefaultDisable(uiTab) +uiWindowsControlDefaultSetFocus(uiTab) static void uiTabSyncEnableState(uiWindowsControl *c, int enabled) { diff --git a/windows/window.cpp b/windows/window.cpp index 2ea5b7ce..ebbc6511 100644 --- a/windows/window.cpp +++ b/windows/window.cpp @@ -232,6 +232,7 @@ static void uiWindowHide(uiControl *c) uiWindowsControlDefaultEnabled(uiWindow) uiWindowsControlDefaultEnable(uiWindow) uiWindowsControlDefaultDisable(uiWindow) +uiWindowsControlDefaultSetFocus(uiWindow) // TODO we need to do something about undocumented fields in the OS control types uiWindowsControlDefaultSyncEnableState(uiWindow) // TODO