From 189d661b7f7a033a11ac6df99807472c55fffd79 Mon Sep 17 00:00:00 2001 From: Pietro Gagliardi Date: Mon, 25 Apr 2016 12:52:54 -0400 Subject: [PATCH] Migrated darwin/tab.m and fixed up the other files. Now for darwin/control.m, then we can test... --- darwin/button.m | 8 ++++++-- darwin/checkbox.m | 8 ++++++-- darwin/combobox.m | 2 ++ darwin/entry.m | 6 +++++- darwin/slider.m | 6 +++++- darwin/tab.m | 41 ++++++++++++++++++++++++++--------------- 6 files changed, 50 insertions(+), 21 deletions(-) diff --git a/darwin/button.m b/darwin/button.m index 6470f32c..01ba55f8 100644 --- a/darwin/button.m +++ b/darwin/button.m @@ -59,9 +59,13 @@ static buttonDelegateClass *buttonDelegate = nil; uiDarwinControlAllDefaultsExceptDestroy(uiButton, button) -static void uiButtonDestroy(uiControl *b) +static void uiButtonDestroy(uiControl *c) { - [buttonDelegate unregisterButton:uiButton(b)]; + uiButton *b = uiButton(c); + + [buttonDelegate unregisterButton:b]; + [b->button release]; + uiFreeControl(uiControl(b)); } char *uiButtonText(uiButton *b) diff --git a/darwin/checkbox.m b/darwin/checkbox.m index 2f2a05bf..73aab165 100644 --- a/darwin/checkbox.m +++ b/darwin/checkbox.m @@ -61,9 +61,13 @@ static checkboxDelegateClass *checkboxDelegate = nil; uiDarwinControlAllDefaultsExceptDestroy(uiCheckbox, button) -static void uiCheckboxDestroy(uiControl *c) +static void uiCheckboxDestroy(uiControl *cc) { - [checkboxDelegate unregisterCheckbox:uiCheckbox(c)]; + uiCheckbox *c = uiCheckbox(cc); + + [checkboxDelegate unregisterCheckbox:c]; + [c->button release]; + uiFreeControl(uiControl(c)); } char *uiCheckboxText(uiCheckbox *c) diff --git a/darwin/combobox.m b/darwin/combobox.m index 93089f76..4eb8a4a3 100644 --- a/darwin/combobox.m +++ b/darwin/combobox.m @@ -110,6 +110,8 @@ static void uiComboboxDestroy(uiControl *cc) [c->pb unbind:@"selectedIndex"]; [c->pbac release]; } + [c->handle release]; + uiFreeControl(uiControl(c)); } void uiComboboxAppend(uiCombobox *c, const char *text) diff --git a/darwin/entry.m b/darwin/entry.m index 73f4f3e9..8121b6db 100644 --- a/darwin/entry.m +++ b/darwin/entry.m @@ -79,7 +79,11 @@ uiDarwinControlAllDefaultsExceptDestroy(uiEntry, textfield) static void uiEntryDestroy(uiControl *c) { - [entryDelegate unregisterEntry:uiEntry(c)]; + uiEntry *e = uiEntry(c); + + [entryDelegate unregisterEntry:e]; + [e->textfield release]; + uiFreeControl(e); } char *uiEntryText(uiEntry *e) diff --git a/darwin/slider.m b/darwin/slider.m index dde9b714..d280ba2e 100644 --- a/darwin/slider.m +++ b/darwin/slider.m @@ -81,7 +81,11 @@ uiDarwinControlAllDefaultsExceptDestroy(uiSlider, slider) static void uiSliderDestroy(uiControl *c) { - [sliderDelegate unregisterSlider:uiSlider(c)]; + uiSlider *s = uiSlider(c); + + [sliderDelegate unregisterSlider:s]; + [s->slider release]; + uiFreeControl(uiControl(s)); } intmax_t uiSliderValue(uiSlider *s) diff --git a/darwin/tab.m b/darwin/tab.m index 09451c2c..c9f5fb76 100644 --- a/darwin/tab.m +++ b/darwin/tab.m @@ -1,6 +1,8 @@ // 15 august 2015 #import "uipriv_darwin.h" +// TODO for this and group, make sure simply relaying ourselves out is enough (are the buttons and title, respectively, intrinsic?) + struct uiTab { uiDarwinControl c; NSTabView *tabview; @@ -12,16 +14,10 @@ struct uiTab { NSMutableArray *margined; // []NSNumber }; -static void onDestroy(uiTab *); - -uiDarwinDefineControlWithOnDestroy( - uiTab, // type name - tabview, // handle - onDestroy(this); // on destroy -) - -static void onDestroy(uiTab *t) +static void uiTabDestroy(uiControl *c) { + uiTab *t = uiTab(c); + // first remove all tab pages so we can destroy all the children while ([t->tabview numberOfTabViewItems] != 0) [t->tabview removeTabViewItem:[t->tabview tabViewItemAtIndex:0]]; @@ -38,9 +34,25 @@ static void onDestroy(uiTab *t) [t->pages release]; [t->views release]; [t->margined release]; + [t->tabview release]; + uiFreeControl(uiControl(t)); } +uiDarwinControlDefaultHandle(uiTab, tabview) +uiDarwinControlDefaultParent(uiTab, tabview) +uiDarwinControlDefaultSetParent(uiTab, tabview) +uiDarwinControlDefaultToplevel(uiTab, tabview) +uiDarwinControlDefaultVisible(uiTab, tabview) +uiDarwinControlDefaultShow(uiTab, tabview) +uiDarwinControlDefaultHide(uiTab, tabview) +uiDarwinControlDefaultEnabled(uiTab, tabview) +uiDarwinControlDefaultEnable(uiTab, tabview) +uiDarwinControlDefaultDisable(uiTab, tabview) + // TODO container update +uiDarwinControlDefaultSyncEnableState(uiTab, tabview) + +uiDarwinControlDefaultSetSuperview(uiTab, tabview) static void tabRelayout(uiDarwinControl *c) { @@ -97,7 +109,7 @@ void uiTabInsertAt(uiTab *t, const char *name, uintmax_t n, uiControl *child) [i setView:view]; [t->tabview insertTabViewItem:i atIndex:n]; - uiDarwinControlTriggerRelayout(uiDarwinControl(t)); + tabRelayout(t); } void uiTabDelete(uiTab *t, uintmax_t n) @@ -120,6 +132,8 @@ void uiTabDelete(uiTab *t, uintmax_t n) i = [t->tabview tabViewItemAtIndex:n]; [t->tabview removeTabViewItem:i]; + + tabRelayout(t); } uintmax_t uiTabNumPages(uiTab *t) @@ -141,14 +155,14 @@ void uiTabSetMargined(uiTab *t, uintmax_t n, int margined) v = [NSNumber numberWithInt:margined]; [t->margined replaceObjectAtIndex:n withObject:v]; - uiDarwinControlTriggerRelayout(uiDarwinControl(t)); + tabRelayout(t); } uiTab *uiNewTab(void) { uiTab *t; - t = (uiTab *) uiNewControl(uiTab); + uiDarwinNewControl(uiTab, t); t->tabview = [[NSTabView alloc] initWithFrame:NSZeroRect]; // also good for NSTabView (same selector and everything) @@ -158,8 +172,5 @@ uiTab *uiNewTab(void) t->views = [NSMutableArray new]; t->margined = [NSMutableArray new]; - uiDarwinFinishNewControl(t, uiTab); - uiDarwinControl(t)->Relayout = tabRelayout; - return t; }