(57)【要約】      （修正有）【課題】別アプリケーション（ＡＰ)のＵＩに対するユーザインタフェース(ＵＩ)拡張を生成できる。【解決手段】方法は、オペレーティングシステム（ＯＳ)のＵＩ状態に関連付けられたＵＩイベントを示すシステム通知をＯＳから受信する。ターゲットＵＩオブジェクト又はＡＰに関するシステム通知に応答して、システム通知で規定されるターゲットＵＩオブジェクトのグラフィカルプロパティに基づいて、ターゲットＵＩオブジェクトを含むターゲットＡＰのためのＵＩサブ状態を生成または更新する。更新されたＵＩサブ状態におけるターゲットＵＩオブジェクトのグラフィカルプロパティに基づいて、ターゲットＡＰのターゲットＵＩオブジェクトのＵＩ拡張を生成する。ＵＩ拡張はターゲットＡＰとは別のプロセスによって制御されるオーバーレイとすることができ、ターゲットＡＰのＵＩに任意に付属させることができる。【選択図】図１
2020074096.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータシステムに表示されるターゲットアプリケーションのユーザインタフェース(UI)を拡張する方法であって、
オペレーティングシステムのUI状態に基づいて、前記ターゲットアプリケーションに関連する１つまたは複数のターゲットUIオブジェクトを特定することと、ここで、前記UI状態は前記オペレーティングシステムによって作成され、前記オペレーティングシステム上で稼働するアプリケーションに関するUIオブジェクトのグラフィカルプロパティを定義する、特定することと、
前記ターゲットアプリケーションに関連する前記１つまたは複数のターゲットUIオブジェクトに関するシステム通知を登録することと、
前記オペレーティングシステムの前記UI状態に関連付けられたUIイベントを示すシステム通知を前記オペレーティングシステムから受信することと、
前記ターゲットアプリケーションに関するUIサブ状態を更新することと、ここで前記UIサブ状態は、ターゲットUI要素に対応するターゲットUIオブジェクトを含み、前記ターゲットUIオブジェクトのグラフィカルプロパティを特定し、前記オペレーティングシステムによって生成された前記UI状態とは別個である、更新することと、
前記UIサブ状態における前記ターゲットUIオブジェクトの前記グラフィカルプロパティに基づいて、前記ターゲットアプリケーションのフォーカスされたターゲットUIオブジェクトに対するUI拡張を生成することと、
前記フォーカスされたターゲットUIオブジェクトと協調して前記UI拡張を表示することと、
を有する方法。
【請求項２】
前記UIイベントが検出されると、前記オペレーティングシステムから前記システム通知を受信すること、をさらに有する、請求項１に記載の方法。
【請求項３】
UIイベントを示す前記システム通知を登録し、受信することは、UI APIを使用して前記オペレーティングシステムと通信することを含む、請求項１に記載の方法。
【請求項４】
前記ターゲットアプリケーションの起動イベントに関する第２のシステム通知を登録することと、
前記オペレーティングシステムから前記起動イベントを示す前記第２のシステム通知を受信することと、前記第２のシステム通知を受信したことに応答して、
前記オペレーティングシステムに前記ターゲットアプリケーションの前記UIオブジェクトを要求することと、
前記要求に応答して前記UIオブジェクトを受信することと、
前記受信したUIオブジェクトから前記１つまたは複数のターゲットUIオブジェクトを特定することと、
前記１つまたは複数のターゲットUIオブジェクトを前記UIサブ状態に追加することと、
前記１つまたは複数のターゲットUIオブジェクトの前記システム通知を登録することと、
をさらに有する、請求項１に記載の方法。
【請求項５】
前記ターゲットUIオブジェクトの前記グラフィカルプロパティは、長さ、幅、および位置を含み、
前記ターゲットUIオブジェクトの前記グラフィカルプロパティに基づいて前記ターゲットアプリケーションの前記フォーカスされたターゲットUIオブジェクトに対する前記UI拡張を生成することは、前記UI拡張のUI拡張オブジェクトのグラフィカルプロパティを決定することを含み、前記UI拡張オブジェクトの前記グラフィカルプロパティは前記UI拡張オブジェクトの長さ、幅、および位置を含む、請求項１に記載の方法。
【請求項６】
前記フォーカスされたターゲットUIオブジェクトの１つまたは複数の子UIオブジェクトを決定することと、
前記１つまたは複数の子UIオブジェクトのグラフィカルプロパティを決定することと、
前記１つまたは複数の子UIオブジェクトの前記グラフィカルプロパティに基づいて前記UI拡張の前記UI拡張オブジェクトの前記グラフィカルプロパティを決定することと、
をさらに有する、請求項５に記載の方法。
【請求項７】
前記UIイベントの前記システム通知は、前記ターゲットUIオブジェクトが前記フォーカスされたターゲットUIオブジェクトであることを示す、請求項１に記載の方法。
【請求項８】
前記フォーカスされたターゲットUIオブジェクトと協調して前記UI拡張を表示することは、前記フォーカスされたターゲットUIオブジェクトに対するオーバレイとして、または前記フォーカスされたターゲットUIオブジェクトに隣接して、前記UI拡張を表示することを含む、請求項１に記載の方法。
【請求項９】
前記システム通知は、前記ターゲットUIオブジェクトを特定するグローバル一意識別子(GUID)を含み、
前記方法はさらに、前記システム通知の受信に応答して、
候補ターゲットアプリケーションの内部UI状態を問い合わせることに基づいて候補GUIDを決定することと、
前記システム通知の前記GUIDを前記候補ターゲットアプリケーションから受信した前記候補GUIDと比較することに基づいて、前記候補ターゲットアプリケーションから前記ターゲットアプリケーションを決定することと、
を有する、請求項１に記載の方法。
【請求項１０】
前記GUIDを用いて前記ターゲットアプリケーションに問い合わせることに基づいて、前記ターゲットUIオブジェクトに関連付けられたファイルシステムパスを決定することと、
前記ファイルシステムパスに基づいて前記ターゲットUIオブジェクトのUIオブジェクトタイプを特定することと、
をさらに有する、請求項９に記載の方法。
【請求項１１】
前記ターゲットUIオブジェクトが前記UIオブジェクトタイプに関連付けられるように、前記ターゲットUIオブジェクトの前記UIサブ状態を更新することをさらに有する、請求項１０に記載の方法。
【請求項１２】
前記GUIDを用いて前記ターゲットアプリケーションに問い合わせることに基づいて、前記ターゲットUIオブジェクトに関連付けられたファイルシステムパスを決定することと、
前記ファイルシステムパスに基づいて、前記ターゲットUIオブジェクトをコンテンツ管理システムのコンテンツアイテムとして特定することと、
をさらに有する、請求項９に記載の方法。
【請求項１３】
前記UI拡張を生成することは、前記コンテンツアイテムに関連する前記コンテンツ管理システムの機能のためのインタフェースを提供するUI拡張オブジェクトを生成することを含む、請求項１２に記載の方法。
【請求項１４】
前記オペレーティングシステムによってレンダリングされたフォーカスされたグラフィックスオブジェクトに関するグラフィックスオブジェクトIDを、前記オペレーティングシステムに要求することと、
前記フォーカスされたグラフィックスオブジェクトに関する前記グラフィックスオブジェクトIDを前記オペレーティングシステムから受信することと、
前記グラフィックスオブジェクトIDを、前記フォーカスされたターゲットUIオブジェクトのUIオブジェクトIDに関連付けることと、
前記グラフィックスオブジェクトIDを使用して前記オペレーティングシステムからのグラフィックスイベントを示す第２のシステム通知を登録することと、ここで前記グラフィックスイベントは前記グラフィックスオブジェクトのグラフィカルプロパティを示す、登録することと、
前記グラフィックスオブジェクトIDを含むグラフィックスイベントを示す第２のシステム通知を受信することと、
前記グラフィックスオブジェクトIDおよび前記関連付けされたUIオブジェクトIDに基づいて、前記グラフィックスイベントの前記ターゲットUIオブジェクトを特定することと、
前記第２のシステム通知と共に受信した前記グラフィックスオブジェクトのグラフィカルプロパティに基づいて、前記ターゲットUIオブジェクトの前記グラフィカルプロパティを更新することと、をさらに有する、請求項１に記載の方法。
【請求項１５】
前記グラフィックスイベントを示す前記第２のシステム通知を登録および受信することは、グラフィックスAPIを使用して前記オペレーティングシステムと通信することを含む、請求項１４に記載の方法。
【請求項１６】
前記グラフィックスAPIはコアグラフィックスAPIを含む、請求項１５に記載の方法。
【請求項１７】
前記オペレーティングシステム上で稼働する複数のターゲットアプリケーションのうちの１つにそれぞれが対応する、所定数のUIサブ状態を維持することをさらに含む、請求項１に記載の方法。
【請求項１８】
コンピュータシステムに表示されるターゲットアプリケーションのユーザインタフェース(UI)を拡張するための装置であって、
メモリと、１つまたは複数のプロセッサとを有し、前記１つまたは複数のプロセッサは、命令セットによって、
前記オペレーティングシステムのUI状態に関連付けられたUIイベントを示すシステム通知を前記オペレーティングシステムから受信し、ここで前記UI状態は前記オペレーティングシステムによって作成され、前記オペレーティングシステム上で稼働するアプリケーションに関するUIオブジェクトのグラフィカルプロパティを定義し、
UIイベントを示すシステム通知が、前記ターゲットアプリケーションのターゲットUIオブジェクトに関するものであると判定し、
ターゲットUIオブジェクトに関する前記システム通知に応答して、前記ターゲットアプリケーションに関するUIサブ状態を生成し、ここで前記UIサブ状態はターゲットUIオブジェクトを含み、前記ターゲットUIオブジェクトのグラフィカルプロパティを特定し、かつ前記オペレーティングシステムによって生成される前記UI状態とは別個であり、
前記UIサブ状態における前記ターゲットUIオブジェクトの前記グラフィカルプロパティに基づいて、前記ターゲットアプリケーションのフォーカスされたターゲットUIオブジェクトに対するUI拡張を生成し、前記フォーカスされたターゲットUIオブジェクトと協調して前記UI拡張を表示する、
ように構成される、装置。
【請求項１９】
前記１つまたは複数のプロセッサは、
前記ターゲットアプリケーションの起動イベントに関する第２のシステム通知を登録し、
前記起動イベントを示す前記第２のシステム通知を前記オペレーティングシステムから受信し、
前記第２のシステム通知の受信に応答して、
前記オペレーティングシステムに前記ターゲットアプリケーションの前記UIオブジェクトを要求し、
前記要求に応答して前記UIオブジェクトを受信し、
前記受信したUIオブジェクトから前記１つまたは複数のターゲットUIオブジェクトを特定し、
前記１つまたは複数のターゲットUIオブジェクトを前記UIサブ状態に追加し、
前記１つまたは複数のターゲットUIオブジェクトに関する前記システム通知を登録する、
ようにさらに構成される、請求項１８に記載のシステム。
【請求項２０】
コンピュータシステムによって実行されると、前記コンピュータシステムのオペレーティングシステム上で稼働するターゲットアプリケーションのユーザインタフェース(UI)を前記コンピュータシステムのディスプレイ上で拡張するための動作を前記コンピュータシステムに実行させる命令を記憶するコンピュータ可読記憶媒体であって、前記動作は、
前記オペレーティングシステムによって管理されるUIオブジェクトに関連付けられたイベントを示すシステム通知を前記オペレーティングシステムから受信することと、
ターゲットUIオブジェクトに関するシステム通知に基づいて、前記ターゲットUIオブジェクトのグラフィカルプロパティを定義する前記ターゲットアプリケーションに関するUIサブ状態を生成することと、ここで前記ターゲットUIオブジェクトは前記オペレーティングシステムによって管理されるすべてのUIオブジェクトのサブセットであり、前記UIサブ状態は前記オペレーティングシステムによって管理されるUI状態とは別個である、生成することと、
前記ターゲットアプリケーションの前記ターゲットUIオブジェクトがフォーカスされたターゲットUIオブジェクトになったこと、または更新されたグラフィカルプロパティを有することを示す第２のシステム通知を前記オペレーティングシステムから受信することと、
前記第２のシステム通知に基づいて前記UIサブ状態を更新することと、
前記UIサブ状態を更新することの後に、前記UIサブ状態における前記ターゲットUIオブジェクトのグラフィカルプロパティに基づいて前記ターゲットアプリケーションの前記ターゲットUIオブジェクトに対するUI拡張を生成することと、
前記フォーカスされたターゲットUIオブジェクトと協調して前記UI拡張を前記ディスプレイに表示することと、
を有する、コンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
背景
本開示は概してコンピュータアプリケーションのユーザインタフェース(UI)を生成することに関し、特には、オペレーティングシステム上で稼働するターゲットアプリケーションのためのユーザインタフェースを、ターゲットアプリケーションに追加の機能を提供するための追加ユーザインタフェース制御要素によって拡張することに関する。
【背景技術】
【０００２】
コンピュータオペレーティングシステムは、オペレーティングシステム上で稼働するアプリケーションのためのユーザインタフェースおよび関連イベント処理を管理する。典型的には、コンピュータアプリケーション（またはオペレーティングシステム）ユーザインタフェースの設計およびネイティブ機能は、アプリケーション開発者によって決定される。開発者は、他のプログラムがアプリケーションのユーザインタフェースを変更することを許可する（または許可しない）ことができるが、特定かつ限定された方法に制限される。例えば、オペレーティングシステムおよびアプリケーションは、アプリケーションプログラミングインタフェース(API)を介して、またはプラグインサービスを介して、特定のメニュー、ペイン、またはユーザインタフェースの他の所定の領域にオブジェクトを配置するといった、ユーザインタフェースオブジェクトを修正または追加するための限定かつ特定の方法を公開しうる。しかし、従来のオペレーティングシステムおよびアプリケーションは、そのユーザインタフェースをサードパーティアプリケーションが任意に変更することを許可しない。特に、従来のオペレーティングシステムおよびアプリケーションは、それらのユーザインタフェースに、追加機能を制御する追加のユーザインタフェースオブジェクトを付加することにより、サードパーティアプリケーションがユーザインタフェースを拡張することを可能にしない。その結果、このことは、サードパーティアプリケーション開発者が、基礎となるオペレーティングシステムまたはアプリケーションを強化する特徴および機能を提供する能力を制限する。
【発明の概要】
【０００３】
要約
ユーザインタフェース拡張器モジュールは、関心のある別のアプリケーションまたはターゲットアプリケーションのUIのためのUI拡張(UI extension)を生成することができる。UI拡張は、ターゲットアプリケーションのUIオブジェクトのグラフィカルプロパティと協調するグラフィカルプロパティを有する１つまたは複数のUIオブジェクトを含む。例えば、UI拡張のUIオブジェクトは、UI拡張がターゲットアプリケーションのUIに付加されているように見えるように、ターゲットアプリケーションのUIオブジェクトに対してサイズ決めされ、配置されることができる。UI拡張はターゲットアプリケーションが本来有する機能および能力を超えて機能および能力を拡張する機能（例えば、実行可能な機能またはメソッド）に関連付けることができる。
【０００４】
UI拡張のグラフィカルプロパティは、ターゲットアプリケーションまたはオペレーティングシステムによって制約されない。したがって、UI拡張は、ターゲットアプリケーション開発者によって許可されているターゲットアプリケーションの部分だけでなく、UI拡張の提供者に決定されるようにターゲットアプリケーションのいかなる部分にも任意に付加されることができる。一実施形態では、UI拡張をターゲットアプリケーションUIの選択された部分の手前に表示されるオーバーレイオブジェクトとすることができる。ターゲットアプリケーションのUIが移動されたりリサイズされたりすると、UI拡張はターゲットアプリケーションのUIと共に移動するように見えるように同期して更新され、例えばターゲットアプリケーションのウィンドウに対して同じ相対位置を維持する。あるいは、ターゲットアプリケーションのUIが移動またはリサイズされている際にUI拡張を隠し、ターゲットアプリケーションへの変更が完了するとUI拡張を再表示することができ、それによってターゲットアプリケーションとの円滑な統合が提供される。したがって、UI拡張は、ターゲットアプリケーションの機能に、その本来の能力を超える改善を提供することができる。
【０００５】
一実施形態においてUI拡張モジュールは、ターゲットアプリケーションのためのオペレーティングシステムが生成したUIイベントを監視し、UIイベントに応じた、ターゲットアプリケーションのUIのためのUI拡張を提供することができる。有利なことに、オペレーティングシステムが実行中のアプリケーションのUI状態全体への明示的なAPIベースのアクセスをサポートしない場合であっても、UI拡張器モジュールは、ターゲットアプリケーションのUIの状態のそれ自体の表現を維持することができる。状態情報を使用して、UI拡張器は、ターゲットアプリケーションのターゲットUIオブジェクトのUI状態の変化と協調するUI拡張を構築することができる。UI拡張器モジュールは、オペレーティングシステムによって検出されたUIイベントに基づいてターゲットアプリケーションのUIサブ状態を更新し、UIサブ状態のUIオブジェクトのグラフィカルプロパティに基づいてUI拡張を生成することができる。
【図面の簡単な説明】
【０００６】
【図１】ターゲットアプリケーションにユーザインタフェース拡張を提供するためのシステム環境の一例を示す図である。
【０００７】
【図２】装置の様々なモジュールおよび構成要素を示す図である。
【０００８】
【図３】コンテンツ管理システムの構成要素を示す図である。
【０００９】
【図４】コンピュータシステムのディスプレイ上でターゲットアプリケーションのUIを拡張するためのプロセスの一例を示す図である。
【００１０】
【図５】オペレーティングシステムが管理するUI状態の一例を示す図である。
【００１１】
【図６Ａ】装置のデスクトップ表示上のUIオブジェクトフォーカス変更を示す図である。
【図６Ｂ】装置のデスクトップ表示上のUIオブジェクトフォーカス変更を示す図である。
【００１２】
【図７】ターゲットアプリケーションのUIの一例を示す図である。
【００１３】
【図８】ターゲットアプリケーションのUIサブ状態の一例を示す図である。
【００１４】
【図９】UI拡張を有するターゲットアプリケーションのUIの一例を示す図である。
【００１５】
【図１０】ターゲットアプリケーションのUIオブジェクトのグラフィカルプロパティ更新と協調してUI拡張を更新するプロセスの一例を示す図である。
【００１６】
【図１１ａ】UI拡張の、ターゲットUIオブジェクトグラフィカルプロパティの変化との協調を示す図である。
【図１１ｂ】UI拡張の、ターゲットUIオブジェクトグラフィカルプロパティの変化との協調を示す図である。
【図１１ｃ】UI拡張の、ターゲットUIオブジェクトグラフィカルプロパティの変化との協調を示す図である。
【００１７】
【図１２】ターゲットUIオブジェクトのためのイベントのシステム通知から、ターゲットアプリケーション、UIオブジェクトタイプ、およびコンテンツアイテムを特定するためのプロセスの一例を示す図である。
【００１８】
【図１３】フォーカスされたファイルオブジェクトに対するUI拡張の例を示す図である。
【００１９】
【図１４】グラフィックスイベントのシステム通知から、ターゲットUIオブジェクトを特定するためのプロセスの一例を示す図である。
【発明を実施するための形態】
【００２０】
図面は、例示のみを目的として様々な実施形態を示す。当業者であれば、以下の説明から、本明細書で説明される原理から逸脱することなく、本明細書で説明される構造および方法の代替実施形態を利用可能であることを容易に認識するであろう。
【００２１】
詳細な説明
図１は、ターゲットアプリケーションにユーザインタフェース拡張を提供するためのシステム環境の一例を示す。図１は、装置１００Ａ、１００Ｂ、１００Ｃ（一般化して装置１００と呼ぶ)、中央(またはコンテンツ管理)システム１１０、およびネットワーク１２０を含んでいる。３つの装置１００は例示の目的のためだけに示されており、実際には、任意の数の装置が環境内に存在することができる。同様に、全体を通して説明および図示される他のモジュールまたは構成要素は単一または複数のインスタンスを含むことができ、実装者の必要性に応じて、一般性を失うことなく、組み合わせるか、または分離することができる。この、図示された実施形態では、ユーザインタフェース拡張が装置１００とコンテンツ管理システム１１０との間のコンテンツアイテム同期、コンテンツアイテム共有、プレゼンスおよび見られた状態情報の提供などのコンテンツ管理システム機能を容易にするように構成され得る。他の実施形態では、コンテンツ管理システム機能とは無関係なUI拡張のための他の機能を提供することができる。
【００２２】
装置１００は、（以下で説明するように）UI拡張器モジュールを有するコンピューティングデバイスである。UI拡張器モジュールを使用して、装置１００はターゲットアプリケーションにUI拡張を生成し、提供することができる。本明細書でより詳細に説明するように、UI拡張は、ターゲットアプリケーションUIの状態に基づいて、かつターゲットアプリケーションUIのUIオブジェクトのグラフィカルプロパティと協調するように生成される。そのようなUI拡張は、その本来の機能またはネイティブにプログラムされた機能を超えて、ターゲットアプリケーションに追加の機能を提供する。例えば、本明細書に例示される実施形態においてUI拡張は、コンテンツアイテムをローカル記憶および視聴し、コンテンツアイテムをコンテンツ管理システム１１０と同期させることを容易にする機能を提供することができる。様々な実施形態において、ターゲットアプリケーションのためのUI拡張を提供するための装置１００の動作について、以下でさらに説明する。
【００２３】
各装置１００は、ネットワーク１２０を介してコンテンツ管理システム１１０と通信する。ネットワーク１２０は任意の適切なネットワークであり、ローカルネットワーク、企業ネットワーク、広域ネットワーク、グローバルネットワーク、およびこれらの任意の組合せを含むことができる。いくつかの構成では、装置１００が有線または無線通信ネットワークを介してローカルネットワークサービスプロバイダと通信し、インターネットを通じてコンテンツ管理システム１１０と通信する。特定の構成では、装置１００Ａ、１００Ｂ、および１００Ｃは図１に破線で示すように、ネットワーク１２０なしで互いに直接通信する。例えば、装置１００は、ブルートゥース接続を介した無線接続、ローカルエリアネットワーク、またはユニバーサルシリアルバス(USB)を介した有線接続など、有線または無線接続を介して通信することができる。
【００２４】
コンテンツ管理システム１１０は、装置１００のユーザにコンテンツ共有および同期サービスを提供することができる。これらのサービスは、ユーザが他の装置１００のユーザとコンテンツを共有することを可能にする。コンテンツ共有に加えて、コンテンツ管理システム１１０は、変更に応答して共有コンテンツを更新し、複数の装置１００にわたるコンテンツアイテムの同期した変更を可能にすることができる。ユーザはユーザによって所有され、ユーザのアカウントに関連付けられた複数の装置１００にわたってコンテンツを同期させることができ、ユーザは、他のユーザのアカウントに関連付けられた装置と同期されたコンテンツを共有することができる。コンテンツ管理システム１１０によって格納されるコンテンツは、デジタルデータ、ドキュメント、メディア（例えば、画像、写真、ビデオ、オーディオ、ストリーミングコンテンツ）、データファイルおよびデータベース、ソースおよびオブジェクトコード、記録、ならびに他の任意のタイプのデータまたはファイルなど、任意のタイプのデータを含むことができ、本明細書ではそれらをコンテンツアイテムと総称する。コンテンツ管理システム１１０によって格納されるコンテンツアイテムは、フォルダ、テーブル、コレクション、アルバム、プレイリスト、または他のデータベース構造（例えば、オブジェクト指向、キー/値など）などの他のコンテンツアイテムを整理するためにも使用されうる。実際には、様々な装置１００が、ユーザ関連付け、許可、コンテンツ共有許可などに基づいて、コンテンツアイテムの異なるグループを同期させることができる。コンテンツアイテムはコンテンツ管理およびユーザインタラクションを容易にするために、アプリケーションUIおよびUI拡張を通じて提示されうる。しかし、UI拡張に関して本明細書で説明される技術は、コンテンツ管理システムまたは同期されたコンテンツアイテムとのインタラクションを容易にするUI拡張に限定されない。
【００２５】
図２は、UI拡張器モジュール２６５とともに構成された装置１００の様々なモジュールおよび構成要素を示している。装置１００は、ユーザに情報を提供するためのディスプレイ２２０を含み、特定のクライアント装置１００はタッチスクリーンを含む。装置１００はまた、ネットワーク１２０を介してコンテンツ管理システム１１０と通信するためのネットワークインタフェース２２５を含む。装置１００はまた、キーボード、マウス、トラックパッド、タッチスクリーン、または他の機器などの様々なユーザ入力デバイスからユーザ入力を受信する、ユーザ入力モジュール２６０を含む。クライアント装置１００の様々な他の構成要素、例えば、１つまたは複数のコンピュータプロセッサ、ローカル固定メモリ（RAMおよびROM）、ならびに必要に応じて取り外し可能なメモリ（例えばSDカード）、電源、およびオーディオビデオ出力、は本開示を複雑にしすぎないために図示されていない。
【００２６】
装置１００は、オペレーティングシステム２４５、１つまたは複数のアプリケーション２５５、およびクライアントアプリケーション２００を含む。アプリケーション２５５は、クライアント装置に基づいて変化するネイティブアプリケーションを含むことができる。アプリケーション２５５のサブセットは、UI拡張器モジュール２６５がUI拡張を提供することができるターゲットアプリケーションであろう。様々な実装において、UI拡張器モジュールは様々なアプリケーション２５５をターゲットアプリケーションとして指定することができる。いくつかの実装において、装置１００のユーザはアプリケーション２５５のどれがターゲットアプリケーションとして指定されるかを制御することができる。
【００２７】
アプリケーション２５５は、ワードプロセッサ、スプレッドシート、データベース管理システム、コードエディタ、画像およびビデオエディタ、電子書籍リーダ、オーディオおよびビデオプレーヤ、ファイルマネージャなど、コンテンツ管理システム１１０に格納されたコンテンツを処理する（例えば、作成する、閲覧する、消費する、および変更する）ための様々なアプリケーションを含むことができる。
【００２８】
装置１００上のオペレーティングシステム２４５は、ローカルファイルシステム２７５を提供し、クライアントアプリケーション２００およびネイティブアプリケーション２５５などの様々なソフトウェアモジュールを実行する。装置１００は、名前、写真、電話番号、会社、電子メールアドレス、物理アドレス、ウェブサイトURLなどのユーザの連絡先に関する情報を保存する連絡先ディレクトリ２４０を含むことができる。ネイティブアプリケーション２５５、オペレーティングシステム２４５、およびクライアントアプリケーション２００のさらなる動作を以下に説明する。
【００２９】
装置１００は、カメラ２３０およびロケーションモジュール２３５などの追加構成要素を含むことができる。カメラ２３０は、オンラインコンテンツ管理システム１１０にアップロードするための画像またはビデオを取り込むために使用される。ロケーションモジュール２３５は例えば、全地球測位衛星(GPS)信号、基地局三角測量(cellular tower triangulation)、または他の方法を使用して、装置１００の位置を求める。ロケーションモジュール２３５は、ロケーションデータを取得し、カメラ２３０によってキャプチャされた画像などのコンテンツアイテムに関するメタデータにロケーションデータを追加するためにクライアントアプリケーション２００によって使用される。
【００３０】
様々な実装において、クライアント装置１００は様々な方法でコンテンツ管理システム１１０にアクセスすることができる。クライアントアプリケーション２００は、コンテンツ管理システム１１０のサービスへのアクセスを提供する専用アプリケーションまたはモジュールであってよく、ユーザインタフェースを介した共有ファイルへのユーザアクセスと、他のアプリケーションのためのプログラムアクセスとの両方を提供する。クライアント装置１００はさらに、ウェブブラウザ２５０を通じてコンテンツ管理システム１１０にアクセスしてもよい。あるいは、クライアントアプリケーション２００は、コンテンツ管理システム１１０へのアクセスを、オペレーティングシステム２４５によって提供されるローカルファイルシステム２７５と統合してもよい。例えば、オペレーティングシステム２４５は、ファイルシステム２７５のコンテンツアイテムとインタラクションするためのUIを提供するために、ファイルシステムブラウザアプリケーション（例えば、ネイティブアプリケーション２５５）を実行するように構成されてもよい。
【００３１】
UI拡張器モジュール２６５は、アプリケーション２５５のうちの１つまたは複数のためのUI拡張を生成することができ、かつ、この機能を実行するための１つの手段である。UI拡張器モジュール２６５は、スタンドアロンアプリケーションであってもよいし、クライアントアプリケーション２００の一部として含まれてもよい。いくつかの実施形態において拡張機能は、コンテンツ管理システム１１０によって提供されるコンテンツ管理および同期サービスにアクセスするプログラム機能(programmatic functions)を含む。コンテンツ管理システム１１０へのアクセスがローカルファイルシステム２７５に統合される場合、コンテンツ管理システム１１０で維持されるファイル編成スキームは、クライアントアプリケーション２００と共にオペレーティングシステム２４５によってローカルファイル構造として表すことができる。ローカルファイル構造は、コンテンツアイテムのためのファイルシステムパスを定義することができる。
【００３２】
クライアントアプリケーション２００は、スタンドアロンアプリケーション、アプリケーションプラグイン、またはブラウザ拡張機能など、様々な形態をとることができる。クライアントアプリケーション２００は、ユーザインタフェースモジュール２０２、インタラクション管理モジュール２０４、コンテンツアクセスモジュール２０６、ローカルコンテンツデータストア２０８、監視プレゼンスデータストア２１０、コラボレーションモジュール２０７、およびUI拡張器モジュール２６５を含む。いくつかの実施形態において、UI拡張器モジュール２６５はクライアントアプリケーション２００とは別個のアプリケーションである。
【００３３】
他のデバイスタスクを処理することに加えて、オペレーティングシステム２４５は、アプリケーション２５５からの情報を、アプリケーションのそれぞれのユーザインタフェースを通じて表示することができる。アプリケーション２５５のためのユーザインタフェースは、１つまたは複数のUIオブジェクトまたは要素を含む。各UIオブジェクトは、プロパティセットによって定義される。プロパティは、ディスプレイ２２０上の高さ、幅（例えば、X-Y座標対）、または位置など、UIオブジェクトの寸法および位置を定義するグラフィカルプロパティを含むことができる。他のグラフィカルプロパティは、形状、色、不透明度、テクスチャ、テキスト属性、または任意の他の視覚的に知覚可能な特性を定義するプロパティを含むことができる。各UIオブジェクトは、UIオブジェクトを一意に特定するUIオブジェクトIDプロパティをさらに含む。いくつかの実施形態において、UIオブジェクトIDはオペレーティングシステムによって提供されるグローバル一意識別子(GUID)を含む。GUIDは各UIオブジェクトを一意に特定するために、オペレーティングシステムおよび１つまたは複数のアプリケーション２５５にわたって共有される。プロパティは、メソッド名、関数、または他のプログラムインタフェースなど、オブジェクトに関連付けられたプログラム機能のためのハンドルまたは識別子をさらに含むことができる。
【００３４】
いくつかの実施形態においてUIオブジェクトは、UIオブジェクトのタイプまたはクラスを定義するオブジェクトタイププロパティをさらに含むことができる。いくつかの例示的なUIオブジェクトタイプは、ウィンドウオブジェクト、ボタンオブジェクト、ファイルセレクタオブジェクト、リストビューオブジェクト、メニューオブジェクトなどを含むことができる。いくつかの実施形態においてUIオブジェクトまたはオブジェクトタイプは、UIオブジェクトタイプの挙動または他の特性を定義する、タイプ特有のプロパティをさらに含むことができる。UIオブジェクトプロパティは、バージョンまたは他のステータスプロパティなど、視覚的に現れない他のプロパティをさらに含むことができる。
【００３５】
アプリケーションのユーザインタフェース内のUIオブジェクトは、UI状態内のUIオブジェクトの階層を定義する親子オブジェクトプロパティを含むことができる。例えば、ファイルオブジェクトがフォルダオブジェクト内に位置する場合、ファイルオブジェクトを親フォルダオブジェクトの子として定義することができる。これらの親子プロパティは、関連オブジェクト用のオブジェクトIDを使用して定義される。ファイルオブジェクトとフォルダオブジェクトの両方を含むUIは、ファイルを含むフォルダを表すために、ファイルオブジェクトをフォルダオブジェクトの範囲内に表示するなど、親子関係に従って提示される。本明細書でより詳細に説明するように、親子UIオブジェクト関係の他の例は、メニュー-ボタン、ウィンドウ-メニュー、アプリケーション-ウィンドウなどを含むことができる。
【００３６】
UIオブジェクトは、特定のデバイスおよび構成(configuration)に基づいて変化し得る。UIオブジェクトは、デスクトップインタフェース上のウィンドウ、ならびにモバイルデバイス上のインタフェース要素を含み得る。その意味で、UIオブジェクトは、UIオブジェクトタイププロパティによって定義される異なるUIオブジェクトタイプまたはクラスに属することができる。各UIオブジェクトタイプは、さらにタイプ特有のプロパティも含むことができる。例えば、特定のファイルを表すUIオブジェクトは、ファイルシステム２７５内のファイルを特定するファイルシステムパスプロパティを含むことができる。ウィンドウなどのUIオブジェクトを使用するオペレーティングシステムの例は、マイクロソフトウィンドウズ（登録商標）１０およびOS X（登録商標）である。
【００３７】
UIオブジェクトおよびそれらの関係は、様々な手法またはデータ構造を用いて表される。一般に、オペレーティングシステム２４５はシステムレベルUI状態２８５を生成し、管理する。UI状態２８５はオペレーティングシステムのマスタUI状態であり、オペレーティングシステム２４５上で稼働するすべてのアプリケーションにわたってオペレーティングシステムによって管理されるすべてのUIオブジェクトを含む。UI状態２８５ならびに他の低レベル機能（ディスプレイ２２０、ネットワークインタフェース２２５、カメラ２３０、およびロケーションモジュール２３５の制御など）は、ユーザアプリケーション空間をオペレーティングシステム空間から分離するシステム境界２６７の下にあると言われる。オペレーティングシステム２４５は稼働中のアプリケーションに関してUI状態２８５の完全性およびセキュリティを維持する必要があるので、UI状態２８５の詳細(aspects)はアプリケーション２５５、クライアントアプリケーション２００、またはUI拡張器モジュール２６５から直接アクセス可能でない場合がある。したがって、オペレーティングシステム２４５は、UI API ２８０を通じた、UI状態２８５に関する特定のデータのみへのアクセスを提供する。
【００３８】
オペレーティングシステム２４５は、イベントモニタ２８７を含む。イベントモニタ２８７は、特定のUIイベントに関するシステム通知を、そのような通知について登録している任意のアプリケーションに送信することができる。UIイベント（本明細書ではイベントと呼ぶ）は、オペレーティングシステムによって維持されるアプリケーションUIのマスタUI状態の変化を示すことができる。UIイベントのいくつかの例は、ウィンドウオブジェクトのオープン／クローズ、現在フォーカスされているオブジェクトへの変更、ボタンオブジェクトの選択、フォルダオブジェクト内にリストされたファイルオブジェクトの選択、ウィンドウオブジェクトの移動またはリサイズなどを含むことができる。オペレーティングシステムおよびUI拡張器モジュールは、UI API（例えば、カリフォルニア州クパティノのアップル社によるOS X（登録商標）オペレーティングシステムのアクセシビリティAPI、またはワシントン州レドモンドのマイクロソフト社によるマイクロソフトウィンドウズ（登録商標）１０オペレーティングシステムのウインドウズシェルAPI）を使用して、UIイベントに関して互いに通信することができる。
【００３９】
例えば、ユーザ入力がターゲットアプリケーションのUIオブジェクトのグラフィカルプロパティの変化を引き起こす場合、UI状態２８５におけるそのアプリケーションのUI状態は、グラフィカルプロパティの変化に応じてオペレーティングシステムによって更新される。UI状態の変化の検出に応答して、イベントモニタ２８７は、イベントを示すシステム通知を登録されたリスナに送信することができる。UI拡張器モジュール２６５が受け取ることのできるいくつかの例示的なUIイベントは、UIオブジェクトの作成／削除、UIオブジェクトのフォーカスまたは選択の変更、UIオブジェクトのグラフィカルプロパティ（例えば、ウィンドウの寸法、形状、位置など）の変更、またはUIオブジェクトプロパティのいくつかの他の変更を含むことができる。
【００４０】
UI拡張器モジュール２６５は、ターゲットアプリケーションおよび／またはターゲットUIオブジェクトを指定する情報を用いて構成され、ターゲットアプリケーションおよび／またはターゲットUIオブジェクトに関連付けられたUIイベントに関するシステム通知またはコールバックのためにイベントモニタ２８７に登録する。例えば、UI拡張器はウェブブラウザ２５０、ワードプロセッサアプリケーション、スプレッドシートアプリケーションについてのイベントを登録し、連絡先ディレクトリ２４０、カメラ２３０、またはロケーションモジュール２３５についてのイベントを登録しないことができる。ターゲットアプリケーションで発生するイベントに関するシステム通知は、その根拠となるターゲットアプリケーションの継続的な実行がUI拡張器モジュール２６５による通知の受信に依存しないという点で、非同期通知であってよい。登録に続いて、UI拡張モジュール２４５のUIイベントリスナ２７０は、システム通知をリッスンすることができる。
【００４１】
様々な実装において、UIサブ状態生成器２７２は、システム通知に基づいて、ターゲットアプリケーションごとにUIサブ状態２７４を生成し、維持すること、またはすべてのターゲットアプリケーションからの要素を有する単一のUIサブ状態２７４を生成し、維持することができるとともに、この機能を実行するための１つの手段である。したがって、UIサブ状態生成器２７２によって維持されるUIサブ状態２７４は、オペレーティングシステム２４５によって管理されるUI状態２８５とは別個のものである。UI拡張器モジュール２６５は、UIイベントに基づいてターゲットオブジェクトについてのマスタUI状態２９５の変化を追跡するためにUIサブ状態を用いる。UI拡張器モジュール２６５は、UIイベントに関するコールバックを受信するためにUI拡張器モジュール２６５を登録するUI API ２８０および／またはグラフィックスAPI ２９２への呼び出しによって、ターゲットアプリケーションまたはターゲットオブジェクトについての特定のサブ状態情報を取得する。
【００４２】
ターゲットアプリケーションについてUIサブ状態２７４は、１つまたは複数のターゲットUIオブジェクトを含む。UIサブ状態２７４のターゲットUIオブジェクトは、マスタオペレーティングシステムUI状態２８５のUIオブジェクトのサブセットを表す。UIサブ状態２７４は、ターゲットアプリケーションのUIオブジェクトのすべてではなく、ターゲットアプリケーションの特定のターゲットUIオブジェクトだけを含むことができる。例えば、ターゲットUIオブジェクトは特定のウィンドウまたはペイン、およびターゲットアプリケーションの特定のボタンまたはメニューを含み、他のものは含まなくてもよい。したがって、コンテンツ管理ウィンドウに関連付けられたユーザインタフェースはフォルダまたはファイルを含むことができるが、フォルダおよびファイルのうちの特定のものだけが、コンテンツ管理システムによって管理されるコンテンツアイテムを表すターゲットオブジェクトであってよく、ターゲットオブジェクトでない他のものは、コンテンツ管理システムによって管理されないフォルダおよびファイルを表す。ターゲットアプリケーションおよびターゲットオブジェクトは、UI拡張器モジュール２６５にとっての関心オブジェクトとして記述することができる。
【００４３】
有利なことに、UIサブ状態生成器２７２はUIサブ状態２７４から、UI拡張器モジュール２６５にとって関心のないUIオブジェクトを除外し、オペレーティングシステム２４５によって管理されるUI状態２８５のすべてのUIオブジェクトのサブセットのみを保持する。UIサブ状態２７４でターゲットUIオブジェクトのみを処理することは、イベント処理効率および速度の点でUI拡張器モジュール２６５の機能を改善し、かつメモリ割り当て要件を低減する。
【００４４】
UIサブ状態生成器２７２は、各ターゲットアプリケーションについて別個のUIサブ状態２７４を生成することができる。いくつかの実施形態では、所定のN個のUIサブ状態２７４（例えば、直近にフォーカスされたもの）がメモリ内に保持され、より古いUIサブ状態２７４がメモリから解放される。いくつかの実施形態では、複数のアプリケーション２５５からのUIサブ状態２７４が、単一のUIサブ状態２７４に合成されてもよい。例えば、N個のUIサブ状態２７４は、各ターゲットアプリケーションルートノードに対する親ノードであるルートUI拡張器アプリケーションノードに接続されてよい。UI状態５００および関連するUIサブ状態８００の例を、それぞれ図５および図８に示し、以下でより詳細に説明する。
【００４５】
UI拡張生成器２７６は、ターゲットUIオブジェクトのグラフィカルプロパティと協調するUI拡張を生成するためにUIサブ状態２７４にアクセスするとともに、この機能を実行するための１つの手段である。したがって、UI拡張生成器２７６は、オペレーティングシステム２４５によって維持されるマスタUI状態２８５に直接アクセス可能でなくてもよい。UIサブ状態生成器２７２はオペレーティングシステム２４５のUIイベントマネージャ２８５からUIイベントに関するシステム通知を受信することに基づいてUIサブ状態２７４を維持し、UI拡張生成器２７６はUI拡張を生成またはレンダリングするためにUIサブ状態２７４を参照する。
【００４６】
上述のように、UI拡張器モジュール２６５は、通信タイプまたはメッセージの限定されたクラスを定義するオペレーティングシステムのAPIの１つまたは複数を用いて（または以下で説明する内部UI状態２９０から)、ターゲットアプリケーションおよびオブジェクトのUI状態情報を取得する。これらのAPIは、UI API ２８０およびグラフィックスAPI ２９２を含む。UI API ２８０は、UIイベントのために、オペレーティングシステム２４５とUI拡張器モジュール２６５との間のメッセージングを提供する。同様に、グラフィックスAPI ２９２は、グラフィックスイベントのために、オペレーティングシステム２４５とUI拡張器モジュール２６５との間のメッセージングを提供する。グラフィックスAPI ２９２の一例は、アップル社によって提供されるOS X（登録商標）用のコアグラフィックスAPIを含む。グラフィックスイベントは、オペレーティングシステム２４５のグラフィックスエンジン２９４によるグラフィックスオブジェクトにおける変化のレンダリングを意味する。いくつかの実施形態において、UI拡張器モジュール２６５は、図１４に関連して以下でより詳細に説明するように、UI状態２８５の非同期な変化に対するUIサブ状態２７５の応答性を維持するためにUIイベント通知を遅延しうる場合に、UIイベントに加えてグラフィックスイベントを登録し、受信することができる。
【００４７】
UI API２８０の例には、OS X（登録商標）用のアクセシビリティAPI、およびマイクロソフトウィンドウズ（登録商標）用のウィンドウズシェルAPIが含まれる。UI API ２８０は、UI拡張器モジュール２６５がオペレーティングシステム２４５からのUIイベントについてのシステム通知を登録および受信するために用いる、予め定義されたルーチンおよびプロトコルのセットを提供する。グラフィックスAPI ２９２は、UI拡張器モジュール２６５がオペレーティングシステム２４５からのグラフィックスイベントについてのシステム通知を登録および受信するために用いる、予め定義されたルーチンおよびプロトコルのセットを提供する。
【００４８】
UI拡張生成器２７６は、UIサブ状態２７４内のターゲットUIオブジェクトのプロパティに基づいてターゲットアプリケーションのためのUI拡張を生成可能であるとともに、この機能を実行するための１つの手段である。UI拡張は、ターゲットアプリケーションのための拡張および追加機能のためのインタフェースを提供する。UI拡張は、コンテンツ管理システム１１０および関連するサービスとのインタラクションを容易にする拡張器UIオブジェクトにより、ローカルファイルシステムのためのエクスプローラまたはファインダアプリケーションを拡張するといった、拡張機能を提供することができる。
【００４９】
UI拡張生成器２７６はさらに、アプリケーションUIのターゲットUIオブジェクトと共にUI拡張を表示することができる。例えば、UI拡張を１つまたは複数のターゲットUIオブジェクトと連携して表示することができる。協調時にUI拡張は、ネイティブアプリケーションUIの、統合または付加されたオブジェクトのように動作することができる。例えば、UI拡張は、ターゲットUIメニューオブジェクトのグラフィカルプロパティに対する変更にリサイズ、スケーリング、移動、およびおよびまたは他の方法で適応するUIボタンオブジェクトであってもよい。別の例では、ターゲットUIメニューオブジェクトが移動されるとき、UI拡張はネイティブアプリケーションUIへのUI拡張アタッチメントを保存するために、それに応じて移動されてもよい。さらに別の例ではターゲットUIオブジェクトが移動されるとき、UI拡張は移動が完了するまで隠されてもよく、その時点で、UI拡張は移動されたターゲットUIオブジェクトに対して相対的な位置に再表示され得る。有利なことに、ネイティブアプリケーション２５５とは別個のUI拡張器モジュール２６６を用いてUI拡張を生成することは、アプリケーション２５５がUI拡張アタッチメントの性質（例えば、大きさ、位置、外観、内容など）にいかなる直接的なプログラム的制約を課さないことを意味する。したがって、UI拡張は、ターゲットアプリケーション自体によって許可される所定の固定位置だけではなく、任意の位置でターゲットアプリケーションのUIに添付することができる。したがって、一実施形態では、UI拡張がターゲットアプリケーションのUI内に直接統合されるのではなく、ターゲットUIオブジェクトにグラフィカルオーバレイとして提供される。
【００５０】
いくつかのアプリケーション２５５は、それ自体の内部UI状態２９０を維持することができる。アプリケーションの内部UI状態２９０は、UIオブジェクトの内部モデルと、アプリケーションのためのUIオブジェクトのグラフィカルプロパティとを規定する。アプリケーション２５５は（例えば、APIを用いて）内部UI状態２９０への制限されたアクセスを他のアプリケーション２５５に提供することができる。これらのアプリケーション２５５について、いくつかの実装形態では、UI拡張を生成するために必要なUIイベントに関するシステム通知からの情報がゆっくりと、利用不可能に、または不完全に提供される場合、UI拡張器モジュール２６５はアプリケーション２５５と通信することができる。例えば、マスタUI状態２８５は、UIサブ状態を解決するのに十分なUIオブジェクトタイプまたはクラスを含まなくてもよい。例えば、ウィンドウズ（登録商標）オペレーティングシステムはウィンドウ、ボタン、メニュー、フォルダ、およびファイルについてウィンドウUIオブジェクトタイプのみを使用し、特定のタイプ情報を維持するために、それ自体のUI状態２９０内の特定のアプリケーション２５５にそれを残す。したがって、これらの状況では、UI拡張器モジュール２６５がUI状態２８５のUIオブジェクトとUIサブ状態２７４のターゲットUIオブジェクトとの間の変換機能を、その内部UI状態２９０についてアプリケーション２５５から取得したデータに基づいて実行することができる。変換機能はUIサブ状態２７４のための別個のUIオブジェクトタイプを特定し、ファイルまたはフォルダオブジェクトタイプのためのターゲットアプリケーションおよびファイルシステムパスなどの関連するタイプ特有のパラメータを特定する。UI拡張器モジュール２６５は、変換機能を使用することなどによって、オブジェクトID間の対応を決定することに基づいて、マスタUIオブジェクトをアプリケーションUIオブジェクトにマッチングさせることができる。
【００５１】
場合によっては、オペレーティングシステム２４５からのUIイベントのシステム通知がUIオブジェクトによって表されるコンテンツアイテム（例えば、ファイル、フォルダなど）を特定することに失敗することがある。例えば、ウィンドウズ（登録商標）オペレーティングシステムは、そのウィンドウオブジェクトクラス内の基礎となるコンテンツアイテムを識別するパラメータを含まない。図１２に関連して以下でより詳細に説明するように、UI拡張器モジュール２６５はUIオブジェクトタイプ、コンテンツアイテム、または他のオブジェクトプロパティを識別するために、ターゲットアプリケーション２５５の内部UI状態２９０に問い合わせることができ、問い合わせの結果を含むようにUIサブ状態２７５を更新することができる。
【００５２】
オペレーティングシステム２４５からのイベントのシステム通知はまた、UIサブ状態２７４をタイミング良く更新し続けるには不十分なことがあり、これは、UI拡張を、ターゲットアプリケーションの基礎となるUIとの協調を崩す要因となり得る。例えば、OS X（登録商標）アクセシビリティAPIまたはウィンドウズシェルAPIのためのUIイベントモニタ２８７は、ターゲットアプリケーションウィンドウの動きに関して許容できないメッセージング遅延に遭遇しうる。したがって、UI拡張器モジュール２６５は、より新しく、よりメッセージ遅延が少ない他のソースからイベント通知を受信することができる。例えば、オペレーティングシステム２４５は、通常、UI状態２８５のUIオブジェクトをレンダリングするグラフィックスエンジン２９４を含む。グラフィックスエンジン２９４によってレンダリングされるUIオブジェクトはグラフィックスオブジェクトであり、UIオブジェクトのグラフィカルプロパティと同様のグラフィカルプロパティを含むことができる。例えば、レンダリングされたウィンドウのグラフィックスオブジェクトはグラフィックスエンジンがグラフィックスオブジェクトをレンダリングできるように、高さ、幅、および位置パラメータを含むことができる。反応のよいユーザインタフェースを保証するため、グラフィックスオペレーションには非常に高い優先順位が与えられるので、UIオブジェクトおよびイベントの現在の状態は、グラフィックスエンジンから最小の遅延で得ることができる。したがって、図１４に関して本明細書でより詳細に論じるように、UI拡張器モジュール２６５はいくつかのターゲットUIオブジェクトのグラフィックスイベントに関するシステム通知を受信するために、OS X（登録商標）用のコアグラフィックスAPIを使用するなど、グラフィックスAPI ２９２を使用してグラフィックスエンジン２９４と通信することができる。グラフィックスイベントは本明細書で使用される場合、グラフィックスオブジェクトのグラフィカルプロパティを変更し、したがってグラフィックスオブジェクトのレンダリングの変更をもたらすイベントを指す。
【００５３】
グラフィックスイベントに関するシステム通知は、グラフィックスオブジェクトのグラフィックスオブジェクトIDを含むことができる。UI拡張器モジュール２６５はグラフィックスイベントのためのUIオブジェクトを決定するために、グラフィックスオブジェクトIDをUIオブジェクトIDにマッピングすることができる。UI拡張器モジュール２６５は、UIオブジェクトID（またはGUID）をグラフィックスオブジェクトIDに関連付けることができる。したがって、グラフィックスエンジン２９４およびグラフィックスAPI ２９２（たとえば、コアグラフィックスAPI）はUI API ２８０（たとえば、アクセシビリティまたはウィンドウズ（登録商標）シェルAPI）よりも速いイベント通知を提供する。その意味で、UIサブ状態２７４に関連する非同期イベントの通知はオペレーティングシステム２４５の様々なプロセスから、適切なAPIを使用して提供される。
【００５４】
さらに、オペレーティングシステム２４５は、同時に実行することができる複数のネイティブアプリケーション２５５の制御を管理する。次いで、異なるアプリケーション２５５にわたるUIオブジェクトは、ディスプレイ画面上で１つのレイヤが別のレイヤに重なるか、または別のレイヤを覆うように、重ねられる。いくつかのオペレーティングシステムおよび構成では、単一のアプリケーションに関するインタフェースオブジェクトだけが同時に表示される。１つのユーザインタフェースオブジェクトは通常、アクティブまたはフォーカスされたUIオブジェクトであり、これは、オペレーティングシステム２４５がキーボード入力、カーソル移動、タッチセンサ、タッチジェスチャなどのユーザ入力を送るユーザインタフェースオブジェクトであることを意味する。特定の時間にアクティブであるウィンドウまたは他のUIオブジェクトは、フォーカスを有すると言うことができる。ユーザは別のUIオブジェクトを選択して、フォーカスを１つのユーザインタフェースオブジェクトから別のユーザインタフェースオブジェクトに変更することができ、場合によっては、オペレーティングシステム２４５がユーザ入力なしでフォーカスを変更することができる。
【００５５】
通常、ネイティブアプリケーション２５５に関連付けられたユーザインタフェースオブジェクト、例えばウィンドウは、実行するネイティブアプリケーション２５５のプロセス識別子とUIオブジェクトのUIオブジェクトIDとの間の関連を維持するオペレーティングシステム２４５によって管理される。いくつかの実施形態では、UIオブジェクトIDがGUIDを含むことができる。オペレーティングシステム２４５は、プロセス識別子および／またはGUIDに関連付けられたコンテンツアイテムおよびファイルシステムパスも維持することができる。例えば、特定のアプリケーションはプロセスID ２５８７に関連付けられ、ユーザインタフェースオブジェクト識別子４、８、および１０を用いて複数のユーザインタフェースオブジェクトを管理することができる。各UIオブジェクトIDはそのネイティブアプリケーション２５５によって開かれた特定のコンテンツアイテムに別々に関連付けられるか、またはそれを表し、複数のUIオブジェクトIDおよびプロセス識別子を同じコンテンツアイテムに関連付けることができる。
【００５６】
オペレーティングシステム２４５はまた、UIイベントまたはグラフィックスイベントなどの様々なイベントを処理し、認識する。UIイベントは、とりわけ、コンテンツアイテムをクローズまたはオープンするためのネイティブアプリケーション２５５からの要求、ウィンドウまたは他のUIオブジェクトをクローズするためのネイティブアプリケーション２５５からの要求、UIオブジェクトのグラフィカルプロパティを変更するための要求、およびUIオブジェクトフォーカスを変更するための要求を含むことができる。以下で説明するように、UI拡張モジュール２５６は、これらのUIイベント（およびいくつかの実施形態ではグラフィックスイベント）を使用して、UI拡張を生成することができる。さらに、これらのイベントはコンテンツアイテムに関連するプレゼンスの変化を認識するために、インタラクション管理モジュール２０４によって使用することができる。
【００５７】
クライアントアプリケーション２００はユーザが装置上でコンテンツアイテムを開き、閉じ、編集し、保存し、または共有するときなど、コンテンツアイテムに関して行われるインタラクションを特定することができる。これらのインタラクションはコンテンツアイテムとのインタラクションを記述するインタラクション情報を生成するために、クライアントアプリケーション２００によって特定することができる。インタラクション情報は、クライアントアプリケーション２００とのインタラクションおよびネイティブアプリケーション２５５とのインタラクションを含む。ネイティブアプリケーション２５５内からのコンテンツアイテムに関して実行されるアクションから決定されるインタラクション情報は、プレゼンス情報と呼ばれる。インタラクション情報およびプレゼンス情報を決定するクライアントアプリケーション２００などのアプリケーションは、プレゼンスアプリケーションと呼ばれる。（プレゼンス情報に加えて）追加のタイプのインタラクション情報は、クライアントアプリケーション２００によって受信される、コンテンツアイテムに関連するノート、メッセージ、および通知要求を含む。メッセージは他のデバイスへのチャットメッセージと、コンテンツアイテムとインタラクションする（例えば、編集する）ユーザの意図を示すメッセージと、コラボレーションセッションを開始するユーザの意図を示すメッセージとを含むことができる。通知要求は、別のユーザのインタラクション情報が変化した際の通知の要求を含むことができる。インタラクション情報はまた、バージョニングノート、イベントタイムスタンプ、または、バージョニング情報または以前のコンテンツアイテムバージョンを閲覧するための要求などの、コンテンツアイテムに関するコンテンツ管理システム１１０に格納されたさらなる情報に対する要求などのメタデータ修正を含む。クライアントアプリケーション２００は、ユーザからチャットまたはインテント情報を受信することができる。様々な実施形態では、装置１００がオペレーティングシステム２４５とのインタラクションを介して、コンテンツアイテムにおけるユーザの存在（すなわち、ユーザがコンテンツアイテムを開いているか、またはネイティブアプリケーション２５５を使用してコンテンツアイテムを編集していること）を特定する。インタラクション情報は例えば、コンテンツ管理システム１１０を介して、コンテンツアイテムに関して同期された他の装置１００に送信することができる。
【００５８】
装置１００はコンテンツ管理システム１１０と同期したコンテンツアイテムを維持し、ユーザが装置１００に格納された様々なネイティブアプリケーション２５５を使用して、コンテンツアイテムを閲覧し、修正し、またコンテンツアイテムとインタラクションすることを可能にする。例えば、装置１００は、画像コンテンツアイテムを操作する写真編集アプリケーション、テキストコンテンツアイテムの修正を可能にするワードプロセッサアプリケーション、または描画コンテンツアイテムの修正を可能にするコンピュータ支援設計(CAD)アプリケーションを含むことができる。インタラクション情報はアプリケーション２５５を介して装置１００によって決定され、インタラクション情報は他の装置１００に送信される。さらに、装置１００が他の装置１００に関するインタラクション情報を受信すると、装置１００はそのインタラクション情報を表示する。
【００５９】
一実施形態では、コンテンツアイテムに関するインタラクション情報を検出するアプリケーションとコンテンツアイテムを閲覧または操作するアプリケーションとが異なってもよい。例えば、インタラクション情報を検出するクライアントアプリケーションは、画像コンテンツアイテムを操作または表示する写真編集アプリケーションとは別のものであってよい。様々な実施形態では、インタラクション情報を検出するアプリケーションがコンテンツアイテムをコンテンツ管理システム１１０と同期させる役割も果たす。プレゼンス情報を検出するアプリケーションはプレゼンスが検出されるアプリケーションと区別することができるので、プレゼンスモニタリングを各タイプのコンテンツアイテムビューアに統合する必要なしに、多くのアプリケーションおよびコンテンツアイテムについて一度にプレゼンスを監視することができる。すなわち、例えば、写真編集アプリケーション、ワードプロセッサアプリケーション、プレイリスト編集アプリケーションのそれぞれについて、アプリケーションに依存したプレゼンス監視アドオンやアプリケーション変更は不要である。
【００６０】
コンテンツアイテムを開くために、ネイティブアプリケーション２５５はオペレーティングシステム２４５にコンテンツアイテムを要求し、そのコンテンツアイテムに関してオペレーティングシステム２４５からコンテンツアイテムへのハンドルを受信する。場合によっては、アプリケーション２５５がハンドルを維持せず、ネイティブアプリケーション２５５がコンテンツアイテムからのデータを使用し続ける場合も、またはユーザがコンテンツアイテムに編集を入力する場合も、アプリケーション２５５はコンテンツアイテムデータをメモリにロードし、その後、コンテンツアイテムハンドルを閉じることができる。したがって、オープンコンテンツアイテムハンドルは、アプリケーションが特定のコンテンツアイテムとインタラクションしているかどうかを判定するための信頼できる方法ではないことが多い。したがって、特定の実施形態では、ネイティブアプリケーション２５５によって示されるさらなる挙動を使用して、アプリケーションがコンテンツアイテムを編集しているかどうかを判定する。
【００６１】
ネイティブアプリケーション２５５はまた、ユーザがコンテンツアイテムを変更するとき、およびユーザがコンテンツアイテムを保存する前に、様々な挙動を示す。これらの挙動は、アプリケーションおよびオペレーティングシステム２４５に基づいて変化する。例えば、いくつかのネイティブアプリケーション２５５は、オープンコンテンツアイテムとは異なるファイル名、例えば、チルダや他の認識可能なマークから始まる一時的なコンテンツアイテムのファイル名を有する一時的コンテンツアイテムを作成する。他の例ではネイティブアプリケーション２５５がコンテンツアイテムに関連付けられたユーザインタフェース要素のタイトルを変更し、これはユーザによって直接見ることができても、見ることができなくてもよい。さらに別の例では、ネイティブアプリケーション２５５がコンテンツアイテムが変更されたことを示すフラグを設定する。ネイティブアプリケーション２５５は、別のアプリケーションまたはオペレーティングシステムからの要求に応答して、コンテンツアイテムの変更に関する情報を提供することもできる。オープンコンテンツアイテムハンドルは、コンテンツアイテムがネイティブアプリケーション２５５によって編集されているかどうかを確実に判定することができないので、これらの挙動をプレゼンス管理モジュール２０４によって使用して、コンテンツアイテムの編集または変更に関するプレゼンスを判定することができる。
【００６２】
ネイティブアプリケーション２５５は、典型的には互いに独立して装置１００上で実行されてよく、アプリケーションと、装置１００上で稼働する他のアプリケーションまたはプロセスとの間の通信を許可してもよい。ネイティブアプリケーション２５５は典型的にはAPIを使用してプロセスに情報を提供し、APIは、アプリケーションが実行中のプロセスに情報を要求することを可能にする。例えば、ネイティブアプリケーション２５５は、アプリケーション２５５によって管理される内部UI状態２９０のUIオブジェクトの要求を許可するAPIを提示してもよく、またはUIオブジェクトのファイルシステムパス（例えば、タイトル、ファイルシステムフォルダロケーションなどを含む）を示してもよく、またはネイティブアプリケーション２５５によって開かれた（例えば、現在フォーカスされている）コンテンツアイテムに関連付けられたファイルシステムパスを要求してもよい。
【００６３】
クライアントアプリケーション２００は、コンテンツ管理システム１１０へのアクセスを管理する。本明細書で様々に示すように、クライアントアプリケーション２００は、クライアントアプリケーション２００によってアクセスされるコンテントへのインタフェースを生成するユーザインタフェースモジュール２０２を含むとともに、この機能を実行するための１つの手段である。生成されたインタフェースは、ディスプレイ２２０によってユーザに提供される。クライアントアプリケーション２００は、コンテンツ管理システム１１０のコンテンツストレージからアクセスされたコンテンツをローカルコンテンツデータストア２０８に格納することができる。ここではクライアントアプリケーション２００内に示されているが、ローカルコンテンツデータストア２０８はクライアント装置１００のための他のデータと共に、例えば、不揮発性ストレージに格納される。ローカルコンテンツデータストア２０８がこのように格納されると、クライアントアプリケーション２００がコンテンツ管理システム１１０と通信していないとき、コンテンツは、ユーザ、およびネイティブアプリケーション２５５などの他のアプリケーションまたはモジュールに利用可能である。コンテンツアクセスモジュール２０６はローカルコンテンツデータストア２０８に対する更新を管理し、同期ロジックを使用してコンテンツ管理システム１１０と通信し、クライアント装置１００によって変更されたコンテンツを、コンテンツ管理システム１１０上に維持されているコンテンツと同期させる。このような同期ロジックの一例は２０１３年９月２７日に出願された米国特許第９，０５３，１６５号に提供されており、参照によってその全体が本明細書に組み込まれる。クライアントアプリケーション２００は、スタンドアロンアプリケーション、アプリケーションプラグイン、またはブラウザ拡張機能など、様々な形態をとることができる。
【００６４】
コンテンツ管理システム１１０は、コンテンツアイテムが削除されたこと、またはがコンテンツアイテムの古いバージョンを閲覧または編集していることを指定する情報など、コンテンツアイテムを同期させるための追加データを提供することができる。
【００６５】
インタラクション管理モジュール２０４はユーザの同期されたコンテンツアイテムに関するインタラクション情報を取得し、管理する。インタラクション管理モジュール２０４は、プレゼンス情報についてインタラクション管理モジュール２０４によって監視されているネイティブアプリケーション２５５とは別個のモジュールとすることができ、また別個のプロセスとして実行することができる。インタラクション管理モジュール２０４は、同期されたコンテンツアイテムのために装置１００上で発生するインタラクションイベントを検出する。インタラクション管理モジュール２０４は、プレゼンスイベントを監視することによって、またはコメントおよびメッセージなど、受信したユーザ入力を監視することによって、インタラクションイベントを検出することができる。インタラクションイベントは、ユーザがコンテンツアイテムとインタラクションしたことを示す。インタラクションは、コンテンツアイテムを閲覧すること、コンテンツアイテムを編集すること、コンテンツアイテムを保存すること、コメントアイテムについてコメントすること、コンテンツアイテムに関連するメッセージを送信すること、およびコンテンツアイテム内で協働することを含む。インタラクション管理モジュール２０４は、インタラクションイベントおよび他のインタラクション情報に関する通知をコンテンツ管理システム１１０に送信する。
【００６６】
多くのタイプのインタラクション情報を決定するために、インタラクション管理モジュール２０４は、ユーザインタフェース要素を介してインタラクション情報を受信することができる。同期されたコンテンツアイテムに関連するプレゼンス情報を確認するために、インタラクション管理モジュール２０４は、ターゲットネイティブアプリケーション２５５に関連付けられたUIオブジェクトを監視する。インタラクション管理モジュール２０４はUIオブジェクトがコンテンツアイテムに関連付けられた後などに、すべてのユーザインタフェース要素を監視することができ、あるいは、特定のターゲットUIオブジェクトだけを監視することができる。いくつかの実施形態では、UI拡張器モジュール２６５がターゲットUIオブジェクトのUIイベントを監視し、インタラクション情報をインタラクション管理モジュールに通信する。監視プレゼンスデータストア２１０は、同期されたコンテンツアイテムに関連するアクションを決定するために特定のUIオブジェクトまたはコンテンツアイテムが監視されることを示すため、インタラクション管理モジュール２０４によって維持される情報を含む。例えば、監視プレゼンスデータストア２１０は、ターゲットUIオブジェクトおよび／またはターゲットアプリケーションを保存するデータベースを含むことができる。
【００６７】
ここではクライアントアプリケーション２００の一部として示されているが、様々な実装において、コンテンツアクセスモジュール２０６およびインタラクション管理モジュール２０４はそれぞれの機能を実行するために別個のモジュールに分離されてもよい。同様に、様々なモジュールおよびデータストアは便宜上、本開示全体にわたって別々に説明されているが、様々な実装において、それらは所望に応じて組み合わせられたり、さらに別々の構成要素に分離される。
【００６８】
図３は、一実施形態による、図１のコンテンツ管理システム１１０の構成要素を示す。コンテンツ管理システム１１０を使用するとき、様々なコンテンツ管理サービスを容易にするために、ユーザは、コンテンツ管理システム１１０を用いてアカウントを作成することができる。各ユーザのアカウントは、ユーザIDまたはユーザ名などの識別子に関連付けられる。一実施形態では、ユーザのアカウント情報がユーザアカウントデータベース３１８に維持される。ユーザアカウントデータベース３１８は、登録されたユーザのプロファイル情報を格納することができる。場合によっては、ユーザプロファイル内の個人情報は、ユーザ名および／または電子メールアドレスだけである。しかし、コンテンツ管理システム１１０は、パスワード回復情報、人口統計情報、支払い情報、およびコンテンツ管理システム機能を提供するために必要な他の詳細など、さらなるユーザ情報を受け入れるように構成することもできる。
【００６９】
ユーザアカウントデータベース３１８はまた、アカウントタイプ（例えば、無料または有料）、各ユーザの使用情報（例えば、ファイル編集履歴）、許可された最大保管スペース、使用された保管スペース、コンテンツストレージロケーション、セキュリティ設定、個人構成設定、コンテンツ共有データなどのアカウント管理情報を含むことができる。アカウント管理モジュール３０４は、ユーザアカウントデータベース３１８内のユーザアカウント詳細を更新および／または取得することができる。アカウント管理モジュール３０４は、コンテンツ管理システム１１０内の任意の数の他のモジュールとインタラクションすることができる。
【００７０】
アカウントは複数の装置１００に関連付けることができ、コンテンツアイテムはアカウントに関連付けて格納することができる。格納されたコンテンツは、異なる挙動、または他のコンテンツアイテムグループ化方法を有する様々なタイプのフォルダを含むこともできる。例えば、アカウントは、いかなるユーザもアクセス可能なパブリックフォルダを含むことができる。パブリックフォルダには、ウェブアクセス可能なアドレスを割り当てることができる。ウェブアクセス可能なアドレスへのリンクは、パブリックフォルダのコンテンツにアクセスするために使用することができる。別の例では、アカウントが写真コンテンツアイテムを対象とし、写真用に調整された特定の属性およびアクションを提供する写真フォルダ、オーディオファイルコンテンツアイテムを再生したり、他のオーディオ関連アクションを実行したりする能力を提供するオーディオフォルダ、または他の特殊用途フォルダを含むことができる。アカウントはまた、複数のユーザアカウントにリンクされ、複数のユーザアカウントが利用可能な共有フォルダまたはグループフォルダを含むことができる。複数のユーザに対する許可は、共有フォルダごとに異なる。一実施形態ではアカウントが複数のユーザに関連付けられた名前空間であり、各ユーザはその名前空間とインタラクションする許可と関連付けられている。
【００７１】
一実施形態では、コンテンツはコンテンツストレージ３２０に格納される。コンテンツストレージ３２０は、記憶装置、複数の記憶装置、またはサーバであってよい。あるいは、コンテンツストレージ３２０は、１つまたは複数の通信ネットワークを介してアクセス可能なクラウドストレージプロバイダまたはネットワークストレージであってもよい。一構成では、コンテンツ管理システム１１０がコンテンツアイテムを、デバイス上で見える組織構造と同じ組織構造で保存する。しかし、コンテンツ管理システム１１０は、コンテンツアイテムを特有の順序、配置、または階層で格納することができる。
【００７２】
コンテンツストレージ３２０はまた、コンテンツアイテム、コンテンツアイテムタイプ、および様々なアカウント、フォルダ、またはグループに対するコンテンツアイテムの関係を記述するメタデータを格納することができる。コンテンツアイテムのメタデータはコンテンツアイテムの一部として、または別個に格納することができる。一構成では、コンテンツストレージ３２０に格納された各コンテンツアイテムに、システム全体にわたる固有識別子を割り当てることができる。
【００７３】
コンテンツストレージ３２０は、重複コンテンツアイテムまたはコンテンツアイテムの重複セグメントを特定することにより、必要とされるストレージスペースの量を低減することができる。一実施形態では、例えば、コンテンツアイテムの単一のコピーのみを格納し、またポインタまたは他の機構を使用して複製を単一のコピーとリンクさせながら、コンテンツアイテムの所有権メタデータ（例えば、所有権リスト）内にユーザの識別子を含めることによって、コンテンツアイテムが異なるユーザ間で共有される。同様に、コンテンツストレージ３２０は、コンテンツアイテムへの変更、コンテンツアイテムの異なるバージョン（分岐バージョンツリーなど）、および変更履歴を追跡するバージョン制御機構を使用して、コンテンツアイテムを格納することができる。変更履歴は、オリジナルコンテンツアイテムバージョンに適用されると、変更されたコンテンツアイテムバージョンを生成する変更のセットを含む。
【００７４】
一実施形態では、コンテンツ管理システム１１０が同期モジュール３１２を使用して、コンテンツアイテムを１つまたは複数のデバイスと自動的に同期させる。同期はプラットフォームに依存しない。すなわち、コンテンツアイテムは、様々なタイプ、機能、オペレーティングシステムを有する複数の装置１００にわたって同期される。例えば、クライアントアプリケーション２００は、コンテンツ管理システム１１０の同期モジュール３１２を介して、装置１００のファイルシステム２７５内のコンテンツを、システム１１０上の関連するユーザアカウント内のコンテンツアイテムと同期させる。クライアントアプリケーション２００は、指定されたフォルダおよびそのサブフォルダ内のコンテンツアイテムに対する任意の変更を同期モジュール３１２と同期させることができる。そのような変更には、新しい、削除された、修正された、コピーされた、または移動されたファイルまたはフォルダが含まれる。同期モジュール３１２はまた、装置１００に関連付けられたコンテンツに対する任意の変更をクライアントアプリケーション２００に提供する。これにより、装置１００におけるローカルコンテンツが、コンテンツ管理システム１１０におけるコンテンツアイテムと同期する。
【００７５】
競合管理モジュール３１４は、異なる装置１００に位置するコンテンツアイテムのバージョン間に不一致があるかどうかを判定する。例えば、コンテンツアイテムが第１のデバイスおよび第２のデバイスにおいて変更される場合、異なるバージョンのコンテンツアイテムが各デバイスに存在し得る。同期モジュール３１２は例えば、コンテンツアイテム変更の変更時間を識別することによって、そのようなバージョニング競合を決定する。競合管理モジュール３１４は任意の適切な手段によって、例えば、バージョンをマージすることによって、または、後に提出されるバージョンの１つ以上のデバイスに通知することによって、バージョン間の競合を解決する。
【００７６】
ユーザは、ユーザインタフェースモジュール３０２によって生成されたウェブインタフェースを介してコンテンツを閲覧または操作することもできる。例えば、ユーザは、コンテンツ管理システム１１０によって提供されるウェブアドレスをウェブブラウザ２５０で閲覧することができる。新しいバージョンのファイルのアップロードなど、ウェブインタフェースを介して行われるコンテンツストレージ３２０内のコンテンツの変更または更新は、ユーザのアカウントに関連付けられた他の装置１００に同期される。複数の装置１００は単一のアカウントに関連付けられてよく、そのアカウント内のファイルは、複数の装置１００の各々の間で同期される。
【００７７】
コンテンツ管理システム１１０は、様々な装置１００と、またAPIを通じて他のコンテンツおよび／またはサービスプロバイダとインタフェースする通信インタフェース３００であって、この機能を実行するための１つの手段である通信インタフェース３００を含む。特定のソフトウェアアプリケーションは、ユーザのために、APIを介してコンテンツストレージ３２０にアクセスする。例えば、スマートフォンまたはタブレットコンピューティングデバイスのアプリなどのソフトウェアパッケージは、ユーザがクレデンシャルを提供する際に、コンテンツを読み取る、書き込む、作成する、削除する、共有する、または他の方法で操作するために、コンテンツ管理システム１１０への直接呼び出しをプログラムにしたがって行うことができる。同様に、APIは、ユーザがウェブサイトを介してコンテンツストレージ３２０の全部または一部にアクセスすることを可能にすることができる。
【００７８】
コンテンツ管理システム１１０はまた、認証器モジュール３０６を含むことができ、認証器モジュール３０６は要求されたコンテンツアイテムへのアクセスが許可されているかどうかを判定するために、ユーザクレデンシャル、セキュリティトークン、API読み出し、特有のデバイスなどを検証するとともに、この機能を実行するための１つの手段である。
【００７９】
コンテンツ管理システム１１０は、コンテンツを公的または私的に共有するための共有モジュール３１０を含む。コンテンツを公的に共有することは、コンテンツ管理システム１１０とネットワーク通信する任意のコンピューティングデバイスからコンテンツアイテムをアクセス可能にすることを含むことができる。コンテンツを私的に共有することは、各ユーザアカウントがコンテンツアイテムにアクセスできるように、コンテンツストレージ３２０内のコンテンツアイテムを２つ以上のユーザアカウントにリンクすることを含むことができる。コンテンツは、様々なタイプのユーザアカウントにわたって共有することもできる。
【００８０】
いくつかの実施形態においてコンテンツ管理システム１１０は、コンテンツストレージ３２０内の各コンテンツアイテムの位置を特定するコンテンツディレクトリを維持するためのコンテンツ管理モジュール３０８を含み、クライアントアプリケーションがストレージ３２０内のコンテンツアイテムへのアクセスを要求することを可能するとともに、この機能を実行するための１つの手段である。コンテンツディレクトリ内のコンテンツエントリは、コンテンツストレージ３２０内のコンテンツアイテムの位置を特定するコンテンツポインタをさらに含むことができる。例えば、コンテンツエントリは、メモリ内のコンテンツアイテムの記憶アドレスを示すコンテンツポインタを含むことができる。いくつかの実施形態においてコンテンツエントリは、それぞれが１つのコンテンツアイテムの一部を含む複数の位置を指す複数のコンテンツポインタを含む。
【００８１】
コンテンツパスおよびコンテンツポインタに加えて、いくつかの構成におけるコンテンツエントリは、コンテンツアイテムにアクセスするユーザアカウントを特定するユーザアカウント識別子も含む。いくつかの実施形態では、コンテンツアイテムが複数のユーザアカウントによる共有アクセスを有することを示す単一のコンテンツエントリに複数のユーザアカウント識別子を関連付けることができる。
【００８２】
コンテンツアイテムを私的に共有するため、共有モジュール３１０はコンテンツアイテムに関連付けられたコンテンツエントリにユーザアカウント識別子を追加し、これによって追加されたユーザアカウントがコンテンツアイテムにアクセスすることを許可する。共有モジュール３１０は、コンテンツアイテムへのユーザアカウントのアクセスを制限するためにコンテンツエントリからユーザアカウント識別子を除去することもできる。
【００８３】
コンテンツを共有するため、共有モジュール３１０は、任意のウェブブラウザがコンテンツ管理システム１１０内のコンテンツにアクセスすることを可能にする、URLなどのカスタムネットワークアドレスを生成する。いくつかの実装形態では、ネットワークアドレスを使用するアクセスは、制限なし、もしくは認証なしに提供されてもよいし、またはパスワードなどにより、設定された時間枠内でのみ利用可能とすることにより、特定のロケーションまたはネットワークからのみ利用可能とすることにより、またはそのネットワークアドレスを用いる限定数の総アクセスまたは同時アクセスのみ利用可能とすることにより、制限されてもよい。共有モジュール３１０は生成されたURLにコンテンツ識別データを含める。このコンテンツ識別データは後に、要求されたコンテンツアイテムを適切に特定し、返送するためにコンテンツ管理システム１１０で用いることができる。例えば、共有モジュール３１０は、生成されたURLにユーザアカウント識別子およびコンテンツパスを含めることができる。URLに含まれるコンテンツ識別データは、コンテンツアイテムにアクセスするために装置によってコンテンツ管理システム１１０に送信することができる。URLを生成することに加え、共有モジュール３１０は、コンテンツアイテムに対するURLが作成済みであることを記録することもできる。いくつかの実施形態においては、コンテンツアイテムに関連付けられたコンテンツエントリが、そのコンテンツアイテムに対するURLが作成済みかどうかを示すURLフラグを含むことができる。
【００８４】
インタラクション同期モジュール３１６は、装置からプレゼンス情報を受信し、それをインタラクションデータストア４２４内のプレゼンスレコードの一部として格納し、コンテンツアイテムに関するユーザプレゼンスを決定する。各ユーザはコンテンツアイテムに関してそのユーザに関連付けられたプレゼンス記録を記述するユーザプレゼンスに関連付けられ、この関連づけは、いかなる特定のユーザ装置、プロセス、またはユーザインタフェース要素を参照することなく行うことができる。プレゼンス情報は特定のユーザインタフェース要素または処理に関するプレゼンスを記述することができるが、ユーザに関連付けられたこのプレゼンスはユーザプレゼンスと呼ばれる。例示的なユーザプレゼンス状態には、コラボレーション中、編集中、閲覧中、オープン中、および不存在が含まれる。この例において、コラボレーション中プレゼンス状態はコンテンツアイテムが２つ以上の装置１００上で視聴および変更のために提示されるユーザインタフェース要素に関連付けられていることを示し、編集中ユーザプレゼンス状態はコンテンツアイテムがコンテンツアイテムを変更したユーザインタフェース要素に関連付けられていることを示し、閲覧中ユーザプレゼンス状態はコンテンツアイテムが装置１００上のアクティブユーザインタフェース要素に関連付けられていることを示し、オープンユーザプレゼンス状態はユーザインタフェース要素がコンテンツアイテムに関連付けられており、かつコンテンツアイテムが開かれているが、コンテンツアイテムがクローズされてはいないことを示す。様々な実施形態は、より多くの、またはより少ないユーザプレゼンス状態を使用することができる。例えば、一実施形態は編集中、閲覧中、および不存在のみを含み、この場合、コンテンツアイテムを開いたがアクティブユーザインタフェース要素ではないユーザインタフェース要素は、閲覧中もしくは不存在として取り扱われる。プレゼンス情報の取得および追跡はまた、米国特許出願第１４/６３５，１９２号にさらに説明されており、当該出願の内容は参照により本明細書に組み込まれる。
【００８５】
インタラクション同期モジュール３１６は、複数の装置１００にわたるインタラクション情報の同期を管理する。装置１００は、インタラクション同期モジュール３１６にインタラクション情報を提供する。インタラクション同期モジュール３１６は、インタラクションデータストア３２４にインタラクション情報を格納する。インタラクション同期モジュール３１６は、同期されたコンテンツアイテムに関するインタラクション情報を、ユーザに表示するために同期された装置１００に送信する。インタラクション同期モジュール３１６はさらに、新しい、または見られていないインタラクション情報をユーザに通知するための命令を送信することができる。一実施形態において装置１００は、ユーザがインタラクション情報を閲覧したかどうか、およびいつ閲覧したかを示す閲覧情報をインタラクション同期モジュール３１６に送信する。閲覧情報は、インタラクションデータストア３２４に記憶される。別の実施形態において閲覧情報は、ユーザがインタラクション情報とインタラクションしたかどうか、およびいつインタラクション情報とインタラクションしたかを示す。インタラクション同期モジュール３１６は、この情報を、同じユーザに関連付けられた複数の装置１００上での重複した通知を回避するために用いることができる。例えば、ユーザが第１の装置１００上の新しいインタラクション情報を通知され、インタラクション情報を見る場合、このイベントは、ユーザが第２の装置１００上の同じインタラクション情報について通知されないように格納される。
【００８６】
一実施形態では、ユーザがコンテンツアイテムに関連する格納されたインタラクション情報を閲覧したり、インタラクション情報とインタラクションしうるように、インタラクションデータストア３２４に格納されたインタラクション情報はクライアントアプリケーション２００によってアクセス可能である。いくつかの実施形態において、ユーザがコンテンツアイテムに関連する格納されたインタラクション情報を閲覧したり、インタラクション情報とインタラクションすることを容易にするためのUIを提供するため、本明細書で説明されるようにUI拡張が生成される。格納されたインタラクション情報は、インタラクションイベントタイムスタンプおよびバージョン情報などのメタデータを含むことができる。バージョン情報は、インタラクションイベントをコンテンツアイテムの異なるバージョンに関連付ける。一実施形態において、記憶されたインタラクション情報は、インタラクション情報およびメタデータが時系列的に表示されるコンテンツアイテム履歴ログとして装置１００のユーザに提供される。このようにして、ユーザはインタラクション情報を１つの場所で容易に見ることができ、コンテンツアイテムに対する変更、編集、閲覧、およびコメントの内容をよりよく理解することができる。例えば、ユーザは、コンテンツアイテムが午後３:００に編集され、編集ユーザが午後３:０１に「結論パラグラフを変更した」というコメントを提供したことを見るであろう。これにより、ユーザは、コンテンツアイテムおよび編集プロセス全体を１つの場所で包括的に閲覧することができる。
【００８７】
一実施形態では、コンテンツ管理システム１１０がコラボレーションモジュール３２６を含む。コラボレーションモジュール３２６は、装置１００間のコラボレーションを容易にすることができる。例えば、コラボレーションモジュール３２６はコラボレーションが起こり得るように、装置のアドレスを別の装置と共有することによって、装置ハンドシェイクを開始し得る。さらに、コラボレーションモジュール３２６は、装置１００のコラボレーションモジュール２０７もしくはクライアントアプリケーション２００の任意の他のモジュールによって実行される任意のタスクを実行することができる。
【００８８】
通知キューモジュール３２８は共有コンテンツアイテムに関するユーザ通知キュー３３０を作成し、管理する。ユーザ通知キュー３３０は、コンテンツ管理システム１１０に格納され、装置１００に送信される。ユーザ通知キュー３３０は、共有ユーザによる共有コンテンツアイテムとの最近のインタラクションを示すためにユーザに提示される、共有コンテンツアイテムとの１つまたは複数のインタラクションのグループである。一実施形態では、コンテンツアイテムに関連付けられた共有ユーザの各々が、そのコンテンツアイテムに対応するユーザ通知キュー３３０を有する。特定のコンテンツアイテムに関して、ユーザ通知キューは、ユーザによって異なる場合がある。
【００８９】
一実施形態において、通知キューモジュール３２８はインタラクションイベントの通知を受信し、ユーザ通知キュー３３０に追加される候補であるインタラクションを決定する。通知キューモジュール３２８は、共有コンテンツアイテムに対応するユーザ通知キュー３３０を変更する。ユーザ通知キュー３３０を変更することは、候補インタラクションを通知キューに追加することと、通知キューに既に存在するインタラクションを除去することとを含むことができる。共有コンテンツアイテムに対応するインタラクションイベントがコンテンツ管理システム１１０によって受信されると、通知キューモジュール３２０は、インタラクションを共有ユーザのユーザ通知キュー３３０に追加するか、および／またはそこからインタラクションを削除するかを決定する。ユーザ通知キュー３３０に追加されるインタラクションのタイプは、コンテンツアイテム閲覧、コンテンツアイテム編集、コンテンツアイテムコラボレーション、コンテンツアイテムコメント、およびコンテンツアイテムメッセージを含み得る。
【００９０】
一実施形態において、インタラクションは関連づけられたインタラクション優先度を有する。インタラクション優先度は、他のインタラクションタイプに対するインタラクションタイプの相対的な優先度を示す。例えば、コンテンツアイテム編集は、コンテンツアイテム閲覧よりも高い優先順位を有することができる。インタラクション優先度は、コンテンツ管理システム１１０の実装者によって、またはコンテンツ管理システム１１０のユーザによって指定される。通知キューモジュール３２８は、ユーザ通知キュー３３０内の候補インタラクションおよびインタラクションのインタラクションタイプおよびインタラクション優先度を決定する。様々な実施形態では、通知キューモジュール３２８がより高い優先度のインタラクションを選択してユーザ通知キュー３３０に追加し、より低い優先度のインタラクションを選択してユーザ通知キュー３３０から除去する。例えば、通知キューモジュール３２８は、ユーザＡによる候補インタラクションの優先度を、通知キュー３３０に既に存在するユーザＡによるインタラクションの優先度と比較することができる。候補インタラクションがユーザ通知キュー３３０内のインタラクションよりも低い優先度のインタラクションである場合、候補インタラクションはキューに追加されない。候補インタラクションがユーザ通知キュー３３０内のインタラクションよりも高い優先度のインタラクションである場合、候補インタラクションがキューに追加され、キュー内に既に存在するインタラクションがキューから除去される。これにより、ユーザに、コンテンツアイテムと他のユーザとの、より高い優先度のインタラクションを提示することが可能になり、ユーザを混乱させたり、ユーザインタフェースオブジェクトまたは要素内のスペースを無駄に使用したりする可能性のある、あまり重要でない情報を提供せずに、ユーザに重要な情報を提供することができる。
【００９１】
通知キューモジュール３２８は、ユーザ通知キュー３３０を装置１００に送信することができる。一実施形態において通知キューモジュール３２８は、ユーザがコンテンツアイテムにアクセスしたという通知の受信に応答して、ユーザ通知キュー３３０を送信する。アクセス通知は、装置１００から直接、またはインタラクション同期モジュール３１６から到来しうる。アクセス通知は、閲覧または編集のためにコンテンツアイテムを開くなど、コンテンツアイテムのアクセスと整合したプレゼンスイベントを検出することに応答して生成される。一実施形態では、通知キューモジュール３２８は、関連付けられたユーザが通知キューを閲覧したという通知の受信に応答して、ユーザ通知キュー３３０をクリアする。このように、ユーザは、ユーザが閲覧済みの通知を提示されないであろう。
【００９２】
コンテンツ管理システム１１０は、単一のコンピュータを用いて、またはコンピュータのネットワーク（クラウドベースのコンピュータ実装を含む）を用いて実施することができる。本開示において、コンピュータは、１つまたは複数のプロセッサ、メモリ、記憶装置、およびネットワーキングリソースを有する装置である。コンピュータは好ましくは１つまたは複数の高性能CPUおよび、１G以上のメインメモリ、ならびにコンピュータ読み取り可能な永続的ストレージを含み、LINUXまたはその派生物のようなオペレーティングシステムを実行するサーバクラスコンピュータである。本明細書で説明するコンテンツ管理システム１１０の動作は、ハードウェアによって制御されてもよいし、またはコンピュータストレージにインストールされ、そのようなサーバのプロセッサによって実行されて本明細書に説明する機能を実行させるコンピュータプログラムによって制御されてもよい。これらのシステムはネットワークインタフェースおよびプロトコル、データ入力のための入力デバイス、および表示、印刷、またはデータの他の提示のための出力デバイスとを含む、本明細書で説明される動作に必要な他のハードウェア要素を含むことができるが、それらは本明細書では説明されない。同様に、ファイアウォール、ロードバランサ、フェイルオーバサーバ、ネットワーク管理ツールなどの従来の要素は、システムの特徴を不明瞭にしないように図示されていない。最後に、コンテンツ管理システム１１０の機能および動作はコンピュータシステム上での実装を必要とするほど十分に複雑であり、単にメンタルステップによって人間の頭で実行することはできない。
【００９３】
１つの構成では、コンテンツ管理システム１１０に関して以下に説明される構成要素が、コンテンツ管理システム１１０による管理なしにコンテンツアイテムを共有および同期可能な装置１００に組み込まれる。これらの装置１００は、上述したように、コンテンツを同期させるとともに、ネットワーク１２０を通じて、または直接接続を介してインタラクション情報を共有することができる。この構成では、装置１００は、以下でコンテンツ管理システム１１０によって提供されるものとして説明される機能を組み入れるために、同期モジュール３１２、競合管理モジュール３１４、インタラクション同期モジュール３１６、ならびに他のモジュールおよびデータストアの機能を組み入れることができる。したがって、この構成の装置１００はピアツーピア構成で動作し、コンテンツ管理システム１１０またはネットワーク１２０なしで動作することができる。
【００９４】
UI拡張管理プロセス
【００９５】
図４は、ターゲットアプリケーションについて、コンピュータシステムのディスプレイ上でUIを拡張するための例示的なプロセス４００を示す。プロセス４００は、UIイベントに関するオペレーティングシステム２４５とUI拡張器モジュール２６５との間の通信を利用する。UI拡張器モジュール２６５とオペレーティングシステム２４５との間の通信タイプのセットは、UIイベントに関する通信のためのUI API ２８０などのAPIによって定義することができる。
【００９６】
プロセス４００はネイティブアプリケーション２５５のUIに関するUIサブ状態（例えば、UIサブ状態２７４）を維持することに基づいて、ネイティブアプリケーション２５５のUIに対するUI拡張を生成するために使用される。UIサブ状態２７４はターゲットアプリケーションのターゲットUIオブジェクトに対するUIイベントに関するシステム通知をオペレーティングシステム２４５に登録し、オペレーティングシステム２４５から受信することに基づいて更新される。例えば、プロセス４００はネイティブアプリケーション２５５のUIに対するUI拡張オーバーレイを提供するために、オペレーティングシステム２４５に関連するUI拡張器モジュール２６５によって実行されることができる。
【００９７】
４０２において、オペレーティングシステム２４５は、UI状態２８５を生成する。上述のように、UI状態２８５はオペレーティングシステム２４５によって管理されるマスタUI状態を意味し、複数のネイティブアプリケーション２５５にわたってオペレーティングシステム２４５によって管理されるすべてのUIオブジェクトを含む。その意味で、UI状態２８５は、オペレーティングシステム２４５上で実行されるUIのデータ表現を提供する。オペレーティングシステム２４５は、ユーザ入力またはプログラム命令の受信に応答してUI状態２８５を更新することなどによって、UI状態２８５を管理する。
【００９８】
図５は、オペレーティングシステムによって管理されるUI状態５００の例示的な表現を示す。UI状態５００は、UIオブジェクトノードと、ノード間の親子関係を定義する有向辺とを含むグラフまたはツリーによって表される。UI状態５００は、UIオブジェクトの階層としてオペレーティングシステム２４５によって管理されるユーザインタフェースを表す。ノードは単一のUIオブジェクトを表すことができ、または１つまたは複数の（例えば、子）UIオブジェクトを包含する抽象化を表すことができる。例えば、UIオブジェクトノード５１０〜５３０は、ウィンドウオブジェクト５１０、５２６、および５２８、メニューオブジェクト５１２、ボタンオブジェクト５１６および５１８、リストビューオブジェクト５１４、ファイルオブジェクト５２０、５２２、および５２４、ならびにフォルダオブジェクト５３０といった別個のUIオブジェクトを表す。別の例においてOSオブジェクト５０２およびアプリケーションオブジェクト５０４、５０６、および５０８はそれらの子UIオブジェクトを包む抽象化を表す。サポートされるUIオブジェクトのタイプまたはクラスはプラットフォームまたはオペレーティングシステムに応じて変化することがあり、必ずしもUI状態５００に示される例に限定されない。いくつかの実施形態では、UI状態５００がウィンドウズ（登録商標）１０オペレーティングシステムについてのウィンドウオブジェクトクラスのような、単一クラスのIUオブジェクトのみを含む。
【００９９】
OSオブジェクト５０２は、最高レベルのオペレーティングシステムノードを表す。OSオブジェクトは、フォーカスされたアプリケーション２５５を定義するフォーカスされたアプリケーションプロパティ、および／またはフォーカスされたアプリケーション２５５のフォーカスされたUIオブジェクトを定義するフォーカスされたUIオブジェクトプロパティを含むことができる。オペレーティングシステム２４５によって管理されるUIを有する各ネイティブアプリケーション２５５は、アプリケーションオブジェクト５０４、５０６、および５０８など、OSオブジェクト５０２の子であるアプリケーションオブジェクトによって表される。いくつかの実施形態では、アプリケーションオブジェクトがアプリケーションオブジェクトがフォーカスされているかどうかを定義するフォーカスされたアプリケーションプロパティ、および／またはアプリケーションオブジェクトのフォーカスされたまたは選択されたUIオブジェクトを定義するフォーカスされたUIオブジェクトプロパティを含むことができる。いくつかの実施形態では、各UIオブジェクトがオブジェクトが現在フォーカスされているUIオブジェクトであるかどうかを定義するフォーカス(focused)プロパティを含むことができる。したがって、UI状態５００は、現在フォーカスされているUIオブジェクトを定義することができる。（とりわけ）UIオブジェクトフォーカスの変更はUIイベントに関するシステム通知をトリガし、以下でさらに詳細に説明するように、UI拡張に対する変更をもたらすことができる。
【０１００】
図６Ａおよび図６Ｂは、装置１００のディスプレイ２２０上にレンダリングされたデスクトップ６００上のUIオブジェクトフォーカス変更の例を示す。図６Ａにおいて、ウィンドウオブジェクト５１０、５２６、および５２８はデスクトップ６００上に表示され、ユーザによって見ることができる。この実施形態においてデスクトップ６００は、オペレーティングシステム２４５によって維持される全体的なコンテナまたはフレームであり、ディスプレイ２２０上のユーザインタフェースオブジェクトを囲んでいる。図６Ａおよび図６Ｂにおいて、UIオブジェクトは、デスクトップコンピューティング環境におけるウィンドウオブジェクトである。モバイルデバイスや、限定されたエリアを有する他の表示部などの他の構成では、一度に単一のUIオブジェクトのみが表示され得る。図６Ａに示すように、ウィンドウオブジェクト５２６はフロントウィンドウとして示され、ウィンドウオブジェクト５１０および５２８を部分的に見えなくするフォーカスされたまたはアクティブなウィンドウオブジェクトであり、ウィンドウ５２６内では、フォルダ６１０は現在フォーカスされているオブジェクトである。図６Ｂにおいて、フォーカスはウィンドウオブジェクト５１０に変更され、ウィンドウオブジェクト５１０は今やフロントウィンドウであり、アクティブまたはフォーカスされたウィンドウオブジェクトであり、ボタン５１６はフォーカスされたオブジェクトである。フォーカスは、ウィンドウオブジェクト５１０とのユーザ入力インタラクションに応答して、またはプログラム命令に応答して変化することができる。特定のオペレーティングシステムおよび構成では、フロントUIオブジェクトでないUIオブジェクトがフォーカスを有する（例えば、ユーザ入力を受信している）ことができる。
【０１０１】
図５に戻ると、UI状態５００の３つのアプリケーションオブジェクト５０４、５０６、および５０８はそれぞれ、オペレーティングシステム２４５上で実行される異なるアプリケーション２５５を表す。各アプリケーションオブジェクトは、ターゲットアプリケーション５４０のウィンドウオブジェクト５１０および５２８などの１つまたは複数の子UIオブジェクトも含むことができる。ウィンドウオブジェクトは、ウィンドウ要素を表すUIオブジェクトである。ネイティブアプリケーションがファイルシステムブラウザである例ではウィンドウオブジェクトがフォルダを表すことができ、ウィンドウオブジェクトの子オブジェクトはフォルダ内に格納されたコンテンツアイテム、および／またはコンテンツアイテムとインタラクションするためのメニュー/ボタンを含むことができる。例えば、ウィンドウオブジェクト５１０は子リストビューオブジェクト５１４を含み、子リストビューオブジェクト５１４は、子ファイルオブジェクト５２０〜５２４およびフォルダオブジェクト５３０をさらに含む。ウィンドウオブジェクト５１０は、子メニューオブジェクト５１２をさらに含む。メニューオブジェクト５１２は、子ボタンオブジェクト５１６および５１８をさらに含む。
【０１０２】
単一のアプリケーションオブジェクトは、ワードプロセッサアプリケーションのオープンされたファイルにそれぞれ対応する複数のウィンドウ、またはファイルシステム内の異なるフォルダにそれぞれ対応するファイルシステムブラウザアプリケーションの複数のウィンドウなど、複数のウィンドウオブジェクトを含むことができる。例えば、アプリケーションオブジェクト５０４は、ウィンドウオブジェクト５１０および５２８を含む。UI状態５００は複数のアプリケーションに関連付けられたUIオブジェクトを含むことができ、その各々は子オブジェクトを含むことができる。例えば、UI状態５００は、それぞれが異なるアプリケーション２５５に関連付けられたアプリケーションオブジェクト５０４、５０６、および５０８を含む。アプリケーションオブジェクト５０６は、ウィンドウオブジェクト５２６も含む。アプリケーションオブジェクト５０６および５０８の他の子オブジェクトは本開示を過度に複雑にすることを避けるために、図５には示されていない。
【０１０３】
図７は、ターゲットアプリケーション５４０のUIの一例を示す。特に、ターゲットアプリケーション５４０のUIは、図５に示されるUI状態５００のノードによって表されるUIオブジェクトのグラフィカル表現を含む。UIオブジェクトのグラフィック表現は、グラフィックスエンジン２９４などによって、UIオブジェクトのグラフィカルプロパティに基づいて生成される。したがって、UIは、ターゲットアプリケーション５４０のメインウィンドウを表すウィンドウオブジェクト５１０を含む。ターゲットアプリケーションがファイルシステムブラウザである場合、メインウィンドウは、ファイルシステムの開かれたフォルダを表すことができる。
【０１０４】
ウィンドウオブジェクト５１０内には、その子オブジェクト、メニューオブジェクト５１２、およびリストビューオブジェクト５１４がある。メニューオブジェクト５１２内には、その子オブジェクトであるボタンオブジェクト５１６および５１８がある。例えば、ボタンオブジェクトは、開かれたフォルダに関連付けられたアクションのためのボタンを表す。リストビューオブジェクト５１４内には、ファイルオブジェクト５２０、５２２、および５２４、ならびにフォルダオブジェクト５３０が含まれる。例えば、これらのUIオブジェクトは、ファイルまたはサブフォルダなど、フォルダに格納されたコンテンツアイテムを表す。
【０１０５】
図４に戻ると、UI状態４００を生成することに加えて、オペレーティングシステム２４５はUI状態４００を維持し、適切なときにUI状態４００を更新することができる。例えば、UI状態は、ユーザインタフェース入力イベントの検出に応答して、またはプログラムアプリケーション命令に応答して更新される。オペレーティングシステム２４５は、UI状態を管理して、オペレーティングシステム２４５上で実行されるアプリケーション２５５にわたるユーザ入力処理およびユーザインタフェース提示を容易にする。
【０１０６】
４０４において、UI拡張器モジュール２６５は、オペレーティングシステム２４５からのUIイベントに関するシステム通知を登録する。UI拡張器モジュール２６５は、OS X（登録商標）用アクセシビリティAPIまたはウィンドウズ（登録商標）１０用ウィンドウズ（登録商標）シェルAPIなどのUI API ２８０を使用して、UIイベントに関するイベントを登録する。
【０１０７】
オペレーティングシステムAPIは、アプリケーションがオペレーティングシステム２４５のプロセスとどのようにインタラクションすることができるかについてのプロトコルを定義する。例えば、オペレーティングシステム２４５は、UI API ２８０を介してUI拡張器モジュール２６５とUIイベント及び関連メッセージを通信する。UI API ２８０は、UI拡張器モジュール２６５がUIイベントに関する通知を登録および受信することを可能にする通信を提供する。いくつかの例示的なUIイベントはとりわけ、フォーカスUIオブジェクト変更（例えば、フォーカスされたウィンドウ変更）、UIオブジェクト生成、UIオブジェクト移動、UIオブジェクトリサイズ、UIオブジェクトリサイズ、UIオブジェクト最小化、UIオブジェクト最小化解除、UIオブジェクト破壊（例えば、UIから除去される）、UIオブジェクト生成、アプリケーション２５５起動、アプリケーション２５５停止を含み得る。
【０１０８】
UI API ２８０は、UI拡張器モジュール２６５がターゲットアプリケーションおよび／またはターゲットUIオブジェクトを（例えば、ターゲットアプリケーションに存在することが既知のUIオブジェクトIDまたはUIオブジェクトタイプに基づいて）指定することによって、システム通知を登録することを可能にする。オペレーティングシステム２４５はUIイベントが検出されたときに、登録に従って、ターゲットアプリケーションのUIオブジェクト、または特定のターゲットUIオブジェクトに関するUIイベントについて、システム通知を送信することができる。いくつかのUI APIはUI状態４００を完全には公開しないので、UI拡張器モジュール２６５は、UI状態４００がオペレーティングシステム２４５によって公開されない場合であっても、UIイベント通知処理に基づいて、ターゲットアプリケーションのUIサブ状態２７４によって表されるUI状態４００の部分を再構築することができる。
【０１０９】
UIイベントに関するシステム通知の登録に関連して、UI拡張器モジュール２６５は、適切な登録が完了すると、リスニング状態に入る。システム通知はユーザ入力またはプログラム命令に応答するなど、事実上いつでも非同期にトリガされ、したがって、リスニング状態は非同期UIイベント処理のためにUI拡張器モジュール２６５を準備する。
【０１１０】
４０６において、オペレーティングシステム２４５は、UIイベントを検出する。UIイベントは、UI状態４００のUIオブジェクトプロパティへの変更など、アプリケーションのUI状態への変更を含むイベントを指す。UIイベントは高さ、幅、および（例えば、X-Y座標対）位置などのUIオブジェクトのグラフィカルプロパティに対する変更、またはファイルパス、入力ステータスなどの他のプロパティに対する変更を含むことができる。
【０１１１】
オペレーティングシステム２４５は、ネイティブアプリケーション２５５にUIを提供することに関連してUI状態４００を更新する。例えば、オペレーティングシステム２４５は、ユーザ入力モジュール２６０からユーザ入力を受け取る。オペレーティングシステム２４５はユーザ入力が生成されると、現在フォーカスされているUIオブジェクト（例えば、ウィンドウオブジェクト）などのUIオブジェクトにユーザ入力を関連付ける。オペレーティングシステム２４５は、ユーザ入力に基づいてUIイベントの発生を検出する。例えば、ユーザ入力がウィンドウオブジェクトのリサイズを示す場合、オペレーティングシステム２４５は、ウィンドウオブジェクトのリサイズUIイベントを生成する。オペレーティングシステム２４５は、UIオブジェクトのUIイベントに基づいてUI状態４００を更新する。例えば、ウィンドウオブジェクトリサイズイベントの場合、ウィンドウオブジェクトの高さまたは幅UIオブジェクトパラメータが更新される。オペレーティングシステム２４５によってディスプレイ上でユーザに提供されるUIは、更新されたUI状態４００に基づいて更新することもできる。
【０１１２】
４０８において、オペレーティングシステム２４５は、UIイベントに関するシステム通知をUI拡張器モジュール２６５に提供する。オペレーティングシステム２４５はUI拡張器モジュール２６５が通知を受信するために登録したUI状態への更新に基づいてシステム通知を生成し、システム通知をUI拡張器モジュール２６５に送信する。システム通知は、４０４で実行されるシステム通知登録に対する非同期コールバックとして提供することができる。システム通知はUIオブジェクトを特定するUIオブジェクトIDまたはGUIDを含むことができ、適用可能な場合にはグラフィカルプロパティなど、UIオブジェクトの１つまたは複数の更新されたUIオブジェクトプロパティの指示をさらに含むことができる。
【０１１３】
４１０において、UI拡張器モジュール２６５はシステム通知がターゲットアプリケーションのターゲットUIオブジェクトに関係するかどうか、言い換えれば、アプリケーションまたは関心のあるオブジェクトの通知に関係するかどうかを判定することができる。UI拡張器モジュール２６５は、監視されたプレゼンスデータストア２１０、またはターゲットUIオブジェクトおよび／またはターゲットアプリケーションをそれらのオブジェクトIDに基づいて保存する他のデータベースにアクセスする。したがって、特定のUIオブジェクトIDを含むシステム通知を受信すると、UI拡張器モジュール２６５は、オブジェクトIDをターゲットオブジェクトおよびアプリケーションのリストとマッチングさせようと試みる。オブジェクトIDがリストされている場合、そのオブジェクトは、ターゲットアプリケーションのターゲットオブジェクトである。
【０１１４】
システム通知がターゲットアプリケーションのターゲットUIオブジェクトに関係しないと判定したことに応答して、プロセス４００は４０２に戻り、オペレーティングシステム２４５はUI状態４００を更新し続け、UIイベントを検出する。同様に、UI拡張器モジュール２６５はオペレーティングシステム２４５からのUIイベントに関するシステム通知をリスニングし、受信し続ける。
【０１１５】
４１０に戻ると、システム通知がターゲットアプリケーションのターゲットUIオブジェクトに関するものであると判定したことに応答して、UI拡張器モジュール２６５は、システム通知に基づいて、ターゲットアプリケーションのUIサブ状態２７４を生成する。UI拡張器モジュール２６５はUIサブ状態生成器２７２を介して、UIサブ状態２７４を生成し、管理する。UIサブ状態２７４はオペレーティングシステム２４５によって管理されるUI状態２８５とは別個であり、UI拡張器モジュール２６５によって使用されて、ターゲットオブジェクトに対するマスタUI状態２９５の変更を追跡する。UI拡張器モジュール２６５は、オペレーティングシステム２４５上で実行されるターゲットアプリケーションのための定義されたN個のUIサブ状態を生成することができる。いくつかの実施形態では、N個のUIサブ状態は、異なるシステムタイプ、システム構成、または（例えば、メモリ可用性、利用可能な処理能力などに基づく）システムの状態について異なることができる。いくつかの実施形態では、UIサブ状態が所定の時間保持される。例えば、UIサブ状態は、ターゲットアプリケーションが閾値時間の間フォーカスされていない場合に満了することができる。期限切れのターゲットアプリケーションのUIサブ状態は（例えば、定義されたN個のUIサブ状態に到達していない場合であっても）削除することができる。
【０１１６】
サブ状態を維持することは、満了時間などの他の要因に基づくことができる（例えば、ターゲットアプリケーションがフォーカスを有してからのしきい値時間量の場合、そのターゲットアプリケーションのサブ状態を削除することができる）。
【０１１７】
図５を参照すると、オペレーティングシステム２４５によって維持されるUI状態５００はターゲットUIオブジェクトおよび非ターゲットUIオブジェクトを含み、非ターゲットUIオブジェクトは、図５において＊記号でマークされている。ターゲットアプリケーション５４０のUIサブ状態２７４は、ターゲットUIオブジェクトのみを含むように生成される。したがって、図８はターゲットアプリケーション５４０のUIサブ状態８００の一例を示し、UI状態５００のオブジェクトのサブセット、具体的には、ターゲットアプリケーションオブジェクトまたはターゲットアプリケーション内のターゲットUIオブジェクトだけを含む。したがって、UIサブ状態８００は、UI状態５００のアプリケーションオブジェクト５０４、ウィンドウオブジェクト５１０、メニューオブジェクト５１２、リストビューオブジェクト５１４、ボタンオブジェクト５１６、ボタンオブジェクト５１８、ファイルオブジェクト５２０、およびファイルオブジェクト５２２にそれぞれ対応するアプリケーションオブジェクト８０４、ウィンドウオブジェクト８１０、メニューオブジェクト８１２、リストビューオブジェクト８１４、ボタンオブジェクト８１６、ボタンオブジェクト８１８、ファイルオブジェクト８２０、およびファイルオブジェクト８２２を含む。UI状態５００の非ターゲットUIオブジェクト（例えば、ターゲットアプリケーションのウィンドウオブジェクト５２８、フォルダオブジェクト５３０、およびファイルオブジェクト５２４、ならびに非ターゲットアプリケーションのオブジェクト５０６、５０８、および５２６）は、UIサブ状態８００から除外される。いくつかの実施形態では、UI拡張器モジュール２６５が非ターゲットUIオブジェクトのUIイベントに関するシステム通知を登録または受信しない。
【０１１８】
親子関係に加えて、UIサブ状態８００は、ターゲットUIオブジェクトのUIオブジェクトプロパティの一部または全部をさらに定義または含むことができる。したがって、UIサブ状態８００は対象のターゲットUIオブジェクトを含み、非ターゲットUIオブジェクトを除外する、オペレーティングシステム２４５によって管理されるUI状態５００の複製されたサブセットを表すことができる。
【０１１９】
UIサブ状態８００は、オペレーティングシステム２４５から経時的に受信されたUIイベントの複数のシステム通知に基づいて、経時的に生成される。いくつかの実施形態では、UI拡張器モジュール２６５がターゲットアプリケーション起動/停止イベントの登録に基づいて、UIイベントの登録を開始する。ターゲットアプリケーションが起動されると、UI拡張器モジュール２６５は、UI状態を横断(traverse)して、各ターゲットUIオブジェクトに関するシステム通知を登録する。例えば、ターゲットアプリケーションが活動化されると、オペレーティングシステム２４５は、アプリケーションオブジェクトノード、および任意の子UIオブジェクトノードを生成する。オペレーティングシステム２４５は、起動イベントに関するシステム通知をUI拡張器モジュール２６５に送信する。UI API呼び出しを使用して、UI拡張モジュール２５４はターゲットアプリケーションのUIオブジェクトを要求し、オペレーティングシステム２４５は、これらのUIオブジェクトのオブジェクトIDをUI拡張器モジュール２６５に送る。UIオブジェクトは、ターゲットアプリケーションのUI状態のノードを横断(traverse)するなどして、単一の要求で収集することも、複数の要求を使用して収集することもできる。受信されたUIオブジェクトごとに、UI拡張器モジュール２６５はUIオブジェクトがターゲットUIオブジェクトであるかどうかを判定するために、ターゲットアプリケーションのために定義されたルールのセットを使用する。UIオブジェクトがターゲットUIオブジェクトである場合、UI拡張器モジュール２６５は、ターゲットUIオブジェクトをUIサブ状態に追加することによって、ターゲットアプリケーションのUIサブ状態を更新する。次いで、UI拡張器モジュール２６５はターゲットUIオブジェクトに関するシステム通知を登録し、システム通知に基づいてUI状態と協調してUIサブ状態を維持する。同様に、イベントがUIオブジェクトまたはターゲットアプリケーションがもはや利用可能ではないことを示す場合（例えば、アプリケーションまたはウィンドウクローズ、ファイルの移動または削除など）、UI拡張器モジュール２６５はUIサブ状態８００からUIオブジェクトを削除することができ、いくつかの実施形態では、削除されたUIオブジェクトに関するシステム通知を登録解除することができる。
【０１２０】
４１４において、UI拡張器モジュール２６５は、UIサブ状態８００に基づいて、ターゲットアプリケーションのフォーカスされたターゲットUIオブジェクトのためのUI拡張を生成する。UIイベントによって示されるように、ターゲットUIオブジェクトがフォーカスされたUIオブジェクトになると、フォーカスされたターゲットUIオブジェクトのためのUI拡張を生成または更新することができる。
【０１２１】
UI拡張のグラフィカルプロパティはUI拡張がネイティブアプリケーション２５５のUIと統合されているか、またはそれに添付されているように見えるように、フォーカスされたターゲットUIオブジェクトのグラフィカルプロパティと経時的に協調して維持される。いくつかの実施形態では、UI拡張がフォーカスされたUIオブジェクトまたはフォーカスされたUIオブジェクトの基礎となるコンテンツアイテムに文脈的に関連するUIオブジェクト（例えば、ボタン、メニューなど）をさらに含むことができる。UI拡張の作成および更新に関するさらなる詳細は、図１０に関連して以下で説明される。
【０１２２】
４１６において、UI拡張器モジュール２６５は、UI拡張を表示する。UI拡張は、ターゲットUIオブジェクトに対して表示することができる。図９は、UI拡張９０２を有するターゲットアプリケーション５４０のUIの模式的な例を示す。UI拡張９０２は、高さ、長さ、および位置などのグラフィカルプロパティを有する。拡張UIオブジェクトのグラフィカルプロパティは、UI拡張９０２自体がターゲットアプリケーションの実際の基礎となるUIとは別個であっても、ターゲットアプリケーションのUIに統合もしくは付属しているように見えるよう、サイズおよび位置が調整される。これは、UI拡張９０２を、ターゲットアプリケーションのUIの手前、例えばウィンドウオブジェクト５１０の手前にオーバーレイとしてレンダリングすることによって行われる。ターゲットアプリケーションのUIオブジェクトのグラフィカルプロパティが更新されると、統合または付属した見かけを経時的に維持するために１つ以上のUI拡張オブジェクトのグラフィカルプロパティがそれに応じて更新される。例えば、ウィンドウオブジェクト５１０が１００ピクセル右に移動されたとすると、UI拡張９０２の位置は、その位置を正確に同じ量だけシフトするように直ちに更新される。これは、以下でさらに説明するように、例えば、ユーザインタフェース内のオブジェクトに対する変更の高頻度システム通知をUI拡張器モジュール２６５に提供するグラフィックスAPIを利用することによって行われる。
【０１２３】
いくつかの実施形態において、UI拡張のグラフィカルプロパティ（例えば、位置、隠された／表示された状態など）または機能（例えば、ツール、ボタンなど）は、ユーザによってカスタマイズされてもよい。例えば、ユーザは、UI拡張上でドラッグアンドドロップまたは他のユーザインタフェース操作を実行することによって、ターゲットアプリケーションのウィンドウ内のUI拡張の位置をカスタマイズすることができる。いくつかの実装において、これらのカスタマイズはターゲットアプリケーション固有のものであってもよいし、および／または複数のターゲットアプリケーションの実行全体にわたって記憶され、永続的なものであってもよい。
【０１２４】
プロセス４００は、１つまたは複数のターゲットUIオブジェクトに関連してUI拡張が生成され、経時的に表示されるように繰り返される。その意味で、プロセス４００は、オペレーティングシステムのユーザインタフェースの状態（UI状態５００）とは別個のUI表現（UIサブ状態８００）を維持するUIイベントループを提供する。したがって、方法４００は４０２に戻ることができ、そこでオペレーティングシステム２４５はUI状態５００の更新やイベント通知の送信などを継続することができる。
【０１２５】
図１０は、ターゲットアプリケーションのUIオブジェクトのグラフィカルプロパティ更新と協調してUI拡張を更新するためのプロセス１０００の一例を示す。UI拡張の構成はターゲットアプリケーションまたはオペレーティングシステムによって制限されないが、経時的に協調し続けるために、UI拡張のグラフィカルプロパティはターゲットアプリケーションUIオブジェクトに対するグラフィカルプロパティの変更に基づいて変更されうる。
【０１２６】
１００５において、UI拡張器モジュール２６５はオペレーティングシステム２４５から、ターゲットUIオブジェクトのグラフィカルプロパティ更新を示すUIイベントのシステム通知を受信する。プロセス４００の４０２〜４０８における議論は、１００５において適用可能である。
【０１２７】
UI拡張器モジュール２６５は、UIイベントがターゲットUIオブジェクトのグラフィカルプロパティ更新を示すかどうかを判定する。UIオブジェクトのグラフィカルプロパティは、高さ、幅、およびX-Y位置などのパラメータを含むことができる。グラフィカルプロパティは、ディスプレイ上のUIオブジェクトの形状、サイズ、および位置を定義することができる。上述のように、UI拡張器モジュール２６５は、ターゲットUIオブジェクトのUIイベントに関するシステム通知を登録することができる。
【０１２８】
UI拡張器モジュール２６５は、UIイベントのターゲットUIオブジェクトを表すノードを含むことができるUIサブ状態８００を維持する。UIサブ状態８００は、各UIオブジェクトのグラフィカルプロパティを含むことができる。あるUIイベントでグラフィカルプロパティのインスタンスが受信されると、UI拡張器モジュール２６５は、そのUIイベントがターゲットUIオブジェクトのグラフィカルプロパティ更新を示していると判定する。例えば、ターゲットUIオブジェクトの形状、サイズ、または位置が変更されていてもよい。別の例では、UIイベントがUIイベントのグラフィカルプロパティ更新を示しているかどうかを判定するため、受信したグラフィカルプロパティは、過去に保存されたターゲットUIオブジェクトのグラフィカルプロパティと比較される。
【０１２９】
１０１０において、UI拡張器モジュール２６５は、ターゲットUIオブジェクトのグラフィカルプロパティ更新に基づいてUIサブ状態８００を更新する。例えば、ターゲットUIオブジェクトのUIオブジェクトプロパティの過去に保存された１つ以上が、UIイベントから受信されたUIオブジェクトプロパティに基づいて更新される。ターゲットUIオブジェクトが新しいターゲットUIオブジェクトである場合、UI拡張器モジュール２６５は、ターゲットUIオブジェクトをUIサブ状態８００に追加する。したがって、UIサブ状態８００は、ターゲットUIオブジェクトについてのオペレーティングシステムのUI状態５００の変化を追跡する。
【０１３０】
１０１５でUI拡張器モジュール２６５は、（もしあれば）ターゲットUIオブジェクトの１つまたは複数のターゲットUI子オブジェクトのグラフィカルプロパティを決定する。ターゲットUI子オブジェクトは、UI状態またはサブ状態内の他のターゲットUIオブジェクトの子であるターゲットUIオブジェクトを意味する。ターゲットUIオブジェクトがウィンドウオブジェクトである場合、ターゲットUIオブジェクトのグラフィカルプロパティ更新は、ウィンドウオブジェクトが移動したか、リサイズされたことを示しうる。同様に、ウィンドウオブジェクトの子UIオブジェクト（例えば、メニュー、ファイル、フォルダなど）も、ウィンドウオブジェクト内のグラフィカルプロパティ変更に基づいて移動していたりサイズが変化していたりするかもしれない。
【０１３１】
図８を参照すると、メニューオブジェクト８１２およびリストビューオブジェクト８１４は、ウィンドウオブジェクト８１０のターゲットUI子オブジェクトである。親子関係は、グラフィカルプロパティ関係を定義することができる。図９を参照すると、メニューオブジェクト５１２およびリストビューオブジェクト５１４は、親ウィンドウオブジェクト７１０のスペース内に適合するようなサイズにされ、親ウィンドウオブジェクト７１０のグラフィカルスペース内に配置される。
【０１３２】
UI拡張器モジュール２６５は、ターゲットUIオブジェクトのターゲットUI子オブジェクトを決定するとともに、高さ、幅、および位置などのターゲットUI子オブジェクトのグラフィカルプロパティを決定するために、UIサブ状態８００を参照することができる。ターゲットUI子オブジェクトは必ずしも直下の子に限定されず、いくつかの実施形態では、UI拡張器モジュール２６５がターゲットUIオブジェクトの孫、ひ孫など、他の子孫UIオブジェクトのグラフィカルプロパティを決定することができる。いくつかの実装形態では、ターゲットUIオブジェクトの新しいUI子孫オブジェクトの生成が、UI拡張器モジュール２６５が自身のサブ状態にその新しいUI子孫オブジェクトを追加するかどうかを判定し、新しいUI子孫オブジェクトを別のターゲットUIオブジェクトとして分類するとともに、新しいターゲットUIオブジェクトについてのUIイベントの通知を登録するきっかけとなり得る。
【０１３３】
いくつかの実施形態では、ターゲットUI子オブジェクトがUIイベント通知について登録されている場合、ターゲットUI子オブジェクトのグラフィカルプロパティの変更もUIイベントをトリガする。子ターゲットUIオブジェクトのそれぞれについて、オペレーティングシステム２４５はUIイベントを示すシステム通知を送信することができる。子ターゲットUIオブジェクトのそれぞれについて、UI拡張器モジュール２６５は、UIサブ状態からのターゲット子UIオブジェクトのグラフィカルプロパティを、システム通知から受信したターゲット子UIオブジェクトのグラフィカルプロパティと比較することができる。グラフィカルプロパティが異なる場合、UI拡張器モジュール２６５は、UIイベントが子ターゲットUIオブジェクトのグラフィカルプロパティ更新を示すと判定する。
【０１３４】
１０２０で、UI拡張器モジュール２６５は、UI拡張の１つまたは複数のグラフィカルプロパティを、ターゲットUIオブジェクトおよびターゲットUI子オブジェクトのグラフィカルプロパティと協調するように更新する。UI拡張はボタン、メニュー、リストなどの１つまたは複数の拡張UIオブジェクトを含み、これらのオブジェクトは、フォーカスされたUIオブジェクトに関連する追加機能および／または情報を提供する。いくつかの実施形態においてUI拡張器モジュール２６５は、拡張UIオブジェクトを含む内部UI状態を維持することができる。UI拡張のグラフィカルプロパティを更新することは、UI拡張の内部UI状態を更新することを含みうる。
【０１３５】
UI拡張が以前に生成されていない場合、UI拡張器モジュール２６５は、UIオブジェクトおよび任意のターゲットUI子オブジェクトのグラフィカルプロパティと協調するようにUI拡張を生成する。協調時にUI拡張は、ネイティブアプリケーションUIに統合された、または付属するオブジェクトのように動作する。付属は、アプリケーション２５５およびオペレーティングシステム２４５がUI拡張のグラフィカルプロパティ（例えば、サイズ、位置、外観、内容など）に直接的な制約を課さないという点で、任意であり得る。UI拡張は、例えば、開発者またはユーザによって決定される、任意のサイズ、形状、および任意の位置を有する。
【０１３６】
図１１ａ〜１１ｃは、ターゲットUIオブジェクトグラフィカルプロパティの変化に伴うUI拡張１１１２の調整を示す。図１１Ａ〜１１Ｃでは、ターゲットUIオブジェクト１１０２〜１１１０がデスクトップ１１００上に表示され、ユーザに見える状態にある。ウィンドウオブジェクト１１０２は子UIオブジェクト１１０６および１１０４を含み、子UIオブジェクト１１０４および１１０６は、それぞれ、子UIオブジェクト１１０８および１１１０を含む。
【０１３７】
UI拡張１１１２は、ターゲットUIオブジェクト１１０２〜１１１０に関連して提供される。ウィンドウオブジェクト１１０２が、図１１ａに示されるような初期状態から移動またはリサイズされる場合、UI拡張１１１２もまた、図１１bに示されるように、それに応じて移動またはリサイズされてよい。UI拡張オブジェクトを移動またはリサイズすることは、高さ、幅、または（例えば、中心）位置など、UI拡張の１つまたは複数のグラフィカルプロパティを更新することを含みうる。
【０１３８】
UI拡張１１１２は、ターゲットオブジェクト１１０２、１１０４、および１１０６によって定義されるオープングラフィカル領域１１１４内など、特定の方法で付属するようにサイズと位置が調整される。ターゲットオブジェクト１１０２、１１０４、および１１０６のグラフィカルプロパティの変化によってオープングラフィカル領域１１１４のサイズおよび位置が変化すると、UI拡張のグラフィカルプロパティがそれに応じて更新される。図１１ｂにおいてUI拡張１１１２は、UI拡張１１１２がオープングラフィカル領域１１１４でウィンドウターゲットオブジェクト１１０２の右下隅に取り付けられた状態を維持するように移動される。UI拡張１１１２はさらに、オープングラフィカル領域１１１４内に収まって見えるようにリサイズされる。この場合も、この実施形態では、UI拡張１１１２がターゲットオブジェクト１１０２のウィンドウの手前にオーバーレイとして表示され、ターゲットオブジェクト１１１２自体によって制御されるウィンドウ内の実際のオブジェクトとしては表示されない。
【０１３９】
図１１ｃでは、ターゲットオブジェクト１１０２、１１０４、および１１０６がターゲットオブジェクトを遮らずにUI拡張１１１２を表示することができるオープングラフィカル領域（例えば、右下隅）をもはや規定しないようにターゲットオブジェクト１１０２がリサイズされている。UI拡張生成器２７６は、リサイズされたターゲットオブジェクトのグラフィカルプロパティを評価し、他のUIオブジェクトを遮らずにUI拡張１１１２をオープングラフィカル領域１１１６に表示することができると判定する。したがって、UI拡張生成器２７６はUI拡張１１１２のサイズおよび位置を更新し、それをオーバーレイとして表示することで、オープングラフィカル領域１１１６内にUI拡張１１１２が収まって見えるようにする。UI拡張１１１２がネイティブアプリケーションUIオブジェクトを遮ることは回避した方が望ましいことが多いものの、UI拡張１１１２はネイティブUIアプリケーションのオープングラフィック領域内にあることに限定されず、他の（例えば、任意の）付属方法も可能である。例えば、UI拡張１１１２は、ネイティブアプリケーションUIのUIオブジェクトを完全に、もしくは部分的に覆ってもよい。別の例においてUI拡張１１１２は、領域１１２０でターゲットオブジェクト１１０２の直下など、ターゲットUIオブジェクトのウィンドウに隣接して提示され得る。
【０１４０】
図１２は、ターゲットUIオブジェクトに関するイベントのシステム通知から、ターゲットアプリケーション、UIオブジェクトタイプ、およびコンテンツアイテムを特定するための例示的なプロセス１２００を示す。上述のように、UIサブ状態８００のターゲットUIオブジェクトは、UIオブジェクトのタイプまたはクラスを定義するUIオブジェクトタイププロパティを含むことができる。UIサブ状態８００のいくつかの例示的なUIオブジェクトタイプは、ウィンドウオブジェクト、メニューオブジェクト、ボタンオブジェクト、ファイルオブジェクト、またはフォルダオブジェクトタイプを含むことができる。ファイルUIオブジェクトタイプは、ファイル、ファイルシステムパス、またはターゲットアプリケーションを特定する、追加のパラメータを含むことができる。
【０１４１】
しかし、場合によっては、オペレーティングシステム２４５によって維持されるマスタUI状態５００が、UIサブ状態８００のUIオブジェクトタイプの一部またはすべてを含まなくてもよい。例えば、ウィンドウズ（登録商標）オペレーティングシステムは、すべてのUIオブジェクトをウィンドウタイプとして取り扱う。言い換えると、オペレーティングシステムのUI抽象化（例えば、UI状態５００）によって提供されるUIオブジェクトノードクラスのセットは、UI状態４００から完全なUIサブ状態８００を作成するのに十分に詳細な情報をそれ自体では提供しない場合がある。同様に、ウィンドウオブジェクトのUI状態４００はUIオブジェクト（またはUIオブジェクトの基礎となるファイル）またはターゲットアプリケーション（たとえば、ドキュメントファイルを処理するマイクロソフト（登録商標）ワードアプリケーション）によって表されるファイルのIDのような重要な情報を含まないかもしれない。いくつかの実施形態において、オペレーティングシステム２４５がUIオブジェクトに関するシステム通知を生成するとき、通知は基礎となるファイルまたはターゲットアプリケーションを特定しない。代わりに、システム通知はターゲットUIオブジェクトを特定するGUIDを含む。
【０１４２】
さらに、いくつかの実施形態においては、装置１００に格納されたデータの一部が、コンテンツ管理システム１１０によって管理されるコンテンツアイテムである。基礎となるファイルがコンテンツ管理システム１１０によって管理されるコンテンツアイテムであるか、システム１１０の外部にあるファイルであるかを判定するため、ターゲットUIオブジェクトの基礎となるファイルを特定することができる。このように、プロセス１２００は、UIオブジェクトタイプ、およびタイプ固有のプロパティを、ターゲットUIオブジェクトに関するUIイベントのシステム通知から特定するために実行され、そこではUIオブジェクトID(（たはGUID）のみがUIイベント通知から提供される。ファイルオブジェクトタイプの場合、プロパティは、基礎となるファイルおよび／またはコンテンツアイテムを含むことができる。
【０１４３】
１２０５において、UI拡張器モジュール２６５は、フォーカスされたターゲットUIオブジェクトについてのUIイベントを示すシステム通知を受信する。ターゲットUIオブジェクトにはオペレーティングシステム２４５によってGUIDが割り当てられ、このGUIDはシステム通知に含まれている。別の例においてUI拡張器モジュール２６５は、システム通知の受信に引き続いて、オペレーティングシステム２４５にGUIDを要求し、オペレーティングシステム２４５からGUIDを受信する。
【０１４４】
一例では、ターゲットアプリケーションが文書処理アプリケーション（例えば、マイクロソフト（登録商標）ワード）である。フォーカスされたターゲットUIオブジェクトは、開かれた文書ファイルを含んだ文書処理アプリケーションのウィンドウUIオブジェクトとすることができる。システム通知は、ターゲットUIオブジェクトがフォーカスされたターゲットUIオブジェクトになったことを示すことができる。UI拡張器モジュール２６５は、ドキュメントファイルがコンテンツ管理システムによって管理されるコンテンツアイテムである場合、文書処理アプリケーションのUIに関連するUI拡張を生成することができる。オペレーティングシステム２４５が（オペレーティングシステム２４５がファイルシステムパスプロパティとともにファイルオブジェクトクラスを含まないために）この情報をUI状態４００内のUIオブジェクトプロパティとして維持していないとしても、ターゲットアプリケーションおよびコンテンツアイテム（例えばファイルシステムパス）は、システム通知から受信されるターゲットUIオブジェクトのGUIDから決定されなければならない。
【０１４５】
１２１０において、UI拡張器モジュール２６５は、候補ターゲットアプリケーションの内部UI状態２９０に問い合わせることに基づいて、候補GUIDを決定する。候補ターゲットアプリケーションはネイティブアプリケーション２５５のセットを含むことができ、候補ターゲットアプリケーションの１つは、UIイベント通知のターゲットUIオブジェクトに関するターゲットアプリケーションである。
【０１４６】
例えば、ワードプロセッサアプリケーションが候補ターゲットアプリケーションである場合、ワードプロセッサアプリケーションは、ワードプロセッサアプリケーションのUIオブジェクトを表す内部UI状態２９０を維持することができる。候補ターゲットアプリケーションは、UIオブジェクト情報を内部UI状態２９０に照会して受信するために用いることができるAPIをさらに提供することができる。このAPIを使用して、UI拡張器モジュール２６５は、現在フォーカスされているドキュメントウィンドウと、ワードプロセッサアプリケーション内のUIオブジェクトに関するGUIDとを要求し、受信する。UI拡張器モジュール２６５は現在フォーカスされているUIオブジェクトについての候補ターゲットアプリケーションの内部UI状態を照会することに基づいて、各候補ターゲットアプリケーションに関連付けられた候補GUIDを要求し、受信する。
【０１４７】
１２１５においてUI拡張器モジュール２６５は、オペレーティングシステム２４５から受信したGUIDと候補ターゲットアプリケーションから受信した候補GUIDとを比較することに基づいて、候補ターゲットアプリケーションからターゲットアプリケーションを決定する。例えば、UI拡張器モジュール２６５はGUIDを候補GUIDのうちの１つとマッチングさせることができ、マッチングする候補GUIDに関連付けられた候補ターゲットアプリケーションがターゲットアプリケーションとして決定される。
【０１４８】
１２２０において、UI拡張器モジュール２６５は、GUIDを用いてターゲットアプリケーションに問い合わせることに基づいて、ターゲットUIオブジェクトに関連付けられたファイルシステムパスを決定する。例えば、UI拡張器モジュール２６５は、GUIDを用いてファイルシステムパスを問い合わせるためにターゲットアプリケーションのAPIを使用してもよいし、あるいはターゲットアプリケーションの現在フォーカスされているUIオブジェクトに関連づけられたファイルシステムパスを問い合わせることによってターゲットアプリケーションのAPIを用いてもよい。ファイルシステムパスは、ファイルシステムディレクトリパスおよびファイル名を含むことができる。
【０１４９】
１２２５において、UI拡張器モジュール２６５は、ファイルシステムパスに基づいて、UIオブジェクトタイプおよびコンテンツアイテムを決定する。ファイルシステムパスは、ディレクトリおよびファイル名を含むことができる。ファイル名はUIオブジェクトタイプを特定するために使用されるファイルタイプ拡張子（例えば、ドキュメントファイルについては.doc）を含むことができる。別の例では、特定のファイル名のないフォルダディレクトリが、UIオブジェクトがフォルダオブジェクトタイプであることを示すことができる。
【０１５０】
コンテンツアイテムはまた、ファイルシステムパスから特定されてもよい。上述のように、コンテンツアイテムはコンテンツ管理システム１１０によって格納されたデータを意味し、複数の装置１００にわたって同期されうる。さらに、コンテンツ管理システム１１０で維持されるファイル編成スキームがクライアントアプリケーション２００と共にオペレーティングシステム２４５によってローカルファイル構造として表されるように、コンテンツ管理システム１１０へのアクセスをローカルファイル管理システムに統合することができる。ローカルファイル構造のオブジェクト（例えば、フォルダ、ファイル）は、ファイルシステムパスによって参照され、したがって、コンテンツアイテムはファイルシステムパスから特定される。いくつかの実施形態において、UI拡張器モジュール２６５は、コンテンツアクセスモジュール２０６にファイルシステムパスを問い合わせることに基づいて、ターゲットUIオブジェクトに関連づけられたファイルシステムパスがコンテンツアイテムであるかどうかを判定することができる。コンテンツアクセスモジュール２０６は、コンテンツアイテムのディレクトリおよびそれらのファイルシステムパスを含むことができる。
【０１５１】
１２３０において、UI拡張器モジュール２６５は、UIオブジェクトタイプおよびコンテンツアイテムに基づいてUI拡張を生成する。例えば、（例えば、ファイルシステムパスおよび、UIオブジェクトがコンテンツアイテムであるかどうかを特定する）UIオブジェクトタイプおよびタイプ固有のプロパティは、UIサブ状態８００のUIオブジェクトに格納される。
【０１５２】
UI拡張は、ターゲットUIオブジェクトのUIに対するオーバレイとして表示することができる。したがって、UI拡張はユーザの視点からはターゲットアプリケーションのUIと統合されているように見えるが、UI拡張器モジュール２６５はターゲットアプリケーションのUIにアクセスまたは変更する必要はなく、同時に、ターゲットアプリケーションはUI拡張に対するプログラム制御を有さない。したがって、ターゲットアプリケーション２５５またはオペレーティングシステム２４５はUI拡張オーバーレイのグラフィカルプロパティにいかなる制限も課さないので、UI拡張はターゲットアプリケーションのUIに関連するなど、システム内の任意のUIに任意に付属させることができる。
【０１５３】
UI拡張器モジュール２６５によって生成されるUI拡張は、ターゲットアプリケーションによって提供されず、好ましくはターゲットアプリケーション内の現在フォーカスされているUIオブジェクトに関連する、拡張された機能を提供することができる。例えば、コンテンツアイテムがドキュメントファイルである場合、UI拡張は、コンテンツ管理システム１００で同期されたコンテンツアイテムとのインタラクション、または選択された他のユーザとそのドキュメントファイルを共有する機能、またはオペレーティングシステムまたはコンテンツ管理システムの適切な機能を使用してドキュメントファイルのバージョン履歴を表示する機能など、ドキュメントファイルの拡張機能を提供するUIオブジェクトを含むことができる。その意味において、UI拡張のグラフィカルまたは機能プロパティは、フォーカスされたコンテンツアイテム、またはフォーカスされたコンテンツアイテムのプロパティ（例えば、ファイルタイプ)）基づいて更新される。
【０１５４】
図１３は、フォーカスされたファイルオブジェクトのためのUI拡張１３０２および１３１０の例を示す。ターゲットファイルシステムブラウザアプリケーション内のコンテンツアイテムを表すファイルオブジェクト５２２の選択またはフォーカスに応答して、ボタンオブジェクト１３０４、１３０６、および１３０８を含むUI拡張１３０２を生成することができる。ボタンオブジェクト１３０４、１３０６、および１３０８は、コンテンツアイテムとのインタラクティブな機能を提供する。例えば、コメントボタン１３０４はユーザがコンテンツアイテムにコメントを追加することを可能にし、バージョン選択ボタン１３０６はユーザがコンテンツアイテムの異なるバージョンを選択することを可能にする機能を提供し、共有ファイルボタン１３０８は、ユーザがコンテンツ管理システムの他のユーザとファイルを共有することを可能にする機能を提供する。
【０１５５】
UIイベントは、１つまたは複数のUI拡張の作成をトリガすることができる。例えば、UI拡張１３１０は、ファイルオブジェクト５２２の選択またはフォーカスに応答して生成されてもよい。UI拡張１３１０はコンテンツアイテムを編集している、閲覧している、または開いた他のユーザを特定するインタラクションデータを表示する追加機能を提供する。別の例では、フォーカスされたUIオブジェクトがファイルオブジェクト５２４などのコンテンツアイテムでない場合、UI拡張１２０２／１２１０は生成されず、または異なるUI拡張が生成される（例えば、コンテンツアイテム追加ボタン)。様々な実装において、UI拡張１３０２および１３１０の機能は単一のUI拡張に、または３つ以上のUI拡張に実装されてもよい。
【０１５６】
１２３５でUI拡張器モジュール２６５は、ファイルシステムパスおよびターゲットアプリケーションを含むように、ターゲットUIオブジェクトのUIサブ状態８００を更新する。例えば、ターゲットUIオブジェクトがファイルオブジェクトである場合、そのターゲットUIオブジェクトのGUIDに関連付けて、ファイルシステムパスおよびターゲットアプリケーションが格納される。ターゲットUIオブジェクトのGUIDがイベントのその後のシステム通知で受信されると、UI拡張器モジュール２６５は、受信したGUIDを使用してUIサブ状態８００からファイルシステムパスまたはターゲットアプリケーションを参照することができる。その意味で、プロセス１２００は、オペレーティングシステム２４５のマスタUI状態４００のノードクラスと、UIサブ状態のノードクラスとの間の変換機能を提供する。いくつかの実施形態では、UI状態４００のUIオブジェクトとUIサブ状態８００のターゲットUIオブジェクトとの間にポインタがマッピングされる。いくつかの実施形態では、UI状態４００のUIオブジェクトと特定のターゲットUIオブジェクトとの間に既存のマッピングが存在する場合、ステップ１２１０〜１２２５はスキップされる。その代わりに、マッピングは、UIオブジェクトのGUIDからターゲットアプリケーションまたはコンテンツアイテムを調べるために使用される。いくつかの実施形態では、異なるターゲットUIオブジェクトタイプが異なる変換機能に関連付けられる。例えば、異なるUIオブジェクトタイプは、異なるAPIを有する異なるターゲットアプリケーションによって処理される。
【０１５７】
図１４は、グラフィックスイベントのシステム通知からターゲットUIオブジェクトを特定するための例示的なプロセス１４００を示す。ターゲットアプリケーションのUIサブ状態８００を生成するためのUIイベントの使用は、先に詳細に説明されている。UIイベントはオペレーティングシステム２４５によって維持されるUI状態４００の変化に関連付けられたイベントを意味し、システム通知の登録は、UI API ２８０を使用してオペレーティングシステム２４５と通信することを含みうる。
【０１５８】
しかし、APIによって提供されるUIイベントのセットは、UIサブ状態８００がマスタUI状態４００に対して古くなることを防ぐのに十分ではない場合がある。例えば、オペレーティングシステム２４５は、UI拡張がターゲットアプリケーションのUIとの協調に失敗するような、UIイベント関して許容できなシステム通知遅延を被るかもしれない。したがって、UIイベント通知のみを用いてUIサブ状態８００を更新すると、UIサブ状態８００がUI状態４００に対して古くなりうる。
【０１５９】
プロセス１４００は、UIオブジェクトグラフィカルプロパティを提供することができる、非同期イベントの他のソースからのシステム通知を使用する。上述のように、オペレーティングシステム２４５は、表示のためにUIオブジェクトをレンダリングするグラフィックスエンジン２９４を含んでいる。UI拡張器モジュール２６５は、OS X（登録商標）オペレーティングシステムのコアグラフィックスAPIのようなグラフィックスAPI ２９２を使用して、オペレーティングシステム２４５のグラフィックスエンジン２９４と通信することができる。グラフィックスAPI ２９２はグラフィックスイベントに関する非同期システム通知を登録し、受信するために使用され、グラフィックスイベントに関する通知は、UIサブ状態８００を更新するために使用される。グラフィックスイベント（または他の非UIイベント）を受信すると、UIサブ状態８００内の正しいターゲットUIオブジェクトがグラフィックスイベントのシステム通知から特定できることを確実にするため、イベントとターゲットUIオブジェクトとの間の相関が確立される。
【０１６０】
１４０５において、オペレーティングシステム２４５は、グラフィックスエンジン２９４を用いて、UI状態４００のUIオブジェクトに対応するグラフィックスオブジェクトをレンダリングする。例えば、グラフィックスエンジン２９４はUIオブジェクトグラフィックスプロパティを受信するために、オペレーティングシステムによって維持されるUI状態４００を監視する。グラフィックスエンジン２９４は、UIオブジェクトグラフィックスプロパティに基づいてグラフィックスオブジェクトをレンダリングする。レンダリングされたグラフィックスオブジェクトのそれぞれは、オペレーティングシステム２４５によって管理されるUI状態４００のUIオブジェクトに対応する。
【０１６１】
１４１０で、オペレーティングシステム２４５は、グラフィックスエンジン２９４によってレンダリングされたグラフィックスオブジェクトにグラフィックスオブジェクトIDを割り当てる。レンダリングされる各UIオブジェクト、またはグラフィックスオブジェクトは、グラフィックスオブジェクトIDに関連付けられる。グラフィックスオブジェクトIDは、グラフィックスエンジン２９４によってレンダリングされるグラフィックスオブジェクトの固有識別子である。グラフィックスオブジェクトIDが、関連付けられたターゲットUIオブジェクトのターゲットUIオブジェクトID（またはGUID）と異なる場合、UI拡張器モジュール２６５は以下でより詳細に説明するように、グラフィックスオブジェクトIDとターゲットUIオブジェクトIDとの間の関連付けを作成する。
【０１６２】
１４１５において、UI拡張器モジュール２６５は、フォーカスされたターゲットUIオブジェクトについてのグラフィックスオブジェクトIDをオペレーティングシステム２４５のグラフィックスエンジン２９４に要求する。１４２０で、オペレーティングシステム２４５は、フォーカスされたグラフィックスオブジェクトについてのグラフィックスオブジェクトIDをUI拡張器モジュール２６５に送信する。グラフィックスイベント／オブジェクトに関する、UI拡張器モジュール２６５とオペレーティングシステム２４５との間の通信は、グラフィックスAPI ２９２を使用することができる。
【０１６３】
いくつかの実施形態では、プロセス８００の４０８で上述したように、ターゲットUIオブジェクトがフォーカスされたUIオブジェクトになったことを示すUIのシステム通知をUI拡張器モジュール２６５が受信した際に、ターゲットUIオブジェクトについてのグラフィックスオブジェクトIDの要求が開始される。システム通知は、ターゲットUIオブジェクトを特定するUIオブジェクトIDまたはGUIDを含むことができる。UIイベント通知に応答して、UI拡張器モジュール２６５は、フォーカスされたターゲットUIオブジェクトに対応するフォーカスされたグラフィックスオブジェクトについてのグラフィックスオブジェクトIDをオペレーティングシステム２４５に求める要求を生成する。
【０１６４】
１４２５においてUI拡張器モジュール２６５は、受信したグラフィックスオブジェクトIDをターゲットUIオブジェクトのUIオブジェクトIDに関連付ける。グラフィックスオブジェクトIDとUIオブジェクトIDとの関連付けは、UI拡張器モジュール２６５がその後、グラフィックスオブジェクトIDを含んだグラフィックスイベントのためのシステム通知を受信するときに使用される。受信したグラフィックスオブジェクトIDは関連付けられたターゲットUIオブジェクトを参照するために使用され、それにより、グラフィックスイベントのターゲットUIオブジェクトをグラフィックスイベント通知から特定することができる。
【０１６５】
１４３０においてUI拡張器モジュール２６５は、オペレーティングシステム２４５からのグラフィックスオブジェクトIDのグラフィックスイベントに関するシステム通知を登録する。この要求は、１４２０でオペレーティングシステム２４５から以前に受信したグラフィックスオブジェクトIDを含むことができる。
【０１６６】
１４３５において、オペレーティングシステム２４５は、グラフィックスイベントを決定する。グラフィックスエンジン２９４はUI状態２８５を監視し、UI状態２８５のUIオブジェクトのグラフィカルプロパティに基づいてグラフィックスオブジェクトをレンダリングする。オペレーティングシステム２４５はグラフィックスオブジェクトの高さ、幅、または位置など、グラフィックスオブジェクトレンダリングが変更されたときに、グラフィックスイベントを決定することができる。
【０１６７】
１４４０において、グラフィックスイベントの決定に応答して、オペレーティングシステム２４５は、グラフィックスイベントに関するシステム通知をUI拡張器モジュール２６５に送信する。グラフィックスAPI ２９２にしたがって、システム通知は、グラフィックスイベントに関連するグラフィックスオブジェクトのグラフィックスオブジェクトIDを含む。システム通知は、グラフィックスオブジェクトのグラフィカルプロパティをさらに含むことができる。グラフィックスイベントは、グラフィカルプロパティが以前の状態と異なる場合に引き起こされうる。
【０１６８】
１４４５においてUI拡張器モジュール２６５は、受信したシステム通知のグラフィックスオブジェクトIDに基づいて、グラフィックスイベントのターゲットUIオブジェクトを決定する。UI拡張器モジュール２６５は、１４２５で生成された関連付けグラフィックスオブジェクトIDおよびUIオブジェクトIDを参照することができる。
【０１６９】
１４５０においてUI拡張器モジュール２６５は、UIサブ状態８００について、ターゲットUIオブジェクトのグラフィカルプロパティを更新する。ターゲットUIオブジェクトのグラフィカルプロパティは、グラフィックスイベントに関するシステム通知と共に受信されたグラフィックスオブジェクトのグラフィカルプロパティに従って更新される。さらに、UI拡張器モジュール２６５は、UIサブ状態８００のターゲットUIオブジェクトのグラフィカルプロパティへの更新に基づいてUI拡張を更新する。
【０１７０】
これまでの本発明の実施形態の説明は例示目的で提示されたものであり、網羅的であること、または本発明を開示された形態そのものに限定することを意図したものではない。当業者は、先の開示に照らして多くの修正および変形が可能であることを理解することができる。
【０１７１】
この説明のいくつかの部分は、情報に対する動作のアルゴリズムおよび記号表現に関して本発明の実施形態を説明している。これらのアルゴリズムの説明および表現は、データ処理技術分野の当業者によって、他の当業者に彼らの仕事の内容を効果的に伝えるために一般に使用されている。これらの動作は機能的に、計算的に、または論理的に説明されるが、コンピュータプログラムまたは同等の電気回路、マイクロコードなどによって実施されるものと理解される。さらに、時には、一般性を失うことなく、これらの動作の構成をモジュールと呼ぶことも便利であることが分かっている。説明された操作およびそれらの関連するモジュールは、ソフトウェア、ファームウェア、ハードウェア、またはそれらの任意の組合せで実施され得る。
【０１７２】
本明細書で説明されるステップ、操作、またはプロセスのいずれも、単独で、または他のデバイスと組み合わせて、１つまたは複数のハードウェアまたはソフトウェアモジュールを用いて実行または実装され得る。一実施形態では、ソフトウェアモジュールがコンピュータプログラムコードを含むコンピュータ可読媒体を備えるコンピュータプログラム製品で実装され、コンピュータプログラムコードは説明されるステップ、操作、またはプロセスのいずれかまたはすべてを実行するために、コンピュータプロセッサによって実行され得る。
【０１７３】
本発明の実施形態は、本明細書の動作を実行するための装置にも関連しうる。この装置は必要とされる目的のために特別に構築されてもよく、および／またはコンピュータに記憶されたコンピュータプログラムによって選択的に起動または再構成される汎用コンピューティングデバイスを備えてもよい。そのようなコンピュータプログラムは、コンピュータシステムバスに結合することができる、非一時的な有形のコンピュータ可読記憶媒体、または電子命令を格納するのに適した任意のタイプの媒体に格納することができる。さらに、本明細書で言及される任意のコンピューティングシステムは単一のプロセッサを含むことができ、またはコンピューティング能力を高めるために複数のプロセッサ設計を採用するアーキテクチャとすることができる。
【０１７４】
本発明の実施形態は、本明細書に記載の計算プロセスによって生成される製品にも関することができる。そのような製品はコンピューティングプロセスから得られる情報を含むことができ、情報は、非一時的な有形のコンピュータ可読記憶媒体上に格納され、本明細書で説明されるコンピュータプログラム製品または他のデータ組合せの任意の実施形態を含むことができる。
【０１７５】
相対的な用語、例えば、高いまたは重要でないといった用語は、他に定義されない場合、値を割り当て、その値が確立された閾値とどのように比較されるかを決定するものと理解することができる。例えば、「高速接続を選択する」という語句は、閾値を超える接続速度に対応して割り当てられた値を有する接続を選択することを意味すると理解することができる。本明細書において、閾値を超えるとは、比較対象の項目に関する値が指定された他の値を上回ること、比較対象の項目が、最大値を有する所定の指定された数の項目に含まれること、または比較対象の項目が指定された上位百分率内の値を有することを意味する。最大値を有する所定の指定された数の項目に含まれること、または比較対象の項目が指定された上位百分率内の値を有することを意味する。本明細書において、閾値を下回るとは、比較対象の項目に関する値が指定された他の量を下回ること、比較対象の項目が、最小値を有する所定の指定された数の項目に含まれること、または比較対象の項目が指定された下位百分率内の値を有することを意味する。本明細書において、閾値内であるとは、比較対象の項目に関する値が２つの指定された他の値の間にあること、比較対象の項目が中くらいの指定された数の項目に含まれること、または比較対象の項目が中くらいの指定されたパーセント範囲内の量を有することを意味する。
【０１７６】
本明細書において、「または」という用語は、項目群の任意の可能な配列を意味する。例えば、句「A、B、またはC」はA、B、Cの少なくとも１つ、それらの任意の組合せ（例えば、A; B; C; AとB; AとC; BとC; A、B、およびC）、または、任意の項目の重複（AとA; B、BおよびC; A、A、B、C、およびCなど）を意味する。
【０１７７】
最後に、本明細書で使用される言語は主に、可読性および教育目的のために選択されたものであり、本発明の主題を描写または限定するために選択されたものではない場合がある。したがって、本発明の範囲は、この詳細な説明によってではなく、むしろ、本明細書に基づく出願に対して発行される任意の特許請求の範囲によって限定されることが意図される。したがって、本発明の実施形態の開示は、以下の特許請求の範囲に記載される本発明の範囲を例示することを意図するものであって、限定することを意図するものではない。
【図１】
2020074096.tif 000003
【図２】
2020074096.tif 000004
【図３】
2020074096.tif 000005
【図４】
2020074096.tif 000006
【図５】
2020074096.tif 000007
【図６Ａ】
2020074096.tif 000008
【図６Ｂ】
2020074096.tif 000009
【図７】
2020074096.tif 000010
【図８】
2020074096.tif 000011
【図９】
2020074096.tif 000012
【図１０】
2020074096.tif 000013
【図１１ａ】
2020074096.tif 000014
【図１１ｂ】
2020074096.tif 000015
【図１１ｃ】
2020074096.tif 000016
【図１２】
2020074096.tif 000017
【図１３】
2020074096.tif 000018
【図１４】
2020074096.tif 000019
【手続補正書】
【提出日】令和2年1月14日(2020.1.14)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
コンピュータシステムに表示されるターゲットアプリケーションのユーザインタフェース(UI)を拡張する方法であって、
オペレーティングシステムのUI状態に関連付けられたUIイベントを示すシステム通知を前記オペレーティングシステムから受信することと、ここで前記UI状態は、前記ターゲットアプリケーションに関連するターゲットUIオブジェクトを示し、前記ターゲットUIオブジェクトは長さ、幅、位置を有する、受信することと、
前記受信したシステム通知に基づいて前記ターゲットアプリケーションに関するUIサブ状態を更新することと、ここで前記UIサブ状態は前記オペレーティングシステムの前記UI状態とは別個のものである、更新することと、
前記UIサブ状態に基づいて前記ターゲットアプリケーションの前記ターゲットUIオブジェクトに関するUI拡張を生成することであって、前記UI拡張を生成することは、前記UI拡張のUI拡張オブジェクトのグラフィカルプロパティを決定することを含み、前記UI拡張オブジェクトの前記グラフィカルプロパティは前記UI拡張オブジェクトの長さ、幅、および位置を含む、生成することと、
前記UI拡張を前記ターゲットUIオブジェクトと協調して表示させることと、を有する方法。
【請求項２】
前記UI状態が前記オペレーティングシステムによって生成され、かつ前記ターゲットUIオブジェクトのグラフィカルプロパティを規定する、請求項１に記載の方法。 
【請求項３】
前記システム通知が、前記ターゲットUIオブジェクトに関するシステム通知の登録後に受信される、請求項１に記載の方法。 
【請求項４】
前記UI拡張が、前記UIサブ状態によって規定される前記ターゲットUIオブジェクトの前記グラフィカルプロパティにさらに基づいて生成される、請求項１に記載の方法。 
【請求項５】
前記システム通知が、前記オペレーティングシステムのUI APIを通じて受信される、請求項１に記載の方法。
【請求項６】
請求項１に記載の方法であって、さらに、
前記オペレーティングシステムから、起動イベントを示す第２のシステム通知を受信することと、
前記第２のシステム通知を受信したことに応答して、
前記オペレーティングシステムに前記ターゲットアプリケーションのUIオブジェクトを要求することと、
前記要求に応答して前記UIオブジェクトを受信することと、
前記受信したUIオブジェクトから前記ターゲットUIオブジェクトを特定することと、
前記ターゲットUIオブジェクトを前記UIサブ状態に追加することと、
前記ターゲットUIオブジェクトに関して前記システム通知を登録することと、を有する方法。
【請求項７】
前記ターゲットUIオブジェクトの１つ以上の子UIオブジェクトを決定することと、
前記１つ以上の子UIオブジェクトのグラフィカルプロパティを決定することと、
前記１つ以上の子UIオブジェクトの前記グラフィカルプロパティに基づいて、UI拡張オブジェクトの前記グラフィカルプロパティを決定することと、をさらに有する請求項１に記載の方法。 
【請求項８】
前記UI拡張を表示させることが、前記ターゲットUIオブジェクトを覆うように、もしくは前記ターゲットUIオブジェクトに隣接するように前記UI拡張を表示させることを含む、請求項１に記載の方法。
【請求項９】
前記システム通知は、前記ターゲットUIオブジェクトを特定するグローバル一意識別子(GUID)を含み、
前記方法はさらに、前記システム通知の受信に応答して、
候補ターゲットアプリケーションの内部UI状態を問い合わせることに基づいて候補GUIDを決定することと、
前記システム通知の前記GUIDを前記候補ターゲットアプリケーションから受信した前記候補GUIDと比較することにより、前記候補ターゲットアプリケーションから前記ターゲットアプリケーションを決定することと、を有する請求項１に記載の方法。
【請求項１０】
前記GUIDを用いて前記ターゲットアプリケーションに問い合わせることにより、前記ターゲットUIオブジェクトに関連付けられたファイルシステムパスを決定することと、
前記ファイルシステムパスに基づいて前記ターゲットUIオブジェクトに関するUIオブジェクトタイプを特定することと、をさらに有する請求項９に記載の方法。
【請求項１１】
前記ターゲットUIオブジェクトが前記UIオブジェクトタイプに関連付けられるように、前記ターゲットUIオブジェクトの前記UIサブ状態を更新することをさらに有する、請求項１０に記載の方法。
【請求項１２】
前記GUIDを用いて前記ターゲットアプリケーションに問い合わせることにより、前記ターゲットUIオブジェクトに関連付けられたファイルシステムパスを決定することと、
前記ファイルシステムパスに基づいて、前記ターゲットUIオブジェクトをコンテンツ管理システムのコンテンツアイテムとして特定することと、をさらに有する請求項９に記載の方法。
【請求項１３】
前記UI拡張を生成することは、前記コンテンツアイテムに関連する前記コンテンツ管理システムの機能のためのインターフェースを提供するUI拡張オブジェクトを生成することを含む、請求項１２に記載の方法。
【請求項１４】
前記オペレーティングシステムによってレンダリングされたグラフィックスオブジェクトに関するグラフィックスオブジェクトIDを、前記ターゲットUIオブジェクトのUIオブジェクトIDに関連付けることと、
前記グラフィックスオブジェクトIDを含むグラフィックスイベントを示す第２のシステム通知を受信することと、
前記グラフィックスオブジェクトIDおよび前記関連付けされたUIオブジェクトIDに基づいて、前記ターゲットUIオブジェクトを特定することと、
前記グラフィックスオブジェクトのグラフィカルプロパティに基づいて、前記ターゲットUIオブジェクトのグラフィカルプロパティを更新することと、をさらに有する請求項１に記載の方法。
【請求項１５】
前記オペレーティングシステム上で稼働する複数のターゲットアプリケーションのうちの１つにそれぞれが対応する、所定数のUIサブ状態を維持することをさらに有する、請求項１に記載の方法。
【請求項１６】
コンピュータシステムに表示されるターゲットアプリケーションのユーザインタフェース(UI)を拡張するための装置であって、
メモリと、１つまたは複数のプロセッサとを有し、前記１つまたは複数のプロセッサは、命令セットによって、
オペレーティングシステムのUI状態に関連付けられたUIイベントを示すシステム通知を前記オペレーティングシステムから受信し、ここで前記UI状態は、前記ターゲットアプリケーションに関連するターゲットUIオブジェクトを示し、前記ターゲットUIオブジェクトは長さ、幅、位置を有し、
前記受信したシステム通知に基づいて前記ターゲットアプリケーションに関するUIサブ状態を更新し、ここで前記UIサブ状態は前記オペレーティングシステムの前記UI状態とは別個のものであり、
前記UIサブ状態に基づいて前記ターゲットアプリケーションの前記ターゲットUIオブジェクトに関するUI拡張を生成し、ここで前記UI拡張を生成することは、前記UI拡張のUI拡張オブジェクトのグラフィカルプロパティを決定することを含み、前記UI拡張オブジェクトの前記グラフィカルプロパティは前記UI拡張オブジェクトの長さ、幅、および位置を含み、
前記UI拡張を前記ターゲットUIオブジェクトと協調して表示させる、
ようにされる装置。
【請求項１７】
前記UI状態は前記オペレーティングシステムによって作成され、前記ターゲットUIオブジェクトのグラフィカルプロパティを規定し、前記システム通知は前記ターゲットUIオブジェクトに関連するシステム通知の登録後に受信され、前記UI拡張が、前記UIサブ状態によって規定される前記ターゲットUIオブジェクトの前記グラフィカルプロパティにさらに基づいて生成され、前記システム通知が前記オペレーティングシステムのUI APIを通じて受信される、請求項１６に記載の装置。
【請求項１８】
コンピュータシステムによって実行されると、前記コンピュータシステムのオペレーティングシステム上で稼働するターゲットアプリケーションのユーザインタフェース(UI)を前記コンピュータシステムのディスプレイ上で拡張するための動作を前記コンピュータシステムに実行させる命令を有するコンピュータプログラムであって、前記動作は、
前記オペレーティングシステムのUI状態に関連付けられたUIイベントを示すシステム通知を前記オペレーティングシステムから受信することと、ここで前記UI状態は、前記ターゲットアプリケーションに関連するターゲットUIオブジェクトを示し、前記ターゲットUIオブジェクトは長さ、幅、位置を有する、受信することと、
前記受信したシステム通知に基づいて前記ターゲットアプリケーションに関するUIサブ状態を更新することと、ここで前記UIサブ状態は前記オペレーティングシステムの前記UI状態とは別個のものである、更新することと、
前記UIサブ状態に基づいて前記ターゲットアプリケーションの前記ターゲットUIオブジェクトに関するUI拡張を生成することであって、前記UI拡張を生成することは、前記UI拡張のUI拡張オブジェクトのグラフィカルプロパティを決定することを含み、前記UI拡張オブジェクトの前記グラフィカルプロパティは前記UI拡張オブジェクトの長さ、幅、および位置を含む、生成することと、
前記UI拡張を前記ターゲットUIオブジェクトと協調して表示させることと、を有するコンピュータプログラム。
【請求項１９】
前記UI状態は前記オペレーティングシステムによって作成され、前記ターゲットUIオブジェクトのグラフィカルプロパティを規定し、前記システム通知は前記ターゲットUIオブジェクトに関連するシステム通知の登録後に受信され、前記UI拡張が、前記UIサブ状態によって規定される前記ターゲットUIオブジェクトの前記グラフィカルプロパティにさらに基づいて生成され、前記システム通知が前記オペレーティングシステムのUI APIを通じて受信される、請求項１８に記載のコンピュータプログラム。
【外国語明細書】
2020074096000001.pdf