Added support of drag events to back button in dialogs list.
This commit is contained in:
		
							parent
							
								
									1b364f2621
								
							
						
					
					
						commit
						6bd2be0aee
					
				
					 2 changed files with 44 additions and 0 deletions
				
			
		|  | @ -14,6 +14,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL | ||||||
| #include "info/info_memento.h" | #include "info/info_memento.h" | ||||||
| #include "info/info_controller.h" | #include "info/info_controller.h" | ||||||
| #include "info/profile/info_profile_values.h" | #include "info/profile/info_profile_values.h" | ||||||
|  | #include "storage/storage_media_prepare.h" | ||||||
| #include "storage/storage_shared_media.h" | #include "storage/storage_shared_media.h" | ||||||
| #include "mainwidget.h" | #include "mainwidget.h" | ||||||
| #include "mainwindow.h" | #include "mainwindow.h" | ||||||
|  | @ -782,6 +783,7 @@ void TopBarWidget::setActiveChat( | ||||||
| 	updateOnlineDisplay(); | 	updateOnlineDisplay(); | ||||||
| 	updateControlsVisibility(); | 	updateControlsVisibility(); | ||||||
| 	refreshUnreadBadge(); | 	refreshUnreadBadge(); | ||||||
|  | 	setupDragOnBackButton(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void TopBarWidget::handleEmojiInteractionSeen(const QString &emoticon) { | void TopBarWidget::handleEmojiInteractionSeen(const QString &emoticon) { | ||||||
|  | @ -1444,6 +1446,45 @@ void TopBarWidget::updateInfoToggleActive() { | ||||||
| 	_infoToggle->setRippleColorOverride(rippleOverride); | 	_infoToggle->setRippleColorOverride(rippleOverride); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | void TopBarWidget::setupDragOnBackButton() { | ||||||
|  | 	_backLifetime.destroy(); | ||||||
|  | 	if (_activeChat.section != Section::ChatsList) { | ||||||
|  | 		_back->setAcceptDrops(false); | ||||||
|  | 		return; | ||||||
|  | 	} | ||||||
|  | 	const auto lifetime = _backLifetime.make_state<rpl::lifetime>(); | ||||||
|  | 	_back->setAcceptDrops(true); | ||||||
|  | 	_back->events( | ||||||
|  | 	) | rpl::filter([=](not_null<QEvent*> e) { | ||||||
|  | 		return e->type() == QEvent::DragEnter; | ||||||
|  | 	}) | rpl::start_with_next([=](not_null<QEvent*> e) { | ||||||
|  | 		using namespace Storage; | ||||||
|  | 		const auto d = static_cast<QDragEnterEvent*>(e.get()); | ||||||
|  | 		const auto data = d->mimeData(); | ||||||
|  | 		if (ComputeMimeDataState(data) == MimeDataState::None) { | ||||||
|  | 			return; | ||||||
|  | 		} | ||||||
|  | 		const auto timer = _backLifetime.make_state<base::Timer>([=] { | ||||||
|  | 			backClicked(); | ||||||
|  | 		}); | ||||||
|  | 		timer->callOnce(ChoosePeerByDragTimeout); | ||||||
|  | 		d->setDropAction(Qt::CopyAction); | ||||||
|  | 		d->accept(); | ||||||
|  | 		_back->events( | ||||||
|  | 		) | rpl::filter([=](not_null<QEvent*> e) { | ||||||
|  | 			return e->type() == QEvent::DragMove | ||||||
|  | 				|| e->type() == QEvent::DragLeave; | ||||||
|  | 		}) | rpl::start_with_next([=](not_null<QEvent*> e) { | ||||||
|  | 			if (e->type() == QEvent::DragMove) { | ||||||
|  | 				timer->callOnce(ChoosePeerByDragTimeout); | ||||||
|  | 			} else if (e->type() == QEvent::DragLeave) { | ||||||
|  | 				timer->cancel(); | ||||||
|  | 				lifetime->destroy(); | ||||||
|  | 			} | ||||||
|  | 		}, *lifetime); | ||||||
|  | 	}, _backLifetime); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| bool TopBarWidget::trackOnlineOf(not_null<PeerData*> user) const { | bool TopBarWidget::trackOnlineOf(not_null<PeerData*> user) const { | ||||||
| 	const auto peer = _activeChat.key.peer(); | 	const auto peer = _activeChat.key.peer(); | ||||||
| 	if (!peer || _activeChat.key.topic() || !user->isUser()) { | 	if (!peer || _activeChat.key.topic() || !user->isUser()) { | ||||||
|  |  | ||||||
|  | @ -134,6 +134,7 @@ private: | ||||||
| 	void updateControlsGeometry(); | 	void updateControlsGeometry(); | ||||||
| 	void slideAnimationCallback(); | 	void slideAnimationCallback(); | ||||||
| 	void updateInfoToggleActive(); | 	void updateInfoToggleActive(); | ||||||
|  | 	void setupDragOnBackButton(); | ||||||
| 
 | 
 | ||||||
| 	void call(); | 	void call(); | ||||||
| 	void groupCall(); | 	void groupCall(); | ||||||
|  | @ -252,6 +253,8 @@ private: | ||||||
| 	rpl::event_stream<> _clearSelection; | 	rpl::event_stream<> _clearSelection; | ||||||
| 	rpl::event_stream<> _cancelChooseForReport; | 	rpl::event_stream<> _cancelChooseForReport; | ||||||
| 
 | 
 | ||||||
|  | 	rpl::lifetime _backLifetime; | ||||||
|  | 
 | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| } // namespace HistoryView
 | } // namespace HistoryView
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 23rd
						23rd