|
@@ -67,6 +67,26 @@ void LineEdit::_gui_input(Ref<InputEvent> p_event) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
+ if (is_middle_mouse_paste_enabled() && b->is_pressed() && b->get_button_index() == BUTTON_MIDDLE && is_editable() && OS::get_singleton()->has_feature("primary_clipboard")) {
|
|
|
+ String paste_buffer = OS::get_singleton()->get_clipboard_primary().strip_escapes();
|
|
|
+
|
|
|
+ selection.enabled = false;
|
|
|
+ set_cursor_at_pixel_pos(b->get_position().x);
|
|
|
+ if (!paste_buffer.empty()) {
|
|
|
+ append_at_cursor(paste_buffer);
|
|
|
+
|
|
|
+ if (!text_changed_dirty) {
|
|
|
+ if (is_inside_tree()) {
|
|
|
+ MessageQueue::get_singleton()->push_call(this, "_text_changed");
|
|
|
+ }
|
|
|
+ text_changed_dirty = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ grab_focus();
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
if (b->get_button_index() != BUTTON_LEFT) {
|
|
|
return;
|
|
|
}
|
|
@@ -100,6 +120,9 @@ void LineEdit::_gui_input(Ref<InputEvent> p_event) {
|
|
|
selection.end = text.length();
|
|
|
selection.doubleclick = true;
|
|
|
selection.last_dblclk = 0;
|
|
|
+ if (!pass && OS::get_singleton()->has_feature("primary_clipboard")) {
|
|
|
+ OS::get_singleton()->set_clipboard_primary(text);
|
|
|
+ }
|
|
|
} else if (b->is_doubleclick()) {
|
|
|
// Double-click select word.
|
|
|
selection.enabled = true;
|
|
@@ -119,6 +142,9 @@ void LineEdit::_gui_input(Ref<InputEvent> p_event) {
|
|
|
selection.end = end;
|
|
|
selection.doubleclick = true;
|
|
|
selection.last_dblclk = OS::get_singleton()->get_ticks_msec();
|
|
|
+ if (!pass && OS::get_singleton()->has_feature("primary_clipboard")) {
|
|
|
+ OS::get_singleton()->set_clipboard_primary(text.substr(selection.begin, selection.end - selection.begin));
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -136,6 +162,9 @@ void LineEdit::_gui_input(Ref<InputEvent> p_event) {
|
|
|
update();
|
|
|
|
|
|
} else {
|
|
|
+ if (selection.enabled && !pass && b->get_button_index() == BUTTON_LEFT && OS::get_singleton()->has_feature("primary_clipboard")) {
|
|
|
+ OS::get_singleton()->set_clipboard_primary(text.substr(selection.begin, selection.end - selection.begin));
|
|
|
+ }
|
|
|
if (!text.empty() && is_editable() && clear_button_enabled) {
|
|
|
bool press_attempt = clear_button_status.press_attempt;
|
|
|
clear_button_status.press_attempt = false;
|
|
@@ -1779,6 +1808,14 @@ bool LineEdit::is_virtual_keyboard_enabled() const {
|
|
|
return virtual_keyboard_enabled;
|
|
|
}
|
|
|
|
|
|
+void LineEdit::set_middle_mouse_paste_enabled(bool p_enabled) {
|
|
|
+ middle_mouse_paste_enabled = p_enabled;
|
|
|
+}
|
|
|
+
|
|
|
+bool LineEdit::is_middle_mouse_paste_enabled() const {
|
|
|
+ return middle_mouse_paste_enabled;
|
|
|
+}
|
|
|
+
|
|
|
void LineEdit::set_selecting_enabled(bool p_enabled) {
|
|
|
selecting_enabled = p_enabled;
|
|
|
|
|
@@ -1955,6 +1992,8 @@ void LineEdit::_bind_methods() {
|
|
|
ClassDB::bind_method(D_METHOD("is_clear_button_enabled"), &LineEdit::is_clear_button_enabled);
|
|
|
ClassDB::bind_method(D_METHOD("set_shortcut_keys_enabled", "enable"), &LineEdit::set_shortcut_keys_enabled);
|
|
|
ClassDB::bind_method(D_METHOD("is_shortcut_keys_enabled"), &LineEdit::is_shortcut_keys_enabled);
|
|
|
+ ClassDB::bind_method(D_METHOD("set_middle_mouse_paste_enabled", "enable"), &LineEdit::set_middle_mouse_paste_enabled);
|
|
|
+ ClassDB::bind_method(D_METHOD("is_middle_mouse_paste_enabled"), &LineEdit::is_middle_mouse_paste_enabled);
|
|
|
ClassDB::bind_method(D_METHOD("set_selecting_enabled", "enable"), &LineEdit::set_selecting_enabled);
|
|
|
ClassDB::bind_method(D_METHOD("is_selecting_enabled"), &LineEdit::is_selecting_enabled);
|
|
|
ClassDB::bind_method(D_METHOD("set_deselect_on_focus_loss_enabled", "enable"), &LineEdit::set_deselect_on_focus_loss_enabled);
|
|
@@ -1991,6 +2030,7 @@ void LineEdit::_bind_methods() {
|
|
|
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "virtual_keyboard_enabled"), "set_virtual_keyboard_enabled", "is_virtual_keyboard_enabled");
|
|
|
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "clear_button_enabled"), "set_clear_button_enabled", "is_clear_button_enabled");
|
|
|
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "shortcut_keys_enabled"), "set_shortcut_keys_enabled", "is_shortcut_keys_enabled");
|
|
|
+ ADD_PROPERTY(PropertyInfo(Variant::BOOL, "middle_mouse_paste_enabled"), "set_middle_mouse_paste_enabled", "is_middle_mouse_paste_enabled");
|
|
|
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "selecting_enabled"), "set_selecting_enabled", "is_selecting_enabled");
|
|
|
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "deselect_on_focus_loss_enabled"), "set_deselect_on_focus_loss_enabled", "is_deselect_on_focus_loss_enabled");
|
|
|
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "right_icon", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), "set_right_icon", "get_right_icon");
|
|
@@ -2019,6 +2059,7 @@ LineEdit::LineEdit() {
|
|
|
clear_button_status.press_attempt = false;
|
|
|
clear_button_status.pressing_inside = false;
|
|
|
shortcut_keys_enabled = true;
|
|
|
+ middle_mouse_paste_enabled = true;
|
|
|
selecting_enabled = true;
|
|
|
deselect_on_focus_loss_enabled = true;
|
|
|
|