瀏覽代碼

Merge pull request #54045 from ConteZero/primary_clipboard_linux_fix_warning

Rémi Verschelde 3 年之前
父節點
當前提交
b2ab5cb504

+ 2 - 0
doc/classes/DisplayServer.xml

@@ -819,6 +819,8 @@
 		</constant>
 		<constant name="FEATURE_SWAP_BUFFERS" value="17" enum="Feature">
 		</constant>
+		<constant name="FEATURE_CLIPBOARD_PRIMARY" value="19" enum="Feature">
+		</constant>
 		<constant name="MOUSE_MODE_VISIBLE" value="0" enum="MouseMode">
 			Makes the mouse cursor visible if it is hidden.
 		</constant>

+ 1 - 0
platform/linuxbsd/display_server_x11.cpp

@@ -124,6 +124,7 @@ bool DisplayServerX11::has_feature(Feature p_feature) const {
 #ifdef DBUS_ENABLED
 		case FEATURE_KEEP_SCREEN_ON:
 #endif
+		case FEATURE_CLIPBOARD_PRIMARY:
 			return true;
 		default: {
 		}

+ 4 - 4
scene/gui/line_edit.cpp

@@ -235,7 +235,7 @@ void LineEdit::gui_input(const Ref<InputEvent> &p_event) {
 			return;
 		}
 
-		if (is_middle_mouse_paste_enabled() && b->is_pressed() && b->get_button_index() == MOUSE_BUTTON_MIDDLE && is_editable()) {
+		if (is_middle_mouse_paste_enabled() && b->is_pressed() && b->get_button_index() == MOUSE_BUTTON_MIDDLE && is_editable() && DisplayServer::get_singleton()->has_feature(DisplayServer::FEATURE_CLIPBOARD_PRIMARY)) {
 			String paste_buffer = DisplayServer::get_singleton()->clipboard_get_primary().strip_escapes();
 
 			deselect();
@@ -290,7 +290,7 @@ void LineEdit::gui_input(const Ref<InputEvent> &p_event) {
 						selection.double_click = true;
 						last_dblclk = 0;
 						caret_column = selection.begin;
-						if (!pass) {
+						if (!pass && DisplayServer::get_singleton()->has_feature(DisplayServer::FEATURE_CLIPBOARD_PRIMARY)) {
 							DisplayServer::get_singleton()->clipboard_set_primary(text);
 						}
 					} else if (b->is_double_click()) {
@@ -308,7 +308,7 @@ void LineEdit::gui_input(const Ref<InputEvent> &p_event) {
 								break;
 							}
 						}
-						if (!pass) {
+						if (!pass && DisplayServer::get_singleton()->has_feature(DisplayServer::FEATURE_CLIPBOARD_PRIMARY)) {
 							DisplayServer::get_singleton()->clipboard_set_primary(text.substr(selection.begin, selection.end - selection.begin));
 						}
 					}
@@ -328,7 +328,7 @@ void LineEdit::gui_input(const Ref<InputEvent> &p_event) {
 			update();
 
 		} else {
-			if (selection.enabled && !pass && b->get_button_index() == MOUSE_BUTTON_LEFT) {
+			if (selection.enabled && !pass && b->get_button_index() == MOUSE_BUTTON_LEFT && DisplayServer::get_singleton()->has_feature(DisplayServer::FEATURE_CLIPBOARD_PRIMARY)) {
 				DisplayServer::get_singleton()->clipboard_set_primary(text.substr(selection.begin, selection.end - selection.begin));
 			}
 			if (!text.is_empty() && is_editable() && clear_button_enabled) {

+ 4 - 2
scene/gui/rich_text_label.cpp

@@ -1596,14 +1596,16 @@ void RichTextLabel::gui_input(const Ref<InputEvent> &p_event) {
 							selection.to_char = words[i + 1];
 
 							selection.active = true;
-							DisplayServer::get_singleton()->clipboard_set_primary(get_selected_text());
+							if (DisplayServer::get_singleton()->has_feature(DisplayServer::FEATURE_CLIPBOARD_PRIMARY)) {
+								DisplayServer::get_singleton()->clipboard_set_primary(get_selected_text());
+							}
 							update();
 							break;
 						}
 					}
 				}
 			} else if (!b->is_pressed()) {
-				if (selection.enabled) {
+				if (selection.enabled && DisplayServer::get_singleton()->has_feature(DisplayServer::FEATURE_CLIPBOARD_PRIMARY)) {
 					DisplayServer::get_singleton()->clipboard_set_primary(get_selected_text());
 				}
 				selection.click_item = nullptr;

+ 11 - 5
scene/gui/text_edit.cpp

@@ -1534,7 +1534,7 @@ void TextEdit::gui_input(const Ref<InputEvent> &p_gui_input) {
 				update();
 			}
 
-			if (is_middle_mouse_paste_enabled() && mb->get_button_index() == MOUSE_BUTTON_MIDDLE) {
+			if (is_middle_mouse_paste_enabled() && mb->get_button_index() == MOUSE_BUTTON_MIDDLE && DisplayServer::get_singleton()->has_feature(DisplayServer::FEATURE_CLIPBOARD_PRIMARY)) {
 				paste_primary_clipboard();
 			}
 
@@ -1575,7 +1575,9 @@ void TextEdit::gui_input(const Ref<InputEvent> &p_gui_input) {
 				dragging_selection = false;
 				can_drag_minimap = false;
 				click_select_held->stop();
-				DisplayServer::get_singleton()->clipboard_set_primary(get_selected_text());
+				if (DisplayServer::get_singleton()->has_feature(DisplayServer::FEATURE_CLIPBOARD_PRIMARY)) {
+					DisplayServer::get_singleton()->clipboard_set_primary(get_selected_text());
+				}
 			}
 
 			// Notify to show soft keyboard.
@@ -5167,7 +5169,7 @@ void TextEdit::_paste_internal() {
 }
 
 void TextEdit::_paste_primary_clipboard_internal() {
-	if (!is_editable()) {
+	if (!is_editable() || !DisplayServer::get_singleton()->has_feature(DisplayServer::FEATURE_CLIPBOARD_PRIMARY)) {
 		return;
 	}
 
@@ -5520,7 +5522,9 @@ void TextEdit::_update_selection_mode_word() {
 		}
 	}
 
-	DisplayServer::get_singleton()->clipboard_set_primary(get_selected_text());
+	if (DisplayServer::get_singleton()->has_feature(DisplayServer::FEATURE_CLIPBOARD_PRIMARY)) {
+		DisplayServer::get_singleton()->clipboard_set_primary(get_selected_text());
+	}
 
 	update();
 
@@ -5549,7 +5553,9 @@ void TextEdit::_update_selection_mode_line() {
 	set_caret_column(0);
 
 	select(selection.selecting_line, selection.selecting_column, line, col);
-	DisplayServer::get_singleton()->clipboard_set_primary(get_selected_text());
+	if (DisplayServer::get_singleton()->has_feature(DisplayServer::FEATURE_CLIPBOARD_PRIMARY)) {
+		DisplayServer::get_singleton()->clipboard_set_primary(get_selected_text());
+	}
 
 	update();
 

+ 1 - 0
servers/display_server.cpp

@@ -497,6 +497,7 @@ void DisplayServer::_bind_methods() {
 	BIND_ENUM_CONSTANT(FEATURE_NATIVE_ICON);
 	BIND_ENUM_CONSTANT(FEATURE_ORIENTATION);
 	BIND_ENUM_CONSTANT(FEATURE_SWAP_BUFFERS);
+	BIND_ENUM_CONSTANT(FEATURE_CLIPBOARD_PRIMARY);
 
 	BIND_ENUM_CONSTANT(MOUSE_MODE_VISIBLE);
 	BIND_ENUM_CONSTANT(MOUSE_MODE_HIDDEN);

+ 1 - 0
servers/display_server.h

@@ -114,6 +114,7 @@ public:
 		FEATURE_ORIENTATION,
 		FEATURE_SWAP_BUFFERS,
 		FEATURE_KEEP_SCREEN_ON,
+		FEATURE_CLIPBOARD_PRIMARY,
 	};
 
 	virtual bool has_feature(Feature p_feature) const = 0;