C++: fix including the generated file in several translation units

This commit is contained in:
Olivier Goffart 2023-02-17 15:25:02 +01:00 committed by Olivier Goffart
parent 155b1443e2
commit 81cb89d374
8 changed files with 76 additions and 1 deletions

View file

@ -49,6 +49,8 @@ target_link_libraries(test_eventloop PRIVATE Threads::Threads)
slint_test(models)
slint_test(window)
add_subdirectory(multiple-includes)
if(SLINT_FEATURE_EXPERIMENTAL)
if(Qt6_FOUND)
add_subdirectory(manual/platform_qt)

View file

@ -0,0 +1,7 @@
# Copyright © SixtyFPS GmbH <info@slint-ui.com>
# SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-commercial
add_executable(multiple-includes main.cpp logic.cpp)
target_link_libraries(multiple-includes PRIVATE Slint::Slint)
slint_target_sources(multiple-includes appwindow.slint)

View file

@ -0,0 +1 @@
This is a test making sure that the header can be included in several file without causing multiple definitions

View file

@ -0,0 +1,35 @@
// Copyright © SixtyFPS GmbH <info@slint-ui.com>
// SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-commercial
import {Button, AboutSlint} from "std-widgets.slint";
export global Logic {
callback increment(int) -> int;
}
export struct FooBar {
abc: int, def: string
}
component R {
property <FooBar> foo;
Rectangle {
TouchArea {}
}
}
export component App inherits Window {
preferred-width: 800px;
preferred-height: 600px;
property <int> count;
VerticalLayout {
AboutSlint { }
Button {
text: "Hello";
clicked => { count = Logic.increment(count); }
}
Text { text: count; }
R { }
}
}

View file

@ -0,0 +1,10 @@
// Copyright © SixtyFPS GmbH <info@slint-ui.com>
// SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-commercial
#include "logic.h"
#include "appwindow.h"
void setup_logic(const Logic &logic)
{
logic.on_increment([](int x) { return x + 1; });
}

View file

@ -0,0 +1,8 @@
// Copyright © SixtyFPS GmbH <info@slint-ui.com>
// SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-commercial
#pragma once
struct Logic;
void setup_logic(const Logic &);

View file

@ -0,0 +1,12 @@
// Copyright © SixtyFPS GmbH <info@slint-ui.com>
// SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-commercial
#include "logic.h"
#include "appwindow.h"
int main(int argc, char **argv)
{
auto my_ui = App::create();
setup_logic(my_ui->global<Logic>());
my_ui->run();
}