Skip to content

Commit edb627e

Browse files
author
a.iudin
committed
Fix suggestions popup positioning and tag panel styling
Commit Summary: - Improve suggestions popup positioning with screen bounds check - Replace wildcard imports with explicit imports - Fix tag panel sizing and styling - Properly scale tag height using JBUI - Improve close button margins and sizing
1 parent ad472f6 commit edb627e

File tree

2 files changed

+44
-13
lines changed

2 files changed

+44
-13
lines changed

Diff for: src/main/kotlin/ee/carlrobert/codegpt/ui/textarea/header/tag/TagPanel.kt

+14-4
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,12 @@ import com.intellij.util.IconUtil
99
import com.intellij.util.ui.JBUI
1010
import ee.carlrobert.codegpt.ui.textarea.PromptTextField
1111
import ee.carlrobert.codegpt.ui.textarea.header.PaintUtil
12-
import java.awt.*
12+
import java.awt.Cursor
13+
import java.awt.Dimension
14+
import java.awt.Graphics
15+
import java.awt.GridBagConstraints
16+
import java.awt.GridBagLayout
17+
import javax.swing.BorderFactory
1318
import javax.swing.Icon
1419
import javax.swing.JButton
1520
import javax.swing.JToggleButton
@@ -46,7 +51,7 @@ abstract class TagPanel(
4651
val closeButtonWidth = if (closeButton.isVisible) closeButton.preferredSize.width else 0
4752
return Dimension(
4853
label.preferredSize.width + closeButtonWidth + insets.left + insets.right,
49-
20
54+
JBUI.scale(20)
5055
)
5156
}
5257

@@ -134,8 +139,13 @@ abstract class TagPanel(
134139
onClose()
135140
}
136141

137-
preferredSize = Dimension(Close.iconWidth, Close.iconHeight)
138-
border = JBUI.Borders.emptyLeft(4)
142+
val iconSize = Dimension(Close.iconWidth, Close.iconHeight)
143+
preferredSize = iconSize
144+
minimumSize = iconSize
145+
maximumSize = iconSize
146+
147+
border = BorderFactory.createEmptyBorder(0, 4, 0, 4)
148+
139149
isContentAreaFilled = false
140150
toolTipText = "Remove"
141151
rolloverIcon = AllIcons.Actions.CloseHovered

Diff for: src/main/kotlin/ee/carlrobert/codegpt/ui/textarea/suggestion/SuggestionsPopupManager.kt

+30-9
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,20 @@ import com.intellij.openapi.project.Project
44
import com.intellij.openapi.ui.popup.JBPopup
55
import com.intellij.vcsUtil.showAbove
66
import ee.carlrobert.codegpt.ui.textarea.UserInputPanel
7-
import ee.carlrobert.codegpt.ui.textarea.suggestion.item.*
8-
import kotlinx.coroutines.*
7+
import ee.carlrobert.codegpt.ui.textarea.suggestion.item.DocumentationSuggestionGroupItem
8+
import ee.carlrobert.codegpt.ui.textarea.suggestion.item.FileSuggestionGroupItem
9+
import ee.carlrobert.codegpt.ui.textarea.suggestion.item.FolderSuggestionGroupItem
10+
import ee.carlrobert.codegpt.ui.textarea.suggestion.item.GitSuggestionGroupItem
11+
import ee.carlrobert.codegpt.ui.textarea.suggestion.item.PersonaSuggestionGroupItem
12+
import ee.carlrobert.codegpt.ui.textarea.suggestion.item.SuggestionActionItem
13+
import ee.carlrobert.codegpt.ui.textarea.suggestion.item.SuggestionGroupItem
14+
import ee.carlrobert.codegpt.ui.textarea.suggestion.item.SuggestionItem
15+
import ee.carlrobert.codegpt.ui.textarea.suggestion.item.WebSearchActionItem
16+
import kotlinx.coroutines.CoroutineScope
17+
import kotlinx.coroutines.Dispatchers
18+
import kotlinx.coroutines.SupervisorJob
19+
import kotlinx.coroutines.launch
20+
import kotlinx.coroutines.withContext
921
import java.awt.Dimension
1022
import java.awt.Point
1123
import javax.swing.DefaultListModel
@@ -20,7 +32,7 @@ class SuggestionsPopupManager(
2032
private val scope = CoroutineScope(Dispatchers.Default + SupervisorJob())
2133
private var selectedActionGroup: SuggestionGroupItem? = null
2234
private var popup: JBPopup? = null
23-
private var originalLocation: Point? = null
35+
2436
private val listModel = DefaultListModel<SuggestionItem>().apply {
2537
addListDataListener(object : ListDataListener {
2638
override fun intervalAdded(e: ListDataEvent) = adjustPopupSize()
@@ -44,12 +56,12 @@ class SuggestionsPopupManager(
4456
popup = SuggestionsPopupBuilder()
4557
.setPreferableFocusComponent(component)
4658
.setOnCancel {
47-
originalLocation = null
4859
true
4960
}
5061
.build(list)
62+
5163
popup?.showAbove(userInputPanel)
52-
originalLocation = userInputPanel.locationOnScreen
64+
5365
reset(true)
5466
selectNext()
5567
}
@@ -117,9 +129,18 @@ class SuggestionsPopupManager(
117129
list.repaint()
118130

119131
popup?.size = Dimension(list.preferredSize.width, list.preferredSize.height + 32)
120-
originalLocation?.let { original ->
121-
val newY = original.y - list.preferredSize.height - 32
122-
popup?.setLocation(Point(original.x, maxOf(newY, 0)))
123-
}
132+
133+
val bounds = userInputPanel.bounds
134+
val locationOnScreen = userInputPanel.locationOnScreen
135+
136+
val deviceConfiguration = userInputPanel.graphicsConfiguration
137+
val screenBounds = deviceConfiguration.bounds
138+
139+
val popupSize = popup?.size ?: Dimension(0, 0)
140+
val newY = locationOnScreen.y - popupSize.height
141+
142+
val adjustedY = if (newY < screenBounds.y) locationOnScreen.y + bounds.height else newY
143+
144+
popup?.setLocation(Point(locationOnScreen.x, adjustedY))
124145
}
125146
}

0 commit comments

Comments
 (0)