fix: wrap Entry.setText to prevent segfault for empty strings
This commit is contained in:
parent
8aa0555a2a
commit
5faa505235
|
@ -17,7 +17,7 @@ val jbAnnotationsVersion by extra("24.0.1")
|
||||||
val lwjglVersion by extra("3.3.2")
|
val lwjglVersion by extra("3.3.2")
|
||||||
val imguiVersion by extra("1.86.10")
|
val imguiVersion by extra("1.86.10")
|
||||||
// launcher-gtk
|
// launcher-gtk
|
||||||
val javagiVersion by extra("0.6.0")
|
val javagiVersion by extra("0.6.1")
|
||||||
|
|
||||||
val flavorProp: String by extra(prop("flavor", "custom"))
|
val flavorProp: String by extra(prop("flavor", "custom"))
|
||||||
if (!setOf("custom", "maven", "fat", "windows", "linux", "macos").contains(flavorProp)) throw IllegalStateException("Unsupported flavor: $flavorProp")
|
if (!setOf("custom", "maven", "fat", "windows", "linux", "macos").contains(flavorProp)) throw IllegalStateException("Unsupported flavor: $flavorProp")
|
||||||
|
|
|
@ -20,6 +20,7 @@ repositories {
|
||||||
maven("https://jitpack.io") {
|
maven("https://jitpack.io") {
|
||||||
content {
|
content {
|
||||||
includeGroup("com.github.jwharm.java-gi")
|
includeGroup("com.github.jwharm.java-gi")
|
||||||
|
includeGroup("com.github.jwharm")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package io.gitlab.jfronny.inceptum.gtk.control
|
package io.gitlab.jfronny.inceptum.gtk.control
|
||||||
|
|
||||||
|
import io.gitlab.jfronny.inceptum.gtk.util.kText
|
||||||
import org.gnome.gtk.Entry
|
import org.gnome.gtk.Entry
|
||||||
import java.util.function.Consumer
|
import java.util.function.Consumer
|
||||||
|
|
||||||
|
@ -7,7 +8,7 @@ class KEntry(value: String? = ""): Entry() {
|
||||||
private val onChange = ArrayList<Consumer<String>>()
|
private val onChange = ArrayList<Consumer<String>>()
|
||||||
|
|
||||||
init {
|
init {
|
||||||
text = value ?: ""
|
kText = value ?: ""
|
||||||
onChanged { onChange.forEach { it.accept(text) } }
|
onChanged { onChange.forEach { it.accept(text) } }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,8 @@ package io.gitlab.jfronny.inceptum.gtk.util
|
||||||
|
|
||||||
import io.gitlab.jfronny.inceptum.gtk.control.ILabel
|
import io.gitlab.jfronny.inceptum.gtk.control.ILabel
|
||||||
import org.gnome.adw.ActionRow
|
import org.gnome.adw.ActionRow
|
||||||
|
import org.gnome.gtk.Entry
|
||||||
|
import org.gnome.gtk.EntryBuffer
|
||||||
import org.gnome.gtk.Label
|
import org.gnome.gtk.Label
|
||||||
import org.gnome.gtk.MessageDialog
|
import org.gnome.gtk.MessageDialog
|
||||||
import org.gnome.gtk.Widget
|
import org.gnome.gtk.Widget
|
||||||
|
@ -31,4 +33,14 @@ var MessageDialog.markup: String
|
||||||
set(value) { setMarkup(value) }
|
set(value) { setMarkup(value) }
|
||||||
get() = throw NotImplementedError()
|
get() = throw NotImplementedError()
|
||||||
|
|
||||||
fun ActionRow.fixSubtitle() = ILabel.theme(firstChild!!.lastChild!!.prevSibling!!.lastChild as Label, ILabel.Mode.SUBTITLE)
|
fun ActionRow.fixSubtitle() = ILabel.theme(firstChild!!.lastChild!!.prevSibling!!.lastChild as Label, ILabel.Mode.SUBTITLE)
|
||||||
|
|
||||||
|
// Work around a segfault with empty entries
|
||||||
|
var Entry.kText: String?
|
||||||
|
get() = text
|
||||||
|
set(value) {
|
||||||
|
if (value == "") buffer.clear()
|
||||||
|
else text = value
|
||||||
|
}
|
||||||
|
|
||||||
|
fun EntryBuffer.clear() = deleteText(0, length)
|
|
@ -10,6 +10,7 @@ import io.gitlab.jfronny.inceptum.gtk.control.KEntry
|
||||||
import io.gitlab.jfronny.inceptum.gtk.control.assistant.KAssistant
|
import io.gitlab.jfronny.inceptum.gtk.control.assistant.KAssistant
|
||||||
import io.gitlab.jfronny.inceptum.gtk.schedule
|
import io.gitlab.jfronny.inceptum.gtk.schedule
|
||||||
import io.gitlab.jfronny.inceptum.gtk.util.I18n
|
import io.gitlab.jfronny.inceptum.gtk.util.I18n
|
||||||
|
import io.gitlab.jfronny.inceptum.gtk.util.kText
|
||||||
import io.gitlab.jfronny.inceptum.gtk.util.toTypedArray
|
import io.gitlab.jfronny.inceptum.gtk.util.toTypedArray
|
||||||
import io.gitlab.jfronny.inceptum.gtk.window.dialog.ProcessStateWatcherDialog
|
import io.gitlab.jfronny.inceptum.gtk.window.dialog.ProcessStateWatcherDialog
|
||||||
import io.gitlab.jfronny.inceptum.launcher.api.FabricMetaApi
|
import io.gitlab.jfronny.inceptum.launcher.api.FabricMetaApi
|
||||||
|
@ -103,7 +104,7 @@ class NewInstanceWindow(app: Application) : KAssistant(app) {
|
||||||
append(entry)
|
append(entry)
|
||||||
onOpen {
|
onOpen {
|
||||||
name = InstanceNameTool.getDefaultName(gameVersion!!.id, useFabric)
|
name = InstanceNameTool.getDefaultName(gameVersion!!.id, useFabric)
|
||||||
entry.text = name
|
entry.kText = name
|
||||||
}
|
}
|
||||||
|
|
||||||
setComplete(true)
|
setComplete(true)
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package io.gitlab.jfronny.inceptum.gtk.window.dialog
|
package io.gitlab.jfronny.inceptum.gtk.window.dialog
|
||||||
|
|
||||||
|
import io.gitlab.jfronny.inceptum.gtk.util.kText
|
||||||
import org.gnome.gtk.*
|
import org.gnome.gtk.*
|
||||||
|
|
||||||
class StringInputDialog(parent: Window?, flags: DialogFlags, type: MessageType, buttons: ButtonsType, message: String, value: String) : MessageDialog(parent, flags, type, buttons, message) {
|
class StringInputDialog(parent: Window?, flags: DialogFlags, type: MessageType, buttons: ButtonsType, message: String, value: String) : MessageDialog(parent, flags, type, buttons, message) {
|
||||||
|
@ -7,7 +8,7 @@ class StringInputDialog(parent: Window?, flags: DialogFlags, type: MessageType,
|
||||||
|
|
||||||
init {
|
init {
|
||||||
(messageArea as Box).append(entry)
|
(messageArea as Box).append(entry)
|
||||||
entry.text = value
|
entry.kText = value
|
||||||
}
|
}
|
||||||
|
|
||||||
val input: String get() = entry.text
|
val input: String get() = entry.text
|
||||||
|
|
|
@ -8,10 +8,7 @@ import io.gitlab.jfronny.inceptum.common.MetaHolder
|
||||||
import io.gitlab.jfronny.inceptum.common.Utils
|
import io.gitlab.jfronny.inceptum.common.Utils
|
||||||
import io.gitlab.jfronny.inceptum.gtk.control.ILabel
|
import io.gitlab.jfronny.inceptum.gtk.control.ILabel
|
||||||
import io.gitlab.jfronny.inceptum.gtk.control.settings.SectionedSettingsTab
|
import io.gitlab.jfronny.inceptum.gtk.control.settings.SectionedSettingsTab
|
||||||
import io.gitlab.jfronny.inceptum.gtk.util.I18n
|
import io.gitlab.jfronny.inceptum.gtk.util.*
|
||||||
import io.gitlab.jfronny.inceptum.gtk.util.Memory
|
|
||||||
import io.gitlab.jfronny.inceptum.gtk.util.markup
|
|
||||||
import io.gitlab.jfronny.inceptum.gtk.util.toTypedArray
|
|
||||||
import io.gitlab.jfronny.inceptum.launcher.api.FabricMetaApi
|
import io.gitlab.jfronny.inceptum.launcher.api.FabricMetaApi
|
||||||
import io.gitlab.jfronny.inceptum.launcher.api.McApi
|
import io.gitlab.jfronny.inceptum.launcher.api.McApi
|
||||||
import io.gitlab.jfronny.inceptum.launcher.system.instance.InstanceList
|
import io.gitlab.jfronny.inceptum.launcher.system.instance.InstanceList
|
||||||
|
@ -150,7 +147,7 @@ class GeneralTab(window: InstanceSettingsWindow) : SectionedSettingsTab<Instance
|
||||||
dialog.onResponse { responseId: Int ->
|
dialog.onResponse { responseId: Int ->
|
||||||
if (responseId == ResponseType.ACCEPT.value) {
|
if (responseId == ResponseType.ACCEPT.value) {
|
||||||
val file = dialog.file!!.path
|
val file = dialog.file!!.path
|
||||||
if (file != null) entry.text = file
|
if (file != null) entry.kText = file
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dialog.show()
|
dialog.show()
|
||||||
|
|
Loading…
Reference in New Issue