Any file that uses the RTC_DISALLOW_* macros should #include "webrtc/base/constructormagic.h", but a shocking number of them don't. This causes trouble when we try to wean files off of #including scoped_ptr.h, since a bunch of files get their constructormagic macros only from there. Rather than fixing these errors one by one as they turn up, this CL simply ensures that every file in the WebRTC tree that uses the RTC_DISALLOW_* macros #includes "webrtc/base/constructormagic.h". BUG=webrtc:5520 Review URL: https://codereview.webrtc.org/1917043005 Cr-Commit-Position: refs/heads/master@{#12509}
86 lines
2.4 KiB
C++
86 lines
2.4 KiB
C++
/*
|
|
* Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
|
|
*
|
|
* Use of this source code is governed by a BSD-style license
|
|
* that can be found in the LICENSE file in the root of the source
|
|
* tree. An additional intellectual property rights grant can be found
|
|
* in the file PATENTS. All contributing project authors may
|
|
* be found in the AUTHORS file in the root of the source tree.
|
|
*/
|
|
|
|
#ifndef WEBRTC_MODULES_DESKTOP_CAPTURE_X11_SHARED_X_DISPLAY_H_
|
|
#define WEBRTC_MODULES_DESKTOP_CAPTURE_X11_SHARED_X_DISPLAY_H_
|
|
|
|
#include <map>
|
|
#include <vector>
|
|
|
|
#include <assert.h>
|
|
#include <X11/Xlib.h>
|
|
|
|
#include <string>
|
|
|
|
#include "webrtc/base/constructormagic.h"
|
|
#include "webrtc/base/scoped_ref_ptr.h"
|
|
#include "webrtc/system_wrappers/include/atomic32.h"
|
|
|
|
namespace webrtc {
|
|
|
|
// A ref-counted object to store XDisplay connection.
|
|
class SharedXDisplay {
|
|
public:
|
|
class XEventHandler {
|
|
public:
|
|
virtual ~XEventHandler() {}
|
|
|
|
// Processes XEvent. Returns true if the event has been handled.
|
|
virtual bool HandleXEvent(const XEvent& event) = 0;
|
|
};
|
|
|
|
// Takes ownership of |display|.
|
|
explicit SharedXDisplay(Display* display);
|
|
|
|
// Creates a new X11 Display for the |display_name|. NULL is returned if X11
|
|
// connection failed. Equivalent to CreateDefault() when |display_name| is
|
|
// empty.
|
|
static rtc::scoped_refptr<SharedXDisplay> Create(
|
|
const std::string& display_name);
|
|
|
|
// Creates X11 Display connection for the default display (e.g. specified in
|
|
// DISPLAY). NULL is returned if X11 connection failed.
|
|
static rtc::scoped_refptr<SharedXDisplay> CreateDefault();
|
|
|
|
void AddRef() { ++ref_count_; }
|
|
void Release() {
|
|
if (--ref_count_ == 0)
|
|
delete this;
|
|
}
|
|
|
|
Display* display() { return display_; }
|
|
|
|
// Adds a new event |handler| for XEvent's of |type|.
|
|
void AddEventHandler(int type, XEventHandler* handler);
|
|
|
|
// Removes event |handler| added using |AddEventHandler|. Doesn't do anything
|
|
// if |handler| is not registered.
|
|
void RemoveEventHandler(int type, XEventHandler* handler);
|
|
|
|
// Processes pending XEvents, calling corresponding event handlers.
|
|
void ProcessPendingXEvents();
|
|
|
|
private:
|
|
typedef std::map<int, std::vector<XEventHandler*> > EventHandlersMap;
|
|
|
|
~SharedXDisplay();
|
|
|
|
Atomic32 ref_count_;
|
|
Display* display_;
|
|
|
|
EventHandlersMap event_handlers_;
|
|
|
|
RTC_DISALLOW_COPY_AND_ASSIGN(SharedXDisplay);
|
|
};
|
|
|
|
} // namespace webrtc
|
|
|
|
#endif // WEBRTC_MODULES_DESKTOP_CAPTURE_X11_SHARED_X_DISPLAY_H_
|